# Name: smd_calendar v0.3 # 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 b24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjM6IjAuMyI7czoxMToiZGVzY3JpcHRpb24iO3M6 NjI6IkNhbGVuZGFyIC8gZXZlbnQgLyBzY2hlZHVsZSBzeXN0ZW0gd2l0aCBldmVudHMgYXMg VFhQIGFydGljbGVzIjtzOjQ6ImNvZGUiO3M6NTE4MDk6Ii8vIEJhc2VkIGhlYXZpbHkgb24g bWRwX2NhbGVuZGFyIC0gdGhhbmtzIQ0KLy9UT0RPOiBJbnZlc3RpZ2F0ZQ0KLyoNCiRkID0g bmV3IERhdGVUaW1lKCcyMDA4LTEyLTIyIDEyOjUyJyk7DQplY2hvICRkLT5nZXRUaW1lem9u ZSgpLT5nZXROYW1lKCk7DQoqLw0KDQppZiggJGRhdGUgPSBncHMoJ2RhdGUnKSApIHsNCgkk X0dFVFsnbW9udGgnXSA9ICRkYXRlOw0KfQ0KDQpmdW5jdGlvbiBzbWRfY2FsZW5kYXIoJGF0 dHMsICR0aGluZz0nJykgew0KCWdsb2JhbCAkcHJldGV4dCwgJHZhcmlhYmxlLCAkcHJlZnMs ICRzbWRfY2FsX2ZsYWcsICRzZG1fY2FsX3VjbHMsICRzbWRfY2FsX2lkLCAkc21kX3llYXIs ICRzbWRfbW9udGgsICRzbWRfd2VlaywgJHNtZF9kYXk7DQoNCglleHRyYWN0KGxBdHRzKGFy cmF5KA0KCQkndGltZScgPT4gJ2FueScsIC8vIHBhc3QsIGZ1dHVyZSwgYW55DQoJCSdzaXpl JyA9PiAnbGFyZ2UnLCAvLyBzbWFsbCBvciBsYXJnZSAoY2FsZW5kYXIpDQoJCSdleHBpcmVk JyA9PiAnJywgLy8gMD1ubywgMT15ZXMgcHVibGlzaCBleHBpcmVkIGV2ZW50cywgZW1wdHk9 dXNlIHByZWZzDQoJCSdjYXRlZ29yeScgPT4gJycsDQoJCSdzZWN0aW9uJyA9PiAnJywNCgkJ J2F1dGhvcicgPT4gJycsDQoJCSdzdGF0dXMnID0+ICdsaXZlJywNCgkJJ3N0YXRpYycgPT4g JycsDQoJCSdmb3JtJyA9PiAnJywNCgkJJ3NwYW5mb3JtJyA9PiAnU01EX1NBTUUnLA0KCQkn cmVjdXJmb3JtJyA9PiAnU01EX1NBTUUnLA0KCQknY2VsbGZvcm0nID0+ICcnLA0KCQknc3Rl cGZpZWxkJyA9PiAnJywNCgkJJ3NraXBmaWVsZCcgPT4gJycsDQoJCSdzaG93c2tpcHBlZCcg PT4gJzAnLA0KCQknc2hvd3NwYW5uZWQnID0+ICcxJywNCgkJJ2hvbGlkYXlzJyA9PiAnJywN CgkJJ2hvbGlkYXlmbGFncycgPT4gJ3N0YW5kYXJkJywgLy8gcGVybWl0IHRoZXNlIGV2ZW50 cyB0byAibGFuZCIgb24gYSBob2xpZGF5IChzdGFuZGFyZCwgcmVjdXIsIG11bHRpKQ0KCQkn Y2xhc3NsZXZlbHMnID0+ICdjZWxsLCBldmVudCcsIC8vIGNlbGwsIGV2ZW50LCBjZWxscGx1 cyAoY29tYmluZXMgZXZlbnQgYW5kIGNlbGwgaW50byBjZWxsIGxldmVsIGNsYXNzZXMpDQoJ CSdsaW5rcG9zdGVkJyA9PiAncmVjdXIsIG11bHRpLCBtdWx0aXByZXYsIG11bHRpbGFzdCcs IC8vIHdoaWNoIGV2ZW50cyBjYXVzZSB0aGUgbWluaWNhbCB0byBsaW5rIHRvIHBvc3RlZCBk YXRlDQoJCSdjbGFzc3ByZWZpeGVzJyA9PiAnc21kX2NhbF8sIHNtZF9jYWxfZXZfJywgLy8g MXN0PWNlbGwtbGV2ZWwgcGZ4LCAybmQ9ZXZlbnQtbGV2ZWwgcGZ4IChvcHRpb25hbCkNCgkJ J2NsYXNzJyA9PiAnJywgLy8gVGFibGUgY2xhc3MNCgkJJ3Jvd2NsYXNzJyA9PiAnJywNCgkJ J2NlbGxjbGFzcycgPT4gJycsDQoJCSdlbXB0eWNsYXNzJyA9PiAnZW1wdHknLA0KCQknaXNv d2Vla2NsYXNzJyA9PiAnd2VlaycsDQoJCSduYXZjbGFzcycgPT4gJ25hdnByZXYsIG5hdm5l eHQnLA0KCQknbmF2YXJyb3cnID0+ICcmIzYwOywgJiM2MjsnLA0KCQknbmF2aWQnID0+ICcn LA0KCQknZXZlbnRjbGFzc2VzJyA9PiAnY2F0ZWdvcnknLA0KCQknZXZlbnR3cmFwdGFnJyA9 PiAnc3BhbicsDQoJCSdzZWxlY3QnID0+ICcnLCAvLyB3ZWVrLCBtb250aCBhbmQvb3IgeWVh ciAodG8gZGlzcGxheSBkcm9wZG93bnMpDQoJCSdzZWxlY3RidG4nID0+ICcnLCAvLyBlbXB0 eSA9IGF1dG9zZWxlY3QgKG9uY2hhbmdlKSwgb3IgdGV4dCB0byBnbyBvbiB0aGUgc3VibWl0 IGJ1dHRvbg0KCQknbXljbGFzcycgPT4gJycsIC8vIG1vbnRoLXllYXIgaGVhZGVyIGNsYXNz DQoJCSdteXdyYXB0YWcnID0+ICcnLCAvLyBtb250aC15ZWFyIGhlYWRlciB3cmFwdGFnDQoJ CSdpZCcgPT4gJycsIC8vIFRhYmxlIElEICg9Y2FsaWQpDQoJCSd3ZWVrJyA9PiAnJywNCgkJ J21vbnRoJyA9PiAnJywNCgkJJ3llYXInID0+ICcnLA0KCQkneWVhcndpZHRoJyA9PiAnMCww JywgLy8gbnVtYmVyIG9mIHllYXJzIGVpdGhlciBzaWRlIG9mIHRoZSBmaXJzdC9sYXN0IGFy dGljbGUgdG8gcGVybWl0DQoJCSdpc293ZWVrcycgPT4gJycsIC8vIGVtcHR5ID0gZG9uJ3Qg c2hvdyBJU08gd2Vla3M7IG9yIHRleHQgb2YgY29sdW1uIGhlYWRpbmcsIHRleHQgb2YgY2Vs bCBwcmVmaXgNCgkJJ2RheWZvcm1hdCcgPT4gJ0FCQlInLCAvLyBBQkJSID0gJWEsIEZVTEwg PSAlQSwgb3IgY3VzdG9tIHN0cmZ0aW1lIHN0cmluZw0KCQknbW9udGhmb3JtYXQnID0+ICdG VUxMJywgLy8gQUJCUiA9ICViLCBGVUxMID0gJUIsIG9yIGN1c3RvbSBzdHJmdGltZSBzdHJp bmcNCgkJJ2ZpcnN0ZGF5JyA9PiAwLCAvLyAxc3QgZGF5IG9mIHdlZWsgMD1TdW5kYXksIDY9 U2F0dXJkYXkgKGZvcmNlZCB0byBNb25kYXkgaWYgaXNvd2Vla3M9MSkNCgkJJ21haW50YWlu JyA9PiAnY2FsaWQnLCAvLyB3aGVuIG5hdmlnYXRpbmcsIGtlZXAgdGhlc2UgaXRlbXMgaW4g dGhlIFVSTA0KCQknZ210JyA9PiAwLA0KCQknbGFuZycgPT4gJycsDQoJCSdkZWJ1ZycgPT4g MCwNCgkpLCAkYXR0cykpOw0KDQoJJGZ1dHVyZSA9ICggJHRpbWUgIT0gJ3Bhc3QnICkgPyB0 cnVlIDogZmFsc2U7IC8vIERldGVybWluZSBoZWFkaW5nIHN0eWxlDQoJJHN0YXR1cyA9ICgk c3RhdHVzKSA/ICRzdGF0dXMgOiAnbGl2ZSc7IC8vIGluIGNhc2Ugc3RhdHVzIGhhcyBiZWVu IGVtcHRpZWQNCgkkZmlyc3RkYXkgPSAoJGlzb3dlZWtzID09ICcnKSA/ICRmaXJzdGRheSA6 IDE7DQoJJHNwYW5mb3JtID0gKCRzcGFuZm9ybSA9PSAnU01EX1NBTUUnKSA/ICRmb3JtIDog JHNwYW5mb3JtOw0KCSRyZWN1cmZvcm0gPSAoJHJlY3VyZm9ybSA9PSAnU01EX1NBTUUnKSA/ ICRmb3JtIDogJHJlY3VyZm9ybTsNCgkkY2VsbGZvcm0gPSAoZW1wdHkoJGNlbGxmb3JtKSkg PyAnJyA6IGZldGNoX2Zvcm0oJGNlbGxmb3JtKTsNCg0KCS8vIFNldCB1cCB0aGUgY2xhc3Mg cHJlZml4ZXMNCgkkY2xldnMgPSBkb19saXN0KCRjbGFzc2xldmVscyk7DQoJJGNscyA9IGRv X2xpc3QoJGNsYXNzcHJlZml4ZXMpOw0KCSRjbGFzc3ByZWZpeCA9ICRldmNsYXNzcHJlZml4 ID0gJGNsc1swXTsNCglpZiAoY291bnQoJGNscykgPiAxKXsNCgkJJGV2Y2xhc3NwcmVmaXgg PSAkY2xzWzFdOw0KCX0NCg0KCS8vIFNldCB1cCB0aGUgbmF2IGNsYXNzKGVzKQ0KCSRtYWlu dGFpbiA9IGRvX2xpc3QoJG1haW50YWluKTsNCgkkbmF2YXJyb3cgPSBkb19saXN0KCRuYXZh cnJvdyk7DQoJJG5hdnBhcnIgPSAkbmF2YXJyb3dbMF07DQoJJG5hdm5hcnIgPSAoY291bnQo JG5hdmFycm93KSA+IDEpID8gJG5hdmFycm93WzFdIDogJG5hdmFycm93WzBdOw0KCSRuYXZj bGFzcyA9IGRvX2xpc3QoJG5hdmNsYXNzKTsNCgkkbmF2cGNsYXNzID0gJG5hdmNsYXNzWzBd Ow0KCSRuYXZuY2xhc3MgPSAoY291bnQoJG5hdmNsYXNzKSA+IDEpID8gJG5hdmNsYXNzWzFd IDogJG5hdmNsYXNzWzBdOw0KDQoJLy8gRmlsdGVycw0KCSRmb3B0cyA9IGFycmF5KCk7DQoJ JGNhdFNRTCA9ICRzZWNTUUwgPSAkYXV0aFNRTCA9ICcnOw0KCWlmKCRjYXRlZ29yeSkgew0K CQkkZm9wdHNbJ2MnXSA9ICRjYXRlZ29yeTsNCgkJJGNhdFNRTCA9IGRvUXVvdGUoam9pbigi JywnIiwgZG9TbGFzaChkb19saXN0KCRjYXRlZ29yeSkpKSk7DQoJCSRjYXRTUUwgPSAiIEFO RCAoIENhdGVnb3J5MSBJTiAoIi4kY2F0U1FMLiIpIE9SIENhdGVnb3J5MiBJTiAoIi4kY2F0 U1FMLiIpICkgIjsNCgl9DQoJaWYoJHNlY3Rpb24pIHsNCgkJJGZvcHRzWydzJ10gPSAkc2Vj dGlvbjsNCgkJJHNlY1NRTCA9IGRvUXVvdGUoam9pbigiJywnIiwgZG9TbGFzaChkb19saXN0 KCRzZWN0aW9uKSkpKTsNCgkJJHNlY1NRTCA9ICIgQU5EIFNlY3Rpb24gSU4gKCIuJHNlY1NR TC4iKSAiOw0KCX0NCglpZigkYXV0aG9yKSB7DQoJCSRmb3B0c1snYXV0aG9yJ10gPSBodG1s ZW50aXRpZXMoZ3BzKCdhdXRob3InKSk7DQoJCSRhdXRoU1FMID0gZG9RdW90ZShqb2luKCIn LCciLCBkb1NsYXNoKGRvX2xpc3QoJGF1dGhvcikpKSk7DQoJCSRhdXRoU1FMID0gIiBBTkQg QXV0aG9ySUQgSU4gKCIuJGF1dGhTUUwuIikgIjsNCgl9DQoJJHN0YXR1cyA9IGRvX2xpc3Qo JHN0YXR1cyk7DQoJJHN0YXRpID0gYXJyYXkoKTsNCglmb3JlYWNoICgkc3RhdHVzIGFzICRz dGF0KSB7DQoJCWlmIChlbXB0eSgkc3RhdCkpIHsNCgkJCWNvbnRpbnVlOw0KCQl9IGVsc2Ug aWYgKGlzX251bWVyaWMoJHN0YXQpKSB7DQoJCQkkc3RhdGlbXSA9ICRzdGF0Ow0KCQl9IGVs c2Ugew0KCQkJJHN0YXRpW10gPSBnZXRTdGF0dXNOdW0oJHN0YXQpOw0KCQl9DQoJfQ0KCSRz dGF0aSA9ICIgU3RhdHVzIElOICgiLmRvUXVvdGUoam9pbignLCcsICRzdGF0aSkpLiIpIjsN Cg0KCSRleHBpcmVkID0gKCRleHBpcmVkKSA/ICRleHBpcmVkIDogJHByZWZzWydwdWJsaXNo X2V4cGlyZWRfYXJ0aWNsZXMnXTsNCgkkZXhwaXJlZCA9ICgoJGV4cGlyZWQpID8gJycgOiAn IEFORCAobm93KCkgPD0gRXhwaXJlcyBPUiBFeHBpcmVzID0gJy5OVUxMREFURVRJTUUuJykn KTsNCgkkZXZlbnRjbGFzc2VzID0gZG9fbGlzdCgkZXZlbnRjbGFzc2VzKTsNCgkkaG9saWRh eWZsYWdzID0gZG9fbGlzdCgkaG9saWRheWZsYWdzKTsNCgkkbGlua3Bvc3RlZCA9IGRvX2xp c3QoJGxpbmtwb3N0ZWQpOw0KDQoJLy8gV29yayBvdXQgdGhlIGZpcnN0IGFuZCBsYXN0IHBv c3RzIHRvIGRldGVybWluZSB0aGUgeWVhciByYW5nZQ0KCSRlYXJsaWVzdCA9IHNhZmVfcm93 KCd1bml4X3RpbWVzdGFtcChQb3N0ZWQpIEFTIHVQb3N0ZWQnLCAndGV4dHBhdHRlcm4nLCAk c3RhdGkuKCgkY2F0ZWdvcnkpID8gJGNhdFNRTCA6ICcnKS4oKCRzZWN0aW9uKSA/ICRzZWNT UUwgOiAnJykuKCgkYXV0aG9yKSA/ICRhdXRoU1FMIDogJycpLicgT1JERVIgQlkgUG9zdGVk IEFTQyBMSU1JVCAwLCAxJywgJGRlYnVnKTsNCgkkbGF0ZXN0ID0gc2FmZV9yb3coJ3VuaXhf dGltZXN0YW1wKExhc3RNb2QpIEFTIHVMYXN0TW9kJywgJ3RleHRwYXR0ZXJuJywgJHN0YXRp LigoJGNhdGVnb3J5KSA/ICRjYXRTUUwgOiAnJykuKCgkc2VjdGlvbikgPyAkc2VjU1FMIDog JycpLigoJGF1dGhvcikgPyAkYXV0aFNRTCA6ICcnKS4nIEFORCBQb3N0ZWQgPCBub3coKSBP UkRFUiBCWSBMYXN0TW9kIERFU0MgTElNSVQgMCwgMScsICRkZWJ1Zyk7DQoJJHllYXJ3aWR0 aCA9IGRvX2xpc3QoJHllYXJ3aWR0aCk7DQoJaWYgKGNvdW50KCR5ZWFyd2lkdGgpID09IDEp ICR5ZWFyd2lkdGhbMV0gPSAkeWVhcndpZHRoWzBdOw0KCSRlYXJsaWVzdCA9IGRhdGUoIlki LCBzdHJ0b3RpbWUoIi0iLiR5ZWFyd2lkdGhbMF0uIiB5ZWFyIiwgKCAoZW1wdHkoJGVhcmxp ZXN0KSkgPyB0aW1lKCkgOiAkZWFybGllc3RbJ3VQb3N0ZWQnXSkgKSApOw0KCSRsYXRlc3Qg PSBkYXRlKCJZIiwgc3RydG90aW1lKCIrIi4keWVhcndpZHRoWzFdLiIgeWVhciIsICggKGVt cHR5KCRsYXRlc3QpKSA/IHRpbWUoKSA6ICRsYXRlc3RbJ3VMYXN0TW9kJ10pICkgKTsNCg0K CS8vIENoZWNrIHRoZSBVUkwgZm9yIGN1cnJlbnQgZGF0ZSBhbmQgY2FsZW5kYXIgdGFyZ2V0 IGluZm8NCgkkaW5jb21pbmdfY2FsaWQgPSBncHMoJ2NhbGlkJyk7DQoJJGluY29taW5nX3ll YXIgPSAoZ3BzKCd5JykgYW5kIGlzX251bWVyaWMoZ3BzKCd5JykpKSA/IChpbnQpZ3BzKCd5 JykgOiAnJzsNCgkkaW5jb21pbmdfbW9udGggPSAoZ3BzKCdtJykgYW5kIGlzX251bWVyaWMo Z3BzKCdtJykpKSA/IChpbnQpZ3BzKCdtJykgOiAnJzsNCgkkaW5jb21pbmdfd2VlayA9IChn cHMoJ3cnKSBhbmQgaXNfbnVtZXJpYyhncHMoJ3cnKSkpID8gKGludClncHMoJ3cnKSA6ICcn Ow0KDQoJaWYoJHN0YXRpYykgeyAvLyBpZiB3ZSdyZSBzdGF0aWMgdy9vIGFueSBzdXBwbGll ZCB2YXJzLCB1c2UgdGhlIGN1cnJlbnQgZGF0ZQ0KCQlpZighJHllYXIpIHsgJHllYXIgPSBz YWZlX3N0cmZ0aW1lKCclWScpOyB9DQoJCWlmKCEkbW9udGgpIHsgJG1vbnRoID0gc2FmZV9z dHJmdGltZSgnJW0nKTsgfQ0KCX0gZWxzZSB7IC8vIG90aGVyd2lzZSB1c2UgY3VycmVudCBk YXRlIG9ubHkgaWYgdGhlcmUncyBub3RoaW5nIGVsc2UNCgkJaWYoICRpZCA9PSAkaW5jb21p bmdfY2FsaWQgKSB7IC8vIHVzZSBpbmNvbWluZw0KCQkJJHllYXIgPSAoJGluY29taW5nX3ll YXIpID8gJGluY29taW5nX3llYXIgOiAoKCR5ZWFyKSA/ICR5ZWFyIDogc2FmZV9zdHJmdGlt ZSgnJVknKSk7DQoJCQkkbW9udGggPSAoJGluY29taW5nX21vbnRoKSA/ICRpbmNvbWluZ19t b250aCA6ICgoJG1vbnRoKSA/ICRtb250aCA6IHNhZmVfc3RyZnRpbWUoJyVtJykpOw0KCQkJ Ly8gSWYgd2VlayBpcyB1c2VkLCBhZGp1c3QgbW9udGggc28gaXQgZW5jb21wYXNzZXMgdGhl IGdpdmVuIHdlZWsNCgkJCSR3ZWVrID0gJGluY29taW5nX3dlZWs7DQoJCQlpZiAoJHdlZWsp IHsNCgkJCQkkbW9udGggPSBzYWZlX3N0cmZ0aW1lKCIlbSIsIGdtbWt0aW1lICgxLDEsMSwx LDcqJHdlZWssJHllYXIpKTsgLy8gR3Vlc3MgdGhlIG1vbnRoIGZyb20gdGhlIHdlZWsNCgkJ CX0NCgkJfSBlbHNlIHsgLy8gdXNlIGN1cnJlbnQNCgkJCWlmKCEkeWVhcikgeyAkeWVhciA9 IHNhZmVfc3RyZnRpbWUoJyVZJyk7IH0NCgkJCWlmKCEkbW9udGgpIHsgJG1vbnRoID0gc2Fm ZV9zdHJmdGltZSgnJW0nKTsgfQ0KCQkJaWYoJHdlZWspIHsgJG1vbnRoID0gc2FmZV9zdHJm dGltZSgiJW0iLCBnbW1rdGltZSAoMSwxLDEsMSw3KiR3ZWVrLCR5ZWFyKSk7IH0NCgkJfQ0K CX0NCgkkc21kX2NhbF9pZCA9ICgkaW5jb21pbmdfY2FsaWQpID8gJGluY29taW5nX2NhbGlk IDogJGlkOw0KCSRzbWRfeWVhciA9ICR5ZWFyOyAkc21kX21vbnRoID0gJG1vbnRoOyAvLyAk c21kX3dlZWsgYW5kIHNtZF9kYXkgYXJlIHNldCBwZXIgZXZlbnQgbGF0ZXINCg0KCS8vIFRo ZSB0aW1lcyBpbiB0aGUgREIgYXJlIHN0b3JlZCB1c2luZyB0aGUgc2VydmVyJ3MgbG9jYWwg dGltZSwgc28gd2UgZG9uJ3QNCgkvLyB3YW50IHRvIGFkanVzdCBhbnl0aGluZyAoc2luY2Ug bWt0aW1lIHVzZXMgdGhlIHNlcnZlcidzIGxvY2FsIHRpbWUpLg0KCS8vVE9ETzogV29ycnkg YWJvdXQgZ210IC8gZHN0DQoJJHRzX2ZpcnN0ID0gbWt0aW1lKDAsIDAsIDAsICRtb250aCwg MSwgJHllYXIpOw0KCSR0c19sYXN0ID0gbWt0aW1lKDIzLCA1OSwgNTksICRtb250aCwgZGF0 ZSgndCcsJHRzX2ZpcnN0KSwgJHllYXIpOw0KDQoJJGV4dHJhc3FsID0gJGNhdFNRTCAuICRz ZWNTUUwgLiAkYXV0aFNRTDsNCglzd2l0Y2goJHRpbWUpIHsNCgkJY2FzZSAiYW55IiA6IGJy ZWFrOw0KCQljYXNlICJmdXR1cmUiIDogJGV4dHJhc3FsIC49ICIgQU5EIFBvc3RlZCA+IENV UkRBVEUoKSI7IGJyZWFrOw0KCQlkZWZhdWx0IDogJGV4dHJhc3FsIC49ICIgQU5EIFBvc3Rl ZCA8IENVUkRBVEUoKSI7IGJyZWFrOyAvLyBUaGUgcGFzdA0KCX0NCg0KCS8vIEhvbGlkYXlz IGFyZSBnbG9iYWwgJ2V4Y2x1c2lvbnMnLCBlaXRoZXIgZGVmaW5lZCBkaXJlY3RseSBvciBp biBhIDx0eHA6dmFyaWFibGUgLz4NCgkkaG9saWRheXMgPSBkb19saXN0KCRob2xpZGF5cyk7 DQoJJHR4cGhvbHMgPSBkb19saXN0KCRob2xpZGF5c1swXSwgIjoiKTsNCglpZiAoJHR4cGhv bHNbMF0gPT0gInR4cHZhciIpIHsNCgkJJGhvbGlkYXlzID0gZG9fbGlzdCgkdmFyaWFibGVb JHR4cGhvbHNbMV1dKTsNCgl9DQoJLy8gRm9yY2UgZWFjaCBob2xpZGF5IHRvIGEga25vd24g Zm9ybWF0LiBIb2xpZGF5cyB3aXRob3V0IHllYXJzIHVzZSBjdXJyZW50IHllYXINCglmb3Jl YWNoICgkaG9saWRheXMgYXMgJGtleSA9PiAkdmFsKSB7DQoJCWlmIChlbXB0eSgkdmFsKSkg Y29udGludWU7DQoJCSRudW1wYXJ0cyA9IHByZWdfbWF0Y2goJy9eKFtcZFx3XSspLj8oW1xk XHddKykuPyhbXGRcd10rKT8kLycsICR2YWwsICRwYXJ0cyk7DQoNCgkJaWYgKCRudW1wYXJ0 cykgew0KCQkJaWYgKGNvdW50KCRwYXJ0cykgPT0gMykgew0KCQkJCSRwYXJ0c1szXSA9ICR5 ZWFyOw0KICAgICAgICAgfQ0KCQkJJHZhbCA9IHN0cl9wYWQoJHBhcnRzWzFdLCAyLCAnMCcs IFNUUl9QQURfTEVGVCkuJy0nLnN0cl9wYWQoJHBhcnRzWzJdLCAyLCAnMCcsIFNUUl9QQURf TEVGVCkuJy0nLiRwYXJ0c1szXTsNCgkJfQ0KCQkkaG9saWRheXNbJGtleV0gPSBkYXRlKCJk LU0tWSIsIHN0cnRvdGltZSgkdmFsKSk7DQoJfQ0KDQoJaWYgKCRkZWJ1ZyA+IDAgJiYgIWVt cHR5KCRob2xpZGF5cykgJiYgJGhvbGlkYXlzWzBdICE9ICcnKSB7DQoJCWVjaG8gIisrIEhP TElEQVlTICsrICI7DQoJCWRtcCgkaG9saWRheXMpOw0KCX0NCg0KCS8vIEdldCBhbGwgbWF0 Y2hpbmcgYXJ0aWNsZXMgaW4gKGFuZCBiZWZvcmUpIHRoaXMgbW9udGgNCgkkZXZlbnRzID0g YXJyYXkoKTsNCgkkc3FsMiA9ICRzdGF0aSAuICIgSEFWSU5HIHVQb3N0ZWQgPD0gIi4kdHNf bGFzdCAuICRleHBpcmVkIC4gJGV4dHJhc3FsIC4iIE9SREVSIEJZIFBvc3RlZCBBU0MiOw0K CSRncmFiQ29scyA9ICcqLCB1bml4X3RpbWVzdGFtcChQb3N0ZWQpIGFzIHVQb3N0ZWQsIHVu aXhfdGltZXN0YW1wKExhc3RNb2QpIGFzIHVMYXN0TW9kLCB1bml4X3RpbWVzdGFtcChFeHBp cmVzKSBhcyB1RXhwaXJlcyc7DQoJJGV2bGlzdCA9IHNhZmVfcm93cygkZ3JhYkNvbHMsICd0 ZXh0cGF0dGVybicsICRzcWwyLCAkZGVidWcpOw0KCWFydGljbGVfcHVzaCgpOw0KDQoJLy8g SWYgYW55IGV2ZW50cyByZWN1ciBhbmQgZmFsbCB3aXRoaW4gdGhlIGN1cnJlbnQgbW9udGgs IGFkZCB0aG9zZSBhcyB3ZWxsDQoJLy8gSWYgYW55IGRhdGVzIGFyZSB0byBiZSBleGNsdWRl ZCwgdGhlIGVudHJ5IGlzIHNraXBwZWQgVU5MRVNTIHNob3dza2lwcGVkIGluZGljYXRlcyBv dGhlcndpc2UNCglmb3JlYWNoICgkZXZsaXN0IGFzICRyb3cpIHsNCgkJJGlkeCA9IDA7IC8v IEluIGNhc2UgdGhlIDFzdCBkYXkgb2YgdGhlIG1vbnRoIGlzIGEgY29udGludWF0aW9uIG9m IGFuIGV2ZW50IGZyb20gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbW9udGgNCgkJJHN0YXJ0 ID0gJHJvd1sndVBvc3RlZCddOw0KCQkkc3RhcnRfZGF0ZSA9IGRhdGUoIlktbS1kIiwgJHN0 YXJ0KTsgLy8gRm9yIHJlY3VycmluZy9zcGFubmVkIGV2ZW50cyBvbiBhIG1pbmljYWwsIHRo aXMgaXMgdGhlIGV2ZW50IHRoZSBjZWxsIGxpbmtzIHRvDQoJCSRyZWFsX2VuZCA9ICRyb3db J3VFeHBpcmVzJ107DQoJCSRlbmQgPSAoJHJlYWxfZW5kICE9IDAgJiYgJHJlYWxfZW5kIDwg JHRzX2xhc3QpID8gJHJlYWxfZW5kIDogJHRzX2xhc3Q7DQoJCSRzbWRfY2FsX2ZsYWcgPSAk c21kX2NhbF91Y2xzID0gYXJyYXkoKTsNCg0KCQlpZiAoJGRlYnVnID4gMSkgew0KCQkJZWNo byAnKysgRVZFTlQgU1RBUlQgLy8gRU5EIC8vIFJFQUwgRU5EICsrJzsNCgkJCWRtcCgkcm93 WydUaXRsZSddKTsNCgkJCWRtcChkYXRlKCdkLU0tWSBIOmk6cycsICRzdGFydCkgLicgLy8g Jy4gZGF0ZSgnZC1NLVkgSDppOnMnLCAkZW5kKSAuJyAvLyAnLiBkYXRlKCdkLU0tWSBIOmk6 cycsICRyZWFsX2VuZCkpOw0KCQkJaWYgKCRkZWJ1ZyA+IDIpIHsNCgkJCQlkbXAoJHJvdyk7 DQoJCQl9DQoJCX0NCg0KCQkkbXVsdGkgPSAoJHJvd1sndUV4cGlyZXMnXSA+ICRyb3dbJ3VQ b3N0ZWQnXSAmJiAkcm93Wyd1RXhwaXJlcyddID4gJHRzX2ZpcnN0KSA/IHRydWUgOiBmYWxz ZTsNCgkJJHJlY3VyID0gKGVtcHR5KCRyb3dbJHN0ZXBmaWVsZF0pKSA/IGZhbHNlIDogdHJ1 ZTsNCgkJJGhvbF9oaXQgPSBpbl9hcnJheShkYXRlKCJkLU0tWSIsICRzdGFydCksICRob2xp ZGF5cyk7DQoJCSRldmNsYXNzZXMgPSBhcnJheSgpOw0KCQlmb3JlYWNoICgkZXZlbnRjbGFz c2VzIGFzICRldmNscykgew0KCQkJc3dpdGNoICgkZXZjbHMpIHsNCgkJCQljYXNlICIiOg0K CQkJCQlicmVhazsNCgkJCQljYXNlICJnY2F0IjoNCgkJCQkJaWYgKGlzc2V0KCRwcmV0ZXh0 WydjJ10pICYmICFlbXB0eSgkcHJldGV4dFsnYyddKSkgew0KCQkJCQkJJGV2Y2xhc3Nlc1td ID0gJGV2Y2xhc3NwcmVmaXguJHByZXRleHRbJ2MnXTsNCgkJCQkJfQ0KCQkJCQlicmVhazsN CgkJCQljYXNlICJjYXRlZ29yeSI6DQoJCQkJCWlmIChpc3NldCgkcm93WydDYXRlZ29yeTEn XSkgJiYgIWVtcHR5KCRyb3dbJ0NhdGVnb3J5MSddKSkgew0KCQkJCQkJJGV2Y2xhc3Nlc1td ID0gJGV2Y2xhc3NwcmVmaXguJHJvd1snQ2F0ZWdvcnkxJ107DQoJCQkJCX0NCgkJCQkJaWYg KGlzc2V0KCRyb3dbJ0NhdGVnb3J5MiddKSAmJiAhZW1wdHkoJHJvd1snQ2F0ZWdvcnkyJ10p KSB7DQoJCQkJCQkkZXZjbGFzc2VzW10gPSAkZXZjbGFzc3ByZWZpeC4kcm93WydDYXRlZ29y eTInXTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICJzZWN0aW9uIjoNCgkJCQkJ aWYgKGlzc2V0KCRwcmV0ZXh0WydzJ10pICYmICFlbXB0eSgkcHJldGV4dFsncyddKSkgew0K CQkJCQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y2xhc3NwcmVmaXguJHByZXRleHRbJ3MnXTsNCgkJ CQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICJhdXRob3IiOg0KCQkJCQlpZiAoaXNzZXQo JHByZXRleHRbJ2F1dGhvciddKSAmJiAhZW1wdHkoJHByZXRleHRbJ2F1dGhvciddKSkgew0K CQkJCQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y2xhc3NwcmVmaXguJHByZXRleHRbJ2F1dGhvcidd Ow0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWRlZmF1bHQ6DQoJCQkJCWlmIChpc3NldCgk cm93WyRldmNsc10pICYmICFlbXB0eSgkcm93WyRldmNsc10pKSB7DQoJCQkJCQkkZXZjbGFz c2VzW10gPSAkZXZjbGFzc3ByZWZpeC4kcm93WyRldmNsc107DQoJCQkJCX0NCgkJCQkJYnJl YWs7DQoJCQl9DQoJCX0NCgkJJGV2Y2xhc3NlcyA9ICgkZXZjbGFzc2VzKSA/ICcgJy4gam9p bignICcsICRldmNsYXNzZXMpIDogJyc7DQoJCSRpZ25vcmUgPSAkY2ZsYWcgPSBhcnJheSgp Ow0KDQoJCWlmICgkZGVidWcgPiAxICYmICRldmNsYXNzZXMpIHsNCgkJCWVjaG8gJysrIEVW RU5UIENMQVNTRVMgKysnOw0KCQkJZG1wKCRldmNsYXNzZXMpOw0KCQl9DQoNCgkJLy8gRXZl bnRzIHRoYXQgc3RhcnQgdGhpcyBtb250aA0KCQlpZiAoJHN0YXJ0IDwgJGVuZCAmJiAkc3Rh cnQgPiAkdHNfZmlyc3QpIHsNCgkJCXBvcHVsYXRlQXJ0aWNsZURhdGEoJHJvdyk7DQoJCQkv LyBhIHN0YW5kYXJkIGV2ZW50IG9yIHN0YXJ0IG9mIGEgbXVsdGkNCgkJCWlmICgkc2hvd3Nw YW5uZWQgJiYgJG11bHRpICYmICEkcmVjdXIpIHsNCgkJCQkkc21kX2NhbF9mbGFnW10gPSAn bXVsdGlmaXJzdCc7DQoJCQl9DQoJCQlpZiAoJHJlY3VyKSB7DQoJCQkJJHNtZF9jYWxfZmxh Z1tdID0gJ3JlY3VyZmlyc3QnOw0KCQkJfQ0KCQkJaWYgKCEkc21kX2NhbF9mbGFnKSB7DQoJ CQkJJHNtZF9jYWxfZmxhZ1tdID0gJ3N0YW5kYXJkJzsNCgkJCX0NCgkJCWlmICggKCAkaG9s X2hpdCAmJiAhaW5fYXJyYXkoJ211bHRpJywkaG9saWRheWZsYWdzKSAmJiBpbl9hcnJheSgn bXVsdGlmaXJzdCcsJHNtZF9jYWxfZmxhZykgKSB8fCAoICRob2xfaGl0ICYmICFpbl9hcnJh eSgnc3RhbmRhcmQnLCRob2xpZGF5ZmxhZ3MpICYmIGluX2FycmF5KCdzdGFuZGFyZCcsJHNt ZF9jYWxfZmxhZykgKSApIHsNCgkJCQkkc21kX2NhbF9mbGFnW10gPSAnY2FuY2VsJzsNCgkJ CX0NCgkJCWZvcmVhY2ggKCRzbWRfY2FsX2ZsYWcgYXMgJGl0ZW0pIHsNCgkJCQkkY2ZsYWdb XSA9ICRjbGFzc3ByZWZpeC4kaXRlbTsNCgkJCX0NCg0KCQkJJGlkeCA9IChpbnQpc3RyZnRp bWUoJyVkJywgJHN0YXJ0KTsNCgkJCSRzbWRfZGF5ID0gJGlkeDsNCgkJCSRzbWRfd2VlayA9 IHN0cmZ0aW1lKCclVicsICRzdGFydCk7DQoJCQkkb3AgPSAoJHRoaW5nKSA/IHBhcnNlKCR0 aGluZykgOiAoKCRmb3JtKSA/IHBhcnNlX2Zvcm0oJGZvcm0pIDogKCgkc2l6ZT09InNtYWxs IikgPyAnJyA6IGhyZWYoJHJvd1snVGl0bGUnXSwgcGVybWxpbmt1cmwoJHJvdyksICcgdGl0 bGU9IicuJHJvd1snVGl0bGUnXS4nIicpKSApOw0KCQkJJGV2ZW50c1skaWR4XVtdID0gYXJy YXkoJ2V2JyA9PiAkb3AsICdmbGFnJyA9PiAkc21kX2NhbF9mbGFnLCAnY2xhc3NlcycgPT4g KCgkY2ZsYWcpID8gam9pbignICcsYXJyYXlfbWVyZ2UoJGNmbGFnLCAkc21kX2NhbF91Y2xz KSkgOiAnJykuJGV2Y2xhc3NlcywgJ3Bvc3RlZCcgPT4gJHN0YXJ0X2RhdGUpOw0KCQkJJHNt ZF9jYWxfZmxhZyA9ICRjZmxhZyA9ICRzbWRfY2FsX3VjbHMgPSBhcnJheSgpOw0KCQl9DQoN CgkJLy8gR2VuZXJhdGUgYSBza2lwIGFycmF5IGZvciB0aGlzIGV2ZW50DQoJCWlmICgkc2tp cGZpZWxkICYmICRyb3dbJHNraXBmaWVsZF0gIT0gJycpIHsNCgkJCSRpZ25vcmUgPSBkb19s aXN0KCRyb3dbJHNraXBmaWVsZF0pOw0KCQkJZm9yZWFjaCAoJGlnbm9yZSBhcyAka2V5ID0+ ICR2YWwpIHsNCgkJCQkkaWdub3JlWyRrZXldID0gZGF0ZSgiZC1NLVkiLCBzdHJ0b3RpbWUo JHZhbCkpOyAvLyBGb3JjZSBlYWNoIGRhdGUgdG8gYSBrbm93biBmb3JtYXQNCgkJCX0NCgkJ fQ0KCQlpZiAoJGRlYnVnID4gMSkgew0KCQkJZWNobyAnKysgSUdOT1JFIERBVEVTICsrJzsN CgkJCWRtcCgkaWdub3JlKTsNCgkJfQ0KCQkvLyBDYWxjdWxhdGUgdGhlIGRhdGUgb2Zmc2V0 cyBhbmQgY2hlY2sgcmVjdXJyaW5nIGV2ZW50cyB0aGF0IGZhbGwgd2l0aGluIHRoZSBtb250 aCBvZiBpbnRlcmVzdA0KCQlpZiAoJHN0ZXBmaWVsZCAmJiAkcm93WyRzdGVwZmllbGRdICE9 ICcnKSB7DQoJCQkkZnJlcSA9IGRvX2xpc3QoJHJvd1skc3RlcGZpZWxkXSk7DQoJCQlmb3Jl YWNoICgkZnJlcSBhcyAkaW50ZXJ2YWwpIHsNCgkJCQkkbWF4X2xvb3AgPSA5OTk5OTsgLy8g WXVrLCBidXQgcHJhY3RpY2FsbHkgbGltaXRsZXNzDQoJCQkJJGludGVydmFsID0gc3RyX3Jl cGxhY2UoIj9tb250aCIsIGRhdGUoJ0YnLCBnbW1rdGltZSgwLDAsMCwkbW9udGgsMSkpLCAk aW50ZXJ2YWwpOw0KCQkJCSRpbnRlcnZhbCA9IHN0cl9yZXBsYWNlKCI/eWVhciIsICR5ZWFy LCAkaW50ZXJ2YWwpOw0KCQkJCWlmIChzdHJwb3MoJGludGVydmFsLCAibGFzdCIpID09PSAw KSB7DQoJCQkJCSRpbnRlcnZhbCA9IGRhdGUoImwsIEYgalMgWSIsIHN0cnRvdGltZSgkaW50 ZXJ2YWwsIG1rdGltZSgxMiwgMCwgMCwgZGF0ZSgibiIsbWt0aW1lKDAsMCwwLCRtb250aCwx LCR5ZWFyKSkrMSwgMSwgJHllYXIpKSk7DQoJCQkJCSRtYXhfbG9vcCA9IDE7DQoJCQkJfSBl bHNlIGlmIChzdHJwb3MoJGludGVydmFsLCAiZmlyc3QiKSA9PT0gMCkgew0KCQkJCQkkaW50 ZXJ2YWwgPSBkYXRlKCJsLCBGIGpTIFkiLCBzdHJ0b3RpbWUoJGludGVydmFsLCBta3RpbWUo MTIsIDAsIDAsICgoJG1vbnRoPjEpID8gJG1vbnRoLTEgOiAxMiksIGRhdGUoInQiLG1rdGlt ZSgwLDAsMCwkbW9udGgtMSwxLCgoJG1vbnRoPT0xKSA/ICR5ZWFyLTE6ICR5ZWFyKSkpLCAo KCRtb250aD09MSkgPyAkeWVhci0xOiAkeWVhcikpKSk7DQoJCQkJCSRtYXhfbG9vcCA9IDE7 DQoJCQkJfQ0KCQkJCSR0c19sb29wID0gMDsNCgkJCQkkdHNfY3VyciA9ICRzdGFydDsNCgkJ CQl3aGlsZSAoJHRzX2N1cnIgPCAkZW5kICYmICR0c19sb29wIDwgJG1heF9sb29wKSB7DQoJ CQkJCWlmICgkbWF4X2xvb3AgPT0gMSkgew0KCQkJCQkJJHRzX2N1cnIgPSBzdHJ0b3RpbWUo JGludGVydmFsKTsNCgkJCQkJCSR0c19jdXJyID0gKCR0c19jdXJyIDwgJHN0YXJ0IHx8ICR0 c19jdXJyID4gJGVuZCkgPyAkc3RhcnQgOiAkdHNfY3VycjsNCgkJCQkJfSBlbHNlIHsNCgkJ CQkJCSR0c19jdXJyID0gc3RydG90aW1lKCRpbnRlcnZhbCwgJHRzX2N1cnIpOw0KCQkJCQl9 DQoJCQkJCWlmICgkdHNfY3VyciA9PT0gZmFsc2UpIHsNCgkJCQkJCSR0c19sb29wKys7DQoJ CQkJCQlicmVhazsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCWlmICgkZGVidWcgPiAxKSB7DQoJ CQkJCQkJZG1wKCJJTlRFUlZBTDogIi4gZGF0ZSgnZC1NLVkgSDppOnMnLCAkdHNfY3Vycikp Ow0KCQkJCQkJfQ0KCQkJCQkJaWYgKCR0c19jdXJyIDwgJGVuZCAmJiAkdHNfY3VyciA+PSAk dHNfZmlyc3QgJiYgJHRzX2N1cnIgIT0gJHN0YXJ0KSB7DQoJCQkJCQkJLy8gQSByZWN1cnJp bmcgZXZlbnQuIENoZWNrIGl0IGlzbid0IGEgaG9saWRheSBvciB0byBiZSBpZ25vcmVkDQoJ CQkJCQkJcG9wdWxhdGVBcnRpY2xlRGF0YSgkcm93KTsNCgkJCQkJCQkkb3AgPSAnJzsNCgkJ CQkJCQkkaWR4ID0gKGludClzdHJmdGltZSgnJWQnLCAkdHNfY3Vycik7DQoJCQkJCQkJJHNt ZF9jYWxfZmxhZ1tdID0gJ3JlY3VyJzsNCgkJCQkJCQkkc2hvd19tZSA9ICFpbl9hcnJheShk YXRlKCJkLU0tWSIsICR0c19jdXJyKSwgJGlnbm9yZSk7DQoJCQkJCQkJJGhvbF9oaXQgPSBp bl9hcnJheShkYXRlKCJkLU0tWSIsICR0c19jdXJyKSwgJGhvbGlkYXlzKTsNCgkJCQkJCQkk c2hvd19ob2wgPSAoJGhvbF9oaXQgJiYgIWluX2FycmF5KCdyZWN1cicsJGhvbGlkYXlmbGFn cykgKSA/IGZhbHNlIDogdHJ1ZTsNCgkJCQkJCQlpZiAoICEkc2hvd19tZSB8fCAhJHNob3df aG9sICkgew0KCQkJCQkJCQkkc21kX2NhbF9mbGFnW10gPSAnY2FuY2VsJzsNCgkJCQkJCQl9 DQoJCQkJCQkJZm9yZWFjaCAoJHNtZF9jYWxfZmxhZyBhcyAkaXRlbSkgew0KCQkJCQkJCQkk Y2ZsYWdbXSA9ICRjbGFzc3ByZWZpeC4kaXRlbTsNCgkJCQkJCQl9DQoNCgkJCQkJCQkvLyBD cmVhdGUgdGhlIGV2ZW50cyB0aGF0IGFwcGVhciBpbiB0aGUgY2VsbCBidXQgb25seSBpZiB0 aGV5J3ZlIG5vdCBhcHBlYXJlZCBiZWZvcmUsIG9yIGFyZSB0byBiZSBpZ25vcmVkDQoJCQkJ CQkJaWYgKCgkc2hvd19tZSAmJiAkc2hvd19ob2wpIHx8ICRzaG93c2tpcHBlZCkgew0KCQkJ CQkJCQkkc21kX2RheSA9ICRpZHg7DQoJCQkJCQkJCSRzbWRfd2VlayA9IHN0cmZ0aW1lKCcl VicsICR0c19jdXJyKTsNCgkJCQkJCQkJJG9wID0gKCRyZWN1cmZvcm0pID8gcGFyc2VfZm9y bSgkcmVjdXJmb3JtKSA6ICgoJHRoaW5nKSA/IHBhcnNlKCR0aGluZykgOiAoKCRzaXplPT0i c21hbGwiKSA/ICcnIDogaHJlZigkcm93WydUaXRsZSddLCBwZXJtbGlua3VybCgkcm93KSwg JyB0aXRsZT0iJy4kcm93WydUaXRsZSddLiciJykpICk7DQoJCQkJCQkJfQ0KCQkJCQkJCSR1 c2VkID0gYXJyYXkoKTsNCgkJCQkJCQlpZiAoaXNzZXQoJGV2ZW50c1skaWR4XSkgJiYgJGV2 ZW50c1skaWR4XSAhPSBOVUxMKSB7DQoJCQkJCQkJCWZvcmVhY2ggKCRldmVudHNbJGlkeF0g YXMgJGV2KSB7DQoJCQkJCQkJCQkkdXNlZFtdID0gJGV2WydldiddOw0KCQkJCQkJCQl9DQoJ CQkJCQkJfQ0KCQkJCQkJCWlmIChpc3NldCgkZXZlbnRzWyRpZHhdKSAmJiAkZXZlbnRzWyRp ZHhdID09IE5VTEwgfHwgIWluX2FycmF5KCRvcCwgJHVzZWQpKSB7DQoJCQkJCQkJCSRldmVu dHNbJGlkeF1bXSA9IGFycmF5KCdldicgPT4gJG9wLCAnZmxhZycgPT4gJHNtZF9jYWxfZmxh ZywgJ2NsYXNzZXMnID0+ICgoJGNmbGFnKSA/IGpvaW4oJyAnLGFycmF5X21lcmdlKCRjZmxh ZywgJHNtZF9jYWxfdWNscykpIDogJycpLiRldmNsYXNzZXMsICdwb3N0ZWQnID0+ICRzdGFy dF9kYXRlKTsNCgkJCQkJCQl9DQoJCQkJCQkJJHNtZF9jYWxfZmxhZyA9ICRjZmxhZyA9ICRz bWRfY2FsX3VjbHMgPSBhcnJheSgpOw0KCQkJCQkJfQ0KCQkJCQkJJHRzX2xvb3ArKzsNCgkJ CQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSBlbHNlIGlmICgkc2hvd3NwYW5uZWQgJiYgJG11bHRp KSB7DQoJCQkvLyBOb24tcmVjdXJyaW5nIGV2ZW50cyBtYXkgc3BhbiBtb3JlIHRoYW4gb25l IGRhdGUgYnV0IHRoZXkgbXVzdCBzdGlsbCByZXNwZWN0IGlnbm9yZWQgZGF0ZXMgYW5kIGhv bGlkYXlzDQoJCQlwb3B1bGF0ZUFydGljbGVEYXRhKCRyb3cpOw0KCQkJJGxhc3RkYXkgPSAo aW50KXN0cmZ0aW1lKCclZCcsICRlbmQpOw0KCQkJJHJlYWxfbGFzdGRheSA9IChpbnQpc3Ry ZnRpbWUoJyVkJywgJHJlYWxfZW5kKTsNCgkJCXdoaWxlICgrKyRpZHggPD0gJGxhc3RkYXkp IHsNCgkJCQkkb3AgPSAnJzsNCgkJCQkkbXVsdGlmbGFnID0gKCRpZHg9PSRyZWFsX2xhc3Rk YXkpID8gJ211bHRpbGFzdCcgOiAoKCRpZHg9PTEpID8gJ211bHRpcHJldicgOiAnbXVsdGkn KTsNCgkJCQkkc21kX2NhbF9mbGFnW10gPSAkbXVsdGlmbGFnOw0KCQkJCSR0aGlzZGF0ZSA9 IGdtbWt0aW1lKDAsIDAsIDAsICRtb250aCwgJGlkeCwgJHllYXIpOw0KCQkJCSRzaG93X21l ID0gIWluX2FycmF5KGRhdGUoImQtTS1ZIiwgJHRoaXNkYXRlKSwgJGlnbm9yZSk7DQoJCQkJ JGhvbF9oaXQgPSBpbl9hcnJheShkYXRlKCJkLU0tWSIsICR0aGlzZGF0ZSksICRob2xpZGF5 cyk7DQoJCQkJJHNob3dfaG9sID0gKCRob2xfaGl0ICYmICFpbl9hcnJheSgnbXVsdGknLCRo b2xpZGF5ZmxhZ3MpICkgPyBmYWxzZSA6IHRydWU7DQoJCQkJaWYgKCAhJHNob3dfbWUgfHwg ISRzaG93X2hvbCApIHsNCgkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ2NhbmNlbCc7DQoJCQkJ fQ0KCQkJCWZvcmVhY2ggKCRzbWRfY2FsX2ZsYWcgYXMgJGl0ZW0pIHsNCgkJCQkJJGNmbGFn W10gPSAkY2xhc3NwcmVmaXguJGl0ZW07DQoJCQkJfQ0KCQkJCS8vIENyZWF0ZSB0aGUgc3Bh bm5lZCBldmVudCB0aGF0IGFwcGVhcnMgaW4gdGhlIGNlbGwNCgkJCQlpZiAoICgkc2hvd19t ZSAmJiAkc2hvd19ob2wpIHx8ICRzaG93c2tpcHBlZCkgew0KCQkJCQkkc21kX2RheSA9ICRp ZHg7DQoJCQkJCSRzbWRfd2VlayA9IHN0cmZ0aW1lKCclVicsICR0aGlzZGF0ZSk7DQoJCQkJ CSRvcCA9ICgkc3BhbmZvcm0pID8gcGFyc2VfZm9ybSgkc3BhbmZvcm0pIDogKCgkdGhpbmcp ID8gcGFyc2UoJHRoaW5nKSA6ICgoJHNpemU9PSJzbWFsbCIpID8gJycgOiBocmVmKCcmcmFy cjsnLCBwZXJtbGlua3VybCgkcm93KSwgJyB0aXRsZT0iJy4kcm93WydUaXRsZSddLiciJykp ICk7DQoJCQkJfQ0KCQkJCSRldmVudHNbJGlkeF1bXSA9IGFycmF5KCdldicgPT4gJG9wLCAn ZmxhZycgPT4gJHNtZF9jYWxfZmxhZywgJ2NsYXNzZXMnID0+ICgoJGNmbGFnKSA/IGpvaW4o JyAnLGFycmF5X21lcmdlKCRjZmxhZywgJHNtZF9jYWxfdWNscykpIDogJycpLiRldmNsYXNz ZXMsICdwb3N0ZWQnID0+ICRzdGFydF9kYXRlKTsNCgkJCQkkc21kX2NhbF9mbGFnID0gJGNm bGFnID0gJHNtZF9jYWxfdWNscyA9IGFycmF5KCk7DQoJCQl9DQoJCX0NCgl9DQoJYXJ0aWNs ZV9wb3AoKTsNCg0KCS8vIEdlbmVyYXRlIHRoZSBjYWxlbmRhcg0KCWlmKCAkc2l6ZSA9PSAi c21hbGwiICkgew0KCQkkY2FsZW5kYXIgPSBuZXcgU01EX1NtYWxsX0NhbGVuZGFyKCR5ZWFy LCAkbW9udGgsICRldmVudHMsICRzZWN0aW9uLCAkY2F0ZWdvcnkpOw0KCX0gZWxzZSB7DQoJ CSRjYWxlbmRhciA9IG5ldyBTTURfQ2FsZW5kYXIoJHllYXIsICRtb250aCwgJGV2ZW50cyk7 DQoJfQ0KCSRjYWxlbmRhci0+c2V0V2Vlaygkd2Vlayk7DQoJJGNhbGVuZGFyLT5zZXRHTVQo JGdtdCk7DQoJJGNhbGVuZGFyLT5zZXRMYW5nKCRsYW5nKTsNCgkkY2FsZW5kYXItPnNldENs YXNzTGV2ZWxzKCRjbGV2cyk7DQoJJGNhbGVuZGFyLT5zZXRDbGFzc1ByZWZpeCgkY2xhc3Nw cmVmaXgpOw0KCSRjYWxlbmRhci0+c2V0RXZlbnRQcmVmaXgoJGV2Y2xhc3NwcmVmaXgpOw0K CSRjYWxlbmRhci0+c2V0RXZlbnRXcmFwdGFnKCRldmVudHdyYXB0YWcpOw0KCSRjYWxlbmRh ci0+c2V0Q2VsbEZvcm0oJGNlbGxmb3JtKTsNCgkkY2FsZW5kYXItPnNldE1ZV3JhcHRhZygk bXl3cmFwdGFnKTsNCgkkY2FsZW5kYXItPnNldFRhYmxlSUQoJGlkKTsNCgkkY2FsZW5kYXIt PnNldFRhYmxlQ2xhc3MoJGNsYXNzKTsNCgkkY2FsZW5kYXItPnNldFJvd0NsYXNzKCRyb3dj bGFzcyk7DQoJJGNhbGVuZGFyLT5zZXRDZWxsQ2xhc3MoJGNlbGxjbGFzcyk7DQoJJGNhbGVu ZGFyLT5zZXRFbXB0eUNsYXNzKCRlbXB0eWNsYXNzKTsNCgkkY2FsZW5kYXItPnNldElTT1dl ZWtDbGFzcygkaXNvd2Vla2NsYXNzKTsNCgkkY2FsZW5kYXItPnNldE5hdkluZm8oJG5hdnBj bGFzcywkbmF2bmNsYXNzLCRuYXZwYXJyLCRuYXZuYXJyLCRuYXZpZCk7DQoJJGNhbGVuZGFy LT5zZXROYXZLZWVwKCRtYWludGFpbik7DQoJJGNhbGVuZGFyLT5zZXRNWUNsYXNzKCRteWNs YXNzKTsNCgkkY2FsZW5kYXItPnNldE5hbWVGb3JtYXQoJGRheWZvcm1hdCwgImQiKTsNCgkk Y2FsZW5kYXItPnNldE5hbWVGb3JtYXQoJG1vbnRoZm9ybWF0LCAibSIpOw0KCSRjYWxlbmRh ci0+c2V0U2hvd0lTT1dlZWsoJGlzb3dlZWtzKTsNCgkkY2FsZW5kYXItPnNldEVZZWFyKCRl YXJsaWVzdCk7DQoJJGNhbGVuZGFyLT5zZXRMWWVhcigkbGF0ZXN0KTsNCgkkY2FsZW5kYXIt PnNldEZpbHRlck9wdHMoJGZvcHRzKTsNCgkkY2FsZW5kYXItPnNldEhvbGlkYXlzKCRob2xp ZGF5cyk7DQoJJGNhbGVuZGFyLT5zZXRTZWxlY3RvcnMoZG9fbGlzdCgkc2VsZWN0KSwgJHNl bGVjdGJ0bik7DQoJJGNhbGVuZGFyLT5zZXRGaXJzdERheU9mV2VlaygkZmlyc3RkYXkpOw0K CSRjYWxlbmRhci0+c2V0TGlua1Bvc3RlZCgkbGlua3Bvc3RlZCk7DQoNCglyZXR1cm4gJGNh bGVuZGFyLT5kaXNwbGF5KCRzdGF0aWMsICRmdXR1cmUpOw0KfQ0KDQpjbGFzcyBTTURfQ2Fs ZW5kYXIgZXh0ZW5kcyBTTURfUmF3X0NhbGVuZGFyIHsNCgkvLyBPdmVycmlkZSBDb25zdHJ1 Y3Rvcg0KCS8vIFBlcm1pdHMgbXVsdGlwbGUgZXZlbnRzIHRvIHNob3cgcGVyIGRheQ0KCWZ1 bmN0aW9uIFNNRF9DYWxlbmRhcigkeWVhciwkbW9udGgsJGV2ZW50cykgew0KCQkkdGhpcy0+ ZXZlbnRzID0gJGV2ZW50czsNCgkJJHRoaXMtPlNNRF9SYXdfQ2FsZW5kYXIoJHllYXIsJG1v bnRoKTsNCgl9DQoNCgkvLyBPdmVycmlkZSBkc3BEYXlDZWxsIHRvIGRpc3BsYXkgc3R1ZmYg cmlnaHQNCglmdW5jdGlvbiBkc3BEYXlDZWxsKCR0aGVkYXkpIHsNCgkJZ2xvYmFsICRzbWRf Y2FsX2ZsYWcsICRzbWRfY2FsX2lkLCAkc21kX2NhbF91Y2xzLCAkc21kX3llYXIsICRzbWRf bW9udGgsICRzbWRfd2VlaywgJHNtZF9kYXk7DQoNCgkJJHNtZF9jYWxfZmxhZyA9ICRzbWRf Y2FsX3VjbHMgPSBhcnJheSgpOw0KCQkkaGFzYXJ0aWNsZSA9IGlzc2V0KCR0aGlzLT5ldmVu dHNbJHRoZWRheV0pOw0KCQkkdGhlZGF0ZSA9IGdtbWt0aW1lKDAsIDAsIDAsICR0aGlzLT5t b250aCwgJHRoZWRheSwgJHRoaXMtPnllYXIpOw0KCQkkaG9sX2hpdCA9IGluX2FycmF5KGRh dGUoImQtTS1ZIiwgJHRoZWRhdGUpLCAkdGhpcy0+aG9saWRheXMpOw0KCQlpZiAoJGhhc2Fy dGljbGUpIHsNCgkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdldmVudCc7DQoJCX0NCgkJaWYgKCRo b2xfaGl0KSB7DQoJCQkkc21kX2NhbF9mbGFnW10gPSAnaG9scyc7DQoJCX0NCgkJJGNmbGFn ID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAoJHNtZF9jYWxfZmxhZyBhcyAkaXRlbSkgew0KCQkJ JGNmbGFnW10gPSAkdGhpcy0+Y2xhc3NwcmVmaXguJGl0ZW07DQoJCX0NCgkJJHRkY2xhc3Mg PSAkdGhpcy0+Y2VsbGNsYXNzIC4gKCgkY2ZsYWcpID8gJyAnLmpvaW4oJyAnLCAkY2ZsYWcp IDogJycpOw0KCQkkcnVubmluZ2NsYXNzID0gKGluX2FycmF5KCJjZWxsIiwgJHRoaXMtPmNs YXNzbGV2ZWxzKSB8fCBpbl9hcnJheSgiY2VsbHBsdXMiLCAkdGhpcy0+Y2xhc3NsZXZlbHMp KSA/IGV4cGxvZGUoJyAnLCAkdGRjbGFzcykgOiBhcnJheSgpOw0KCQlpZigkdGhpcy0+eWVh ciA9PSBkYXRlKCdZJyx0aW1lKCkrdHpfb2Zmc2V0KCkgKSBhbmQgJHRoaXMtPm1vbnRoID09 IGRhdGUoJ24nLHRpbWUoKSt0el9vZmZzZXQoKSApIGFuZCAkdGhlZGF5ID09IGRhdGUoJ2on LHRpbWUoKSt0el9vZmZzZXQoKSkgKSB7DQoJCQkkc21kX2NhbF9mbGFnW10gPSAndG9kYXkn Ow0KCQkJJHJ1bm5pbmdjbGFzc1tdID0gJHRoaXMtPmNsYXNzcHJlZml4Lid0b2RheSc7DQoJ CX0NCg0KCQkkb3V0ID0gJGZsYWdzID0gYXJyYXkoKTsNCgkJaWYgKGVtcHR5KCR0aGlzLT5j ZWxsZm9ybSkpIHsNCgkJCSRvdXRbXSA9IGhlZCgkdGhlZGF5LDQpOw0KCQl9DQoJCWlmKCBp c3NldCgkdGhpcy0+ZXZlbnRzWyR0aGVkYXldKSApIHsNCgkJCSRkYXlzX2V2ZW50cyA9ICR0 aGlzLT5ldmVudHNbJHRoZWRheV07DQoJCQlmb3JlYWNoKCRkYXlzX2V2ZW50cyBhcyAkZXYp IHsNCgkJCQkkZXZjbGFzcyA9IHRyaW0oJGV2WydjbGFzc2VzJ10pOw0KCQkJCSRmbGFncyA9 IGFycmF5X21lcmdlKCRmbGFncywgJGV2WydmbGFnJ10pOw0KCQkJCWlmIChpbl9hcnJheSgi Y2VsbHBsdXMiLCAkdGhpcy0+Y2xhc3NsZXZlbHMpKSB7DQoJCQkJCWZvcmVhY2ggKGV4cGxv ZGUoJyAnLCAkZXZjbGFzcykgYXMgJGV2Yykgew0KCQkJCQkJJHJ1bm5pbmdjbGFzc1tdPSAk ZXZjOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCSRvdXRbXSA9ICgkdGhpcy0+ZXZ3cmFwdGFnKSA/ IHRhZygkZXZbJ2V2J10sICR0aGlzLT5ldndyYXB0YWcsICgoJGV2Y2xhc3MgJiYgaW5fYXJy YXkoImV2ZW50IiwgJHRoaXMtPmNsYXNzbGV2ZWxzKSkgPyAnIGNsYXNzPSInLiRldmNsYXNz LiciJyA6ICcnKSkgOiAkZXZbJ2V2J107DQoJCQl9DQoJCX0NCgkJJHJ1bm5pbmdjbGFzcyA9 IGFycmF5X3VuaXF1ZSgkcnVubmluZ2NsYXNzKTsNCgkJaWYgKGluX2FycmF5KCJjZWxscGx1 cyIsICR0aGlzLT5jbGFzc2xldmVscykpIHsNCgkJCSRzbWRfY2FsX2ZsYWcgPSBhcnJheV9t ZXJnZSgkc21kX2NhbF9mbGFnLCAkZmxhZ3MpOw0KCQl9DQoNCgkJaWYgKCR0aGlzLT5jZWxs Zm9ybSkgew0KCQkJJHRoaXNkYXRlID0gZ21ta3RpbWUoMCwgMCwgMCwgJHRoaXMtPm1vbnRo LCAkdGhlZGF5LCAkdGhpcy0+eWVhcik7DQoJCQkkc21kX2NhbF9pZCA9ICR0aGlzLT50YWJs ZUlEOw0KCQkJJHNtZF95ZWFyID0gJHRoaXMtPnllYXI7DQoJCQkkc21kX21vbnRoID0gJHRo aXMtPm1vbnRoOw0KCQkJJHNtZF93ZWVrID0gc3RyZnRpbWUoIiVWIiwgJHRoaXNkYXRlKTsN CgkJCSRzbWRfZGF5ID0gJHRoZWRheTsNCgkJCSRyZXBzID0gYXJyYXkoDQoJCQkJJ3tldmVu dHN9JyA9PiBqb2luKCcnLCRvdXQpLA0KCQkJCSd7ZGF5fScgPT4gJHRoZWRheSwNCgkJCQkn e3dlZWtkYXl9JyA9PiAoKGlzX2FycmF5KCR0aGlzLT5kYXlOYW1lRm10KSkgPyAkdGhpcy0+ ZGF5TmFtZXNbZGF0ZSgndycsJHRoaXNkYXRlKV0gOiBzdHJmdGltZSgkdGhpcy0+ZGF5TmFt ZUZtdCwgJHRoaXNkYXRlKSksDQoJCQkJJ3t3ZWVrfScgPT4gJHNtZF93ZWVrLA0KCQkJCSd7 bW9udGh9JyA9PiAkdGhpcy0+bW9udGgsDQoJCQkJJ3ttb250aG5hbWV9JyA9PiBzdHJmdGlt ZSgkdGhpcy0+bXRoTmFtZUZtdCwgJHRoaXNkYXRlKSwNCgkJCQkne3llYXJ9JyA9PiAkdGhp cy0+eWVhciwNCgkJCQkne3Nob3J0eWVhcn0nID0+IHN0cmZ0aW1lKCIlZyIsICR0aGlzZGF0 ZSksDQoJCQkpOw0KCQkJJGNlbGxvdXQgPSBwYXJzZShzdHJ0cigkdGhpcy0+Y2VsbGZvcm0s ICRyZXBzKSk7DQoJCQkkY2FycmF5ID0gYXJyYXlfbWVyZ2UoJHJ1bm5pbmdjbGFzcywgJHNt ZF9jYWxfdWNscyk7DQoJCQkkc21kX2NhbF91Y2xzID0gYXJyYXkoKTsNCg0KCQkJcmV0dXJu IGRvVGFnKCRjZWxsb3V0LCd0ZCcsam9pbignICcsJGNhcnJheSkpOw0KCQl9IGVsc2Ugew0K CQkJLy8gQW1hbGdhbWF0ZSB0aGUgZXZlbnQtbGV2ZWwgY2xhc3NlcyBhbmQgY2VsbC1sZXZl bCBjbGFzc2VzLCBpZiByZXF1aXJlZA0KCQkJcmV0dXJuIGRvVGFnKGpvaW4oJycsJG91dCks J3RkJyxqb2luKCcgJywkcnVubmluZ2NsYXNzKSk7DQoJCX0NCgl9DQoNCglmdW5jdGlvbiBk aXNwbGF5KCRzdGF0aWM9ZmFsc2UsICRmdXR1cmU9ZmFsc2UpIHsNCgkJJGlkID0gKCR0aGlz LT50YWJsZUlEKSA/ICcgaWQ9IicuJHRoaXMtPnRhYmxlSUQuJyInIDogJyc7DQoJCSRjW10g PSAkdGhpcy0+ZHNwSGVhZGVyKCRzdGF0aWMsICRmdXR1cmUpOw0KCQkkY1tdID0gJHRoaXMt PmRzcERheU5hbWVzKCk7DQoJCSRjW10gPSAkdGhpcy0+ZHNwRGF5Q2VsbHMoKTsNCg0KCQly ZXR1cm4gZG9UYWcoam9pbignJywkYyksJ3RhYmxlJywkdGhpcy0+dGFibGVjbGFzcywkaWQp Ow0KCX0NCg0KCWZ1bmN0aW9uIGRzcEhlYWRlcigkc3RhdGljLCAkZnV0dXJlKSB7DQoJCWds b2JhbCAkcHJldGV4dCwgJHNtZF93ZWVrOw0KDQoJCSRjdXJybW8gPSAkdGhpcy0+bW9udGg7 DQoJCSRjdXJyeXIgPSAkdGhpcy0+eWVhcjsNCgkJJG5hdnBjbGFzcyA9ICR0aGlzLT5nZXRO YXZJbmZvKCJwYyIpOw0KCQkkbmF2bmNsYXNzID0gJHRoaXMtPmdldE5hdkluZm8oIm5jIik7 DQoJCSRuYXZwYXJyb3cgPSAkdGhpcy0+Z2V0TmF2SW5mbygicGEiKTsNCgkJJG5hdm5hcnJv dyA9ICR0aGlzLT5nZXROYXZJbmZvKCJuYSIpOw0KCQkkbmF2aWQgPSAkdGhpcy0+Z2V0TmF2 SW5mbygiaWQiKTsNCgkJJG5hdnBjbGFzcyA9ICgkbmF2cGNsYXNzKSA/ICcgY2xhc3M9Iicu JG5hdnBjbGFzcy4nIicgOiAnJzsNCgkJJG5hdm5jbGFzcyA9ICgkbmF2bmNsYXNzKSA/ICcg Y2xhc3M9IicuJG5hdm5jbGFzcy4nIicgOiAnJzsNCgkJJGZvcHRzID0gJHRoaXMtPmZvcHRz Ow0KCQlmb3JlYWNoICgkdGhpcy0+bWFpbnRhaW4gYXMgJGNvbCkgew0KCQkJc3dpdGNoICgk Y29sKSB7DQoJCQkJY2FzZSAic2VjdGlvbiI6DQoJCQkJCWlmICgkcHJldGV4dFsncyddKSB7 DQoJCQkJCQkkZm9wdHMgPSBhcnJheSgncycgPT4gJHByZXRleHRbJ3MnXSkgKyAkZm9wdHM7 DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiYXJ0aWNsZSI6DQoJCQkJCWlmICgk cHJldGV4dFsnaWQnXSkgew0KCQkJCQkJJGZvcHRzID0gYXJyYXkoJ2lkJyA9PiAkcHJldGV4 dFsnaWQnXSkgKyAkZm9wdHM7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiY2F0 ZWdvcnkiOg0KCQkJCQlpZiAoJHByZXRleHRbJ2MnXSkgew0KCQkJCQkJJGZvcHRzID0gYXJy YXkoJ2MnID0+ICRwcmV0ZXh0WydjJ10pICsgJGZvcHRzOw0KCQkJCQl9DQoJCQkJCWJyZWFr Ow0KCQkJCWNhc2UgImF1dGhvciI6DQoJCQkJCWlmIChncHMoJ2F1dGhvcicpKSB7DQoJCQkJ CQkkZm9wdHMgPSBhcnJheSgnYXV0aG9yJyA9PiBncHMoJ2F1dGhvcicpKSArICRmb3B0czsN CgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICJwZyI6DQoJCQkJCWlmICgkcHJldGV4 dFsncGcnXSkgew0KCQkJCQkJJGZvcHRzID0gYXJyYXkoJ3BnJyA9PiAkcHJldGV4dFsncGcn XSkgKyAkZm9wdHM7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiY2FsaWQiOg0K CQkJCQlpZiAoJHRoaXMtPnRhYmxlSUQpIHsNCgkJCQkJCSRmb3B0cyA9IGFycmF5KCdjYWxp ZCcgPT4gJHRoaXMtPnRhYmxlSUQpICsgJGZvcHRzOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0K CQkJCWRlZmF1bHQ6DQoJCQkJCWlmIChncHMoJGNvbCkpIHsNCgkJCQkJCSRmb3B0cyA9IGFy cmF5KCRjb2wgPT4gZ3BzKCRjb2wpKSArICRmb3B0czsNCgkJCQkJfQ0KCQkJCQlicmVhazsN CgkJCX0NCgkJfQ0KCQkkZm9wdHMgPSBhcnJheV91bmlxdWUoJGZvcHRzKTsNCgkJJGZpbHRl cnMgPSBhcnJheSgpOw0KCQkkZmlsdGVySGlkID0gYXJyYXkoKTsNCgkJaWYgKCEkc3RhdGlj KSB7DQoJCQlmb3JlYWNoKCRmb3B0cyBhcyAka2V5ID0+ICR2YWwpIHsNCgkJCQkkZmlsdGVy c1tdID0gJGtleS4nPScuJHZhbDsNCgkJCQkkZmlsdGVySGlkW10gPSBoSW5wdXQoJGtleSwg JHZhbCk7DQoJCQl9DQoJCX0NCgkJJGZpbHRlclVSTCA9IGpvaW4oYSwgJGZpbHRlcnMpOw0K DQoJCS8vIFdlZWsgc2VsZWN0IGxpc3QNCgkJaWYgKCR0aGlzLT51c2VTZWxlY3Rvcignd2Vl aycpICYmICEkc3RhdGljKSB7DQoJCQkkY3VycndrID0gKCR0aGlzLT53ZWVrKSA/ICR0aGlz LT53ZWVrIDogZGF0ZSgnVycsIHN0cnRvdGltZSggJGN1cnJ5ci4iLSIuJGN1cnJtby4iLTEg MTI6MDAiICkpOw0KCQkJZm9yICggJGlkeCA9IDE7ICRpZHggPD0gNTI7ICRpZHgrKyApIHsN CgkJCQkkdGFnYXR0cyA9ICcgdmFsdWU9IicuJGlkeC4nIic7DQoJCQkJaWYgKCAkaWR4ID09 ICRjdXJyd2sgKSAkdGFnYXR0cyAuPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOw0KCQkJCSRv cHRpb250YWdzW10gPSBkb1RhZyhzdHJfcGFkKCRpZHgsIDIsICcwJywgU1RSX1BBRF9MRUZU KSwgJ29wdGlvbicsICcnLCAkdGFnYXR0cyk7DQoJCQl9DQoJCQkkc2VsZWN0b3JbXSA9IGRv VGFnKGpvaW4obiwgJG9wdGlvbnRhZ3MpLCAnc2VsZWN0JywgKCgkdGhpcy0+bXl3cmFwdGFn KSA/ICcnIDogJHRoaXMtPm15Y2xhc3MpLCAnIG5hbWU9InciJy4oKCR0aGlzLT5zZWxidG4p ID8gJycgOiAnIG9uY2hhbmdlPSJzdWJtaXQoKSInKSwgJycpDQogICAJCQkJLiAoKCR0aGlz LT51c2VTZWxlY3RvcigneWVhcicpKSA/ICcnIDogaElucHV0KCd5JywgJGN1cnJ5cikpOw0K CQkJJG9wdGlvbnRhZ3MgPSBhcnJheSgpOyAvLyBCbGFuayBvdXQNCgkJfQ0KDQoJCS8vIE1v bnRoIHNlbGVjdCBsaXN0IC0gbm90ZSBta3RpbWUgaGFzIHRoZSBkYXkgZm9yY2VkIHRvIDEu IElmIG5vdCB5b3UgZ2V0DQoJCS8vIGJpemFycmUgcmVwZWF0ZWQgbW9udGggbmFtZXMgb24g dGhlIDMxc3Qgb2Ygc29tZSBtb250aHMgOi1cDQoJCWlmICghJHRoaXMtPnVzZVNlbGVjdG9y KCd3ZWVrJykpIHsNCgkJCWlmICgkdGhpcy0+dXNlU2VsZWN0b3IoJ21vbnRoJykgJiYgISRz dGF0aWMpIHsNCgkJCQlmb3IgKCAkaWR4ID0gMTsgJGlkeCA8PSAxMjsgJGlkeCsrICkgew0K CQkJCQkkdGFnYXR0cyA9ICcgdmFsdWU9IicuJGlkeC4nIic7DQoJCQkJCWlmICggJGlkeCA9 PSAkY3Vycm1vICkgJHRhZ2F0dHMgLj0gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzsNCgkJCQkJ JG9wdGlvbnRhZ3NbXSA9IGRvVGFnKHN0cmZ0aW1lKCR0aGlzLT5tdGhOYW1lRm10LCBnbW1r dGltZSgxMiwwLDAsJGlkeCwxKSksICdvcHRpb24nLCAnJywgJHRhZ2F0dHMpOw0KCQkJCX0N CgkJCQkkc2VsZWN0b3JbXSA9IGRvVGFnKGpvaW4obiwgJG9wdGlvbnRhZ3MpLCAnc2VsZWN0 JywgKCgkdGhpcy0+bXl3cmFwdGFnKSA/ICcnIDogJHRoaXMtPm15Y2xhc3MpLCAnIG5hbWU9 Im0iJy4oKCR0aGlzLT5zZWxidG4pID8gJycgOiAnIG9uY2hhbmdlPSJzdWJtaXQoKSInKSwg JycpDQoJICAgCQkJCS4gKCgkdGhpcy0+dXNlU2VsZWN0b3IoJ3llYXInKSkgPyAnJyA6IGhJ bnB1dCgneScsICRjdXJyeXIpKTsNCgkJCQkkb3B0aW9udGFncyA9IGFycmF5KCk7IC8vIEJs YW5rIG91dA0KCQkJfSBlbHNlIHsNCgkJCQkkc2VsZWN0b3JbXSA9IGRvVGFnKCR0aGlzLT5n ZXRNb250aE5hbWUoKSwgJ3NwYW4nLCAoKCR0aGlzLT5teXdyYXB0YWcpID8gJycgOiAkdGhp cy0+bXljbGFzcykpOw0KCQkJfQ0KCQl9DQoNCgkJLy8gWWVhciBzZWxlY3QgbGlzdA0KCQkk eTAgPSAkdGhpcy0+ZXlyOw0KCQkkeTEgPSAkdGhpcy0+bHlyOw0KCQlpZiAoJHRoaXMtPnVz ZVNlbGVjdG9yKCd5ZWFyJykgJiYgKCR5MCAhPSAkeTEpICYmICEkc3RhdGljKSB7DQoJCQlm b3IgKCAkaWR4ID0gJHkwOyAkaWR4IDw9ICR5MTsgJGlkeCsrICkgew0KCQkJCSR0YWdhdHRz ID0gJyB2YWx1ZT0iJy4kaWR4LiciJzsNCgkJCQlpZiAoICRpZHggPT0gJGN1cnJ5ciApICR0 YWdhdHRzIC49ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7DQoJCQkJJG9wdGlvbnRhZ3NbXSA9 IGRvVGFnKCRpZHgsICdvcHRpb24nLCAnJywgJHRhZ2F0dHMpOw0KCQkJfQ0KCQkJJHNlbGVj dG9yW10gPSBkb1RhZyhqb2luKG4sICRvcHRpb250YWdzKSwgJ3NlbGVjdCcsICgoJHRoaXMt Pm15d3JhcHRhZykgPyAnJyA6ICR0aGlzLT5teWNsYXNzKSwgJyBuYW1lPSJ5IicuKCgkdGhp cy0+c2VsYnRuKSA/ICcnIDogJyBvbmNoYW5nZT0ic3VibWl0KCkiJyksICcnKQ0KCQkJCQku ICgoJHRoaXMtPnVzZVNlbGVjdG9yKCdtb250aCcpKSA/ICcnIDogaElucHV0KCdtJywgJGN1 cnJtbykpOw0KCQl9IGVsc2Ugew0KCQkJJHNlbGVjdG9yW10gPSBkb1RhZygkY3VycnlyLCAn c3BhbicsICgoJHRoaXMtPm15d3JhcHRhZykgPyAnJyA6ICR0aGlzLT5teWNsYXNzKSk7DQoJ CX0NCg0KCQkkZXh0cmFzID0gJyc7DQoJCWlmICghJHN0YXRpYyAmJiAoICR0aGlzLT51c2VT ZWxlY3RvcignbW9udGgnKSB8fCAkdGhpcy0+dXNlU2VsZWN0b3IoJ3llYXInKSApKSB7DQoJ CQlpZiAoJHRoaXMtPnNlbGJ0bikgew0KCQkJCSRleHRyYXMgLj0gZG9UYWcoJycsICdpbnB1 dCcsICdzbWRfY2FsX2lucHV0JywgJyB0eXBlPSJzdWJtaXQiIHZhbHVlPSInLiR0aGlzLT5z ZWxidG4uJyInKTsNCgkJCX0NCgkJCSRleHRyYXMgLj0gam9pbignJywgJGZpbHRlckhpZCk7 DQoJCX0NCg0KCQkkdXJscCA9IHBhcnNlX3VybCgkcHJldGV4dFsncmVxdWVzdF91cmknXSk7 DQoJCSRzZWxlY3RvciA9ICc8Zm9ybSBhY3Rpb249IicuJHVybHBbJ3BhdGgnXS4nIiBtZXRo b2Q9ImdldCInLigoJG5hdmlkKSA/ICcgaWQ9IicuJG5hdmlkLiciJyA6ICcnKS4nPicuZG9U YWcoam9pbihzcCwgJHNlbGVjdG9yKS4kZXh0cmFzLCAkdGhpcy0+bXl3cmFwdGFnLCAkdGhp cy0+bXljbGFzcykuJzwvZm9ybT4nOw0KDQoJCSRuYXZfYmFja19saW5rID0gJHRoaXMtPm5h dmlnYXRpb24oJHRoaXMtPnllYXIsICR0aGlzLT5tb250aCwgJy0nLCAkZmlsdGVyVVJMKTsN CgkJJG5hdl9md2RfbGluayAgPSAkdGhpcy0+bmF2aWdhdGlvbigkdGhpcy0+eWVhciwgJHRo aXMtPm1vbnRoLCAnKycsICRmaWx0ZXJVUkwpOw0KDQoJCSRuYXZfYmFjayA9ICghJHN0YXRp YyAmJiAkbmF2X2JhY2tfbGluaykgPyAnPGEgaHJlZj0iJy4kbmF2X2JhY2tfbGluay4nIicu JG5hdnBjbGFzcy4nPicuJG5hdnBhcnJvdy4nPC9hPicgOiAnJm5ic3A7JzsNCgkJJG5hdl9m d2QgID0gKCEkc3RhdGljICYmICRmdXR1cmUgJiYgJG5hdl9md2RfbGluaykgPyAnPGEgaHJl Zj0iJy4kbmF2X2Z3ZF9saW5rLiciJy4kbmF2bmNsYXNzLic+Jy4kbmF2bmFycm93Lic8L2E+ JyA6ICcmbmJzcDsnOw0KDQoJCSRjW10gPSBkb1RhZygkbmF2X2JhY2ssJ3RoJyk7DQoJCSRj W10gPSAnPHRoIGNvbHNwYW49IicuKCgkdGhpcy0+c2hvd0lTT1dlZWspID8gNiA6IDUpLici PicuJHNlbGVjdG9yLic8L3RoPic7DQoJCSRjW10gPSBkb1RhZygkbmF2X2Z3ZCwndGgnKTsN Cg0KCQlyZXR1cm4gZG9UYWcoam9pbignJywkYyksJ3RyJywgJ3NtZF9jYWxfbmF2cm93Jyk7 DQoJfQ0KDQoJZnVuY3Rpb24gbmF2aWdhdGlvbigkeWVhciwkbW9udGgsJGRpcmVjdGlvbiwk Zmx0KSB7DQoJCWdsb2JhbCAkcGVybWxpbmtfbW9kZTsNCg0KCQlpZigkZGlyZWN0aW9uID09 ICctJykgew0KCQkJaWYoJG1vbnRoIC0gMSA8IDEpIHsNCgkJCQkkbW9udGggPSAxMjsNCgkJ CQkkeWVhciAtPSAxOw0KCQkJfSBlbHNlIHsNCgkJCQkkbW9udGggLT0gMTsNCgkJCX0NCgkJ fSBlbHNlIHsNCgkJCWlmKCRtb250aCArIDEgPiAxMikgew0KCQkJCSRtb250aCA9IDE7DQoJ CQkJJHllYXIgKz0gMTsNCgkJCX0gZWxzZSB7DQoJCQkJJG1vbnRoICs9IDE7DQoJCQl9DQoJ CX0NCg0KCQkvLyBBYm9ydCBpZiB3ZSdyZSBhYm91dCB0byBnbyBvdXQgb2YgcmFuZ2UNCgkJ aWYgKCR5ZWFyIDwgJHRoaXMtPmV5ciB8fCAkeWVhciA+ICR0aGlzLT5seXIpIHsNCgkJCXJl dHVybiAnJzsNCgkJfQ0KDQoJCWlmKCRwZXJtbGlua19tb2RlICE9ICdtZXNzeScpIHsNCgkJ CXJldHVybiAiP209JG1vbnRoIi5hLiJ5PSR5ZWFyIi5hLiRmbHQ7DQoJCX0gZWxzZSB7IC8v IGZvciBtZXNzeSBVUkwncyB3ZSBuZWVkIHRvIGJ1aWxkIHRoZSBlbnRpcmUgcmVxdWVzdCBz dHJpbmcgZmlyc3QsIHRoZW4gdGFjayBvbiB0aGUgcmVzdA0KCQkJJG91dCA9IG1ha2VPdXQo J2lkJywncycsJ2MnLCdxJywncGcnLCdwJywnbW9udGgnKTsNCgkJCSRyID0gJz8nOw0KCQkJ Zm9yZWFjaCgkb3V0IGFzICRrZXkgPT4gJHZhbCApIHsNCgkJCQkkciAuPSAoJHZhbCkgPyAi JGtleT0kdmFsIi5hIDogJyc7DQoJCQl9DQoJCQlyZXR1cm4gJHIuIm09JG1vbnRoIi5hLiJ5 PSR5ZWFyIi5hLiRmbHQ7DQoJCX0NCgl9DQp9DQoNCmNsYXNzIFNNRF9TbWFsbF9DYWxlbmRh ciBleHRlbmRzIFNNRF9DYWxlbmRhciB7DQoJdmFyICRzZWN0aW9uID0gJyc7DQoJdmFyICRj YXRlZ29yeSA9ICcnOw0KCWZ1bmN0aW9uIFNNRF9TbWFsbF9DYWxlbmRhcigkeWVhciwkbW9u dGgsJGV2ZW50cywkc2VjdGlvbiwkY2F0ZWdvcnkpIHsNCgkJJHRoaXMtPnNlY3Rpb24gPSAk c2VjdGlvbjsNCgkJJHRoaXMtPmNhdGVnb3J5ID0gJGNhdGVnb3J5Ow0KCQkkdGhpcy0+U01E X0NhbGVuZGFyKCR5ZWFyLCRtb250aCwkZXZlbnRzKTsNCgl9DQoNCglmdW5jdGlvbiBkc3BE YXlDZWxsKCR0aGVkYXkpIHsNCgkJZ2xvYmFsICRwZXJtbGlua19tb2RlOw0KDQoJCSRoYXNh cnRpY2xlID0gaXNzZXQoJHRoaXMtPmV2ZW50c1skdGhlZGF5XSk7DQoJCSRjbGFzc1tdID0g JHRoaXMtPmNlbGxjbGFzcy4nICcgLiAoKCRoYXNhcnRpY2xlKSA/ICR0aGlzLT5jbGFzc3By ZWZpeC4nZXZlbnQnIDogJycpOw0KCQlpZiAoKGluX2FycmF5KCBkYXRlKCdkLU0tWScsIGdt bWt0aW1lKCAwLCAwLCAwLCAkdGhpcy0+bW9udGgsICR0aGVkYXksICR0aGlzLT55ZWFyKSAp LCAkdGhpcy0+aG9saWRheXMpKSApIHsNCgkJCSRjbGFzc1tdID0gJHRoaXMtPmNsYXNzcHJl Zml4Lidob2xzJzsNCgkJfQ0KCQlpZigkdGhpcy0+eWVhciA9PSBkYXRlKCdZJyx0aW1lKCkr dHpfb2Zmc2V0KCkgKSBhbmQgJHRoaXMtPm1vbnRoID09IGRhdGUoJ24nLHRpbWUoKSt0el9v ZmZzZXQoKSApIGFuZCAkdGhlZGF5ID09IGRhdGUoJ2onLHRpbWUoKSt0el9vZmZzZXQoKSkg KSB7DQoJCQkkY2xhc3NbXSA9ICR0aGlzLT5jbGFzc3ByZWZpeC4ndG9kYXknOw0KCQl9DQoN CgkJaWYoIGlzc2V0KCR0aGlzLT5ldmVudHNbJHRoZWRheV0pICkgew0KCQkJJGRheXNfZXZl bnRzID0gJHRoaXMtPmV2ZW50c1skdGhlZGF5XTsNCgkJCWZvcmVhY2goJGRheXNfZXZlbnRz IGFzICRldikgew0KCQkJCSRldmNsYXNzID0gdHJpbSgkZXZbJ2NsYXNzZXMnXSk7DQoJCQkJ Zm9yZWFjaCAoZXhwbG9kZSgnICcsICRldmNsYXNzKSBhcyAkZXZjKSB7DQoJCQkJCSRjbGFz c1tdPSAkZXZjOw0KCQkJCX0NCg0KCQkJCSRvdXRbXSA9ICgkdGhpcy0+ZXZ3cmFwdGFnKSA/ IHRhZygkZXZbJ2V2J10sICR0aGlzLT5ldndyYXB0YWcsICgoJGV2Y2xhc3MpID8gJyBjbGFz cz0iJy4kZXZjbGFzcy4nIicgOiAnJykpIDogJGV2WydldiddOw0KCQkJfQ0KCQkJJHVzZV9w b3N0ZWQgPSBmYWxzZTsNCgkJCWZvcmVhY2ggKCR0aGlzLT5saW5rcG9zdGVkIGFzICRkbGlu a3MpIHsNCgkJCQlpZiAoaW5fYXJyYXkoJGRsaW5rcywgJGNsYXNzKSkgew0KCQkJCQkkdXNl X3Bvc3RlZCA9IHRydWU7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJCWlmKCAkcGVy bWxpbmtfbW9kZSAhPSAneWVhcl9tb250aF9kYXlfdGl0bGUnICkgew0KCQkJCSRsaW5rZGF0 ZSA9ICgkdXNlX3Bvc3RlZCkgPyAkZXZbJ3Bvc3RlZCddIDogJHRoaXMtPnllYXIuJy0nLiR0 aGlzLT5kb3VibGVkaWdpdCgkdGhpcy0+bW9udGgpLictJy4kdGhpcy0+ZG91YmxlZGlnaXQo JHRoZWRheSk7DQoJCQkJJGhyZWYgPSAnIGhyZWY9IicuaHUuJz9kYXRlPScuJGxpbmtkYXRl Ow0KCQkJCWlmKCR0aGlzLT5zZWN0aW9uKSB7ICRocmVmID0gJGhyZWYuYS4ncz0nLiR0aGlz LT5zZWN0aW9uOyB9DQoJCQkJaWYoJHRoaXMtPmNhdGVnb3J5KSB7ICRocmVmID0gJGhyZWYu YS4nYz0nLiR0aGlzLT5jYXRlZ29yeTsgfQ0KCQkJCSRocmVmIC49ICciJzsNCgkJCX0gZWxz ZSB7DQoJCQkJJHNlY3Rpb24gPSAoJHRoaXMtPnNlY3Rpb24pID8gJHRoaXMtPnNlY3Rpb24u Jy8nIDogJyc7DQoJCQkJJGxpbmtkYXRlID0gKCR1c2VfcG9zdGVkKSA/IHByZWdfcmVwbGFj ZSgiLSIsICIvIiwgJGV2Wydwb3N0ZWQnXSkgOiAkdGhpcy0+eWVhci4nLycuJHRoaXMtPmRv dWJsZWRpZ2l0KCR0aGlzLT5tb250aCkuJy8nLiR0aGlzLT5kb3VibGVkaWdpdCgkdGhlZGF5 KTsNCgkJCQkkaHJlZiA9ICcgaHJlZj0iJy5odS4kc2VjdGlvbi4kbGlua2RhdGUuJyInOw0K CQkJfQ0KDQoJCQkkY1tdID0gZG9UYWcoJHRoZWRheS5qb2luKCcnLCRvdXQpLCdhJywnJywk aHJlZik7DQoJCX0gZWxzZSB7DQoJCQkkY1tdID0gJHRoZWRheTsNCgkJfQ0KDQoJCXJldHVy biBkb1RhZyhqb2luKCcnLCRjKSwndGQnLGpvaW4oJyAnLCRjbGFzcykpOw0KCX0NCg0KCWZ1 bmN0aW9uIGRvdWJsZWRpZ2l0KCRuKSB7DQoJCWlmKCRuIDwgMTApIHsgJG4gPSAnMCcuKGlu dCkkbjsgfQ0KCQlyZXR1cm4gJG47DQoJfQ0KDQp9DQoNCi8qKg0KKiBCYXNpYyBDYWxlbmRh ciBkYXRhIGFuZCBkaXNwbGF5DQoqIGh0dHA6Ly93d3cub3NjYXJtLm9yZy9zdGF0aWMvcGcv Y2FsZW5kYXJDbGFzcy8NCiogQGF1dGhvciBPc2NhciBNZXJpZGENCiogQGNyZWF0ZWQgSmFu IDE4IDIwMDQNCiogQHBhY2thZ2UgIGdvQ29yZUxpYg0KKi8NCmNsYXNzIFNNRF9SYXdfQ2Fs ZW5kYXIgew0KdmFyICRnbXQgPSAxOw0KdmFyICRsYW5nOw0KdmFyICR5ZWFyOw0KdmFyICRl eXI7DQp2YXIgJGx5cjsNCnZhciAkbW9udGg7DQp2YXIgJHdlZWs7DQp2YXIgJGRheU5hbWVG bXQ7DQp2YXIgJG10aE5hbWVGbXQ7DQp2YXIgJGRheU5hbWVzOw0KdmFyICRzdGFydERheTsN CnZhciAkc2VsZWN0b3JzOw0KdmFyICRzZWxidG47DQp2YXIgJHNob3dJU09XZWVrOw0KdmFy ICRJU09XZWVrSGVhZDsNCnZhciAkSVNPV2Vla0NlbGw7DQp2YXIgJGVuZERheTsNCnZhciAk Zmlyc3REYXlPZldlZWsgPSAwOw0KdmFyICRzdGFydE9mZnNldCA9IDA7DQp2YXIgJGNsYXNz bGV2ZWxzOw0KdmFyICRjbGFzc3ByZWZpeDsNCnZhciAkZXZjbGFzc3ByZWZpeDsNCnZhciAk ZXZ3cmFwdGFnOw0KdmFyICRteXdyYXB0YWc7DQp2YXIgJHJvd2NsYXNzOw0KdmFyICRjZWxs Y2xhc3M7DQp2YXIgJGVtcHR5Y2xhc3M7DQp2YXIgJGlzb2NsYXNzOw0KdmFyICRuYXZwY2xh c3M7DQp2YXIgJG5hdm5jbGFzczsNCnZhciAkbmF2cGFycm93Ow0KdmFyICRuYXZuYXJyb3c7 DQp2YXIgJG5hdmlkOw0KdmFyICRteWNsYXNzOw0KdmFyICRmb3B0czsNCnZhciAkaG9saWRh eXM7DQp2YXIgJGxpbmtwb3N0ZWQ7DQp2YXIgJGNlbGxmb3JtOw0KdmFyICR0YWJsZUlEOw0K dmFyICRtYWludGFpbjsNCi8qKg0KKiBDb25zdHJ1Y3Rvcg0KKg0KKiBAcGFyYW0gaW50ZWdl ciwgeWVhcg0KKiBAcGFyYW0gaW50ZWdlciwgbW9udGgNCiogQHJldHVybiBvYmplY3QNCiog QHB1YmxpYw0KKi8NCmZ1bmN0aW9uIFNNRF9SYXdfQ2FsZW5kYXIgKCAkeXIsICRtbyApIHsN CgkkdGhpcy0+c2V0WWVhcigkeXIpOw0KCSR0aGlzLT5zZXRNb250aCgkbW8pOw0KCSR0aGlz LT5zZXRDbGFzc1ByZWZpeCgnc21kX2NhbF8nKTsNCg0KCSR0aGlzLT5zdGFydFRpbWUgPSBz dHJ0b3RpbWUoICIkeXItJG1vLTAxIDAwOjAwIiApOw0KCSR0aGlzLT5zdGFydERheQk9IGRh dGUoICdEJywgJHRoaXMtPnN0YXJ0VGltZSApOw0KCSR0aGlzLT5lbmREYXkgPSBkYXRlKCAn dCcsICR0aGlzLT5zdGFydFRpbWUgKTsNCgkkdGhpcy0+ZW5kVGltZSAgID0gc3RydG90aW1l KCAiJHlyLSRtby0iLiR0aGlzLT5lbmREYXkuIiAyMzo1OSIgKTsNCg0KCSR0aGlzLT5zZXRO YW1lRm9ybWF0KCclYScsICdkJyk7DQoJJHRoaXMtPnNldE5hbWVGb3JtYXQoJyVCJywgJ20n KTsNCgkkdGhpcy0+c2V0Rmlyc3REYXlPZldlZWsoMCk7DQoJJHRoaXMtPnNldFNob3dJU09X ZWVrKCcnKTsNCgkkdGhpcy0+c2V0VGFibGVJRCgnJyk7DQoJJHRoaXMtPnNldFRhYmxlQ2xh c3MoJycpOw0KfQ0KLy8gPT09PSBlbmQgQ2FsZW5kYXIgPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQovLyBHZXR0ZXJzDQpmdW5jdGlvbiB1c2VT ZWxlY3RvcigkdmFsKSB7IHJldHVybiBpbl9hcnJheSgkdmFsLCAkdGhpcy0+c2VsZWN0b3Jz KTsgfQ0KZnVuY3Rpb24gZ2V0RGF5TmFtZSgkZGF5KSB7IHJldHVybiAoJHRoaXMtPmRheU5h bWVzWyRkYXklN10pOyB9DQpmdW5jdGlvbiBnZXRNb250aE5hbWUoKSB7IHJldHVybiBzdHJm dGltZSggJHRoaXMtPm10aE5hbWVGbXQsICR0aGlzLT5zdGFydFRpbWUgKTsgfQ0KZnVuY3Rp b24gZ2V0TmF2SW5mbygkdHlwZSkgew0KCSRyID0gJyc7DQoJc3dpdGNoICgkdHlwZSkgew0K CQljYXNlICJpZCI6ICRyID0gJHRoaXMtPm5hdmlkOyBicmVhazsNCgkJY2FzZSAicGMiOiAk ciA9ICR0aGlzLT5uYXZwY2xhc3M7IGJyZWFrOw0KCQljYXNlICJuYyI6ICRyID0gJHRoaXMt Pm5hdm5jbGFzczsgYnJlYWs7DQoJCWNhc2UgInBhIjogJHIgPSAkdGhpcy0+bmF2cGFycm93 OyBicmVhazsNCgkJY2FzZSAibmEiOiAkciA9ICR0aGlzLT5uYXZuYXJyb3c7IGJyZWFrOw0K CX0NCglyZXR1cm4gJHI7DQp9DQovLyBTZXR0ZXJzDQpmdW5jdGlvbiBzZXRHTVQoJGIpeyAk dGhpcy0+Z210ID0gJGI7IH0NCmZ1bmN0aW9uIHNldExhbmcoJGNvZGUpeyAkdGhpcy0+bGFu ZyA9ICRjb2RlOyB9DQpmdW5jdGlvbiBzZXRDZWxsRm9ybSgkZnJtKXsgJHRoaXMtPmNlbGxm b3JtID0gJGZybTsgfQ0KZnVuY3Rpb24gc2V0VGFibGVJRCgkaWQpeyAkdGhpcy0+dGFibGVJ RCA9ICRpZDsgfQ0KZnVuY3Rpb24gc2V0WWVhcigkeXIpeyAkdGhpcy0+eWVhciA9ICR5cjsg fQ0KZnVuY3Rpb24gc2V0RVllYXIoJHlyKXsgJHRoaXMtPmV5ciA9ICR5cjsgfQ0KZnVuY3Rp b24gc2V0TFllYXIoJHlyKXsgJHRoaXMtPmx5ciA9ICR5cjsgfQ0KZnVuY3Rpb24gc2V0TW9u dGgoJG10aCl7ICR0aGlzLT5tb250aCA9IChpbnQpJG10aDsgfQ0KZnVuY3Rpb24gc2V0V2Vl aygkd2spew0KCWlmICgkd2spIHsNCgkJJHRoaXMtPndlZWsgPSAoaW50KSR3azsNCgkJJHRo aXMtPm1vbnRoID0gc2FmZV9zdHJmdGltZSgiJW0iLCBnbW1rdGltZSAoMSwxLDEsMSw3KiR3 aywkdGhpcy0+eWVhcikpOw0KCX0NCn0NCmZ1bmN0aW9uIHNldE5hdktlZXAoJGFyKXsgJHRo aXMtPm1haW50YWluID0gJGFyOyB9DQpmdW5jdGlvbiBzZXRTaG93SVNPV2VlaygkdmFsKSB7 DQoJJHRoaXMtPnNob3dJU09XZWVrID0gKCR2YWwpID8gdHJ1ZSA6IGZhbHNlOw0KCWlmICgk dmFsKSB7DQoJCSR2YWwgPSBkb19saXN0KCR2YWwpOw0KCQkkdGhpcy0+SVNPV2Vla0hlYWQg PSAkdmFsWzBdOw0KCQkkdGhpcy0+SVNPV2Vla0NlbGwgPSAoaXNzZXQoJHZhbFsxXSkpID8g JHZhbFsxXSA6ICd7d2Vla30nOw0KCX0NCn0NCmZ1bmN0aW9uIHNldENsYXNzTGV2ZWxzKCRj bHMpeyAkdGhpcy0+Y2xhc3NsZXZlbHMgPSAkY2xzOyB9DQpmdW5jdGlvbiBzZXRDbGFzc1By ZWZpeCgkY2xzKXsgJHRoaXMtPmNsYXNzcHJlZml4ID0gJGNsczsgfQ0KZnVuY3Rpb24gc2V0 RXZlbnRQcmVmaXgoJGNscyl7ICR0aGlzLT5ldmNsYXNzcHJlZml4ID0gJGNsczsgfQ0KZnVu Y3Rpb24gc2V0RXZlbnRXcmFwdGFnKCR3cmFwKXsgJHRoaXMtPmV2d3JhcHRhZyA9ICR3cmFw OyB9DQpmdW5jdGlvbiBzZXRNWVdyYXB0YWcoJHdyYXApeyAkdGhpcy0+bXl3cmFwdGFnID0g JHdyYXA7IH0NCmZ1bmN0aW9uIHNldFRhYmxlQ2xhc3MoJGNscykgeyAkdGhpcy0+dGFibGVj bGFzcyA9ICgkY2xzKSA/ICR0aGlzLT5jbGFzc3ByZWZpeC4kY2xzIDogJyc7IH0NCmZ1bmN0 aW9uIHNldFJvd0NsYXNzKCRjbHMpeyAkdGhpcy0+cm93Y2xhc3MgPSAoJGNscykgPyAkdGhp cy0+Y2xhc3NwcmVmaXguJGNscyA6ICcnOyB9DQpmdW5jdGlvbiBzZXRDZWxsQ2xhc3MoJGNs cyl7ICR0aGlzLT5jZWxsY2xhc3MgPSAoJGNscykgPyAkdGhpcy0+Y2xhc3NwcmVmaXguJGNs cyA6ICcnOyB9DQpmdW5jdGlvbiBzZXRFbXB0eUNsYXNzKCRjbHMpeyAkdGhpcy0+ZW1wdHlj bGFzcyA9ICgkY2xzKSA/ICR0aGlzLT5jbGFzc3ByZWZpeC4kY2xzIDogJyc7IH0NCmZ1bmN0 aW9uIHNldElTT1dlZWtDbGFzcygkY2xzKXsgJHRoaXMtPmlzb2NsYXNzID0gKCRjbHMpID8g JHRoaXMtPmNsYXNzcHJlZml4LiRjbHMgOiAnJzsgfQ0KZnVuY3Rpb24gc2V0TmF2SW5mbygk Y2xzcCwgJGNsc24sICRhcnJwLCAkYXJybiwgJG5pZCl7DQoJJHRoaXMtPm5hdnBjbGFzcyA9 ICgkY2xzcCkgPyAkdGhpcy0+Y2xhc3NwcmVmaXguJGNsc3AgOiAnJzsNCgkkdGhpcy0+bmF2 bmNsYXNzID0gKCRjbHNuKSA/ICR0aGlzLT5jbGFzc3ByZWZpeC4kY2xzbiA6ICcnOw0KCSR0 aGlzLT5uYXZwYXJyb3cgPSAoJGFycnApID8gJGFycnAgOiAnJzsNCgkkdGhpcy0+bmF2bmFy cm93ID0gKCRhcnJuKSA/ICRhcnJuIDogJyc7DQoJJHRoaXMtPm5hdmlkID0gKCRuaWQpID8g JHRoaXMtPmNsYXNzcHJlZml4LiRuaWQgOiAnJzsNCn0NCmZ1bmN0aW9uIHNldE1ZQ2xhc3Mo JGNscyl7ICR0aGlzLT5teWNsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNsYXNzcHJlZml4LiRj bHMgOiAnJzsgfQ0KZnVuY3Rpb24gc2V0RmlsdGVyT3B0cygkZikgeyAkdGhpcy0+Zm9wdHMg PSAkZjsgfQ0KZnVuY3Rpb24gc2V0TGlua1Bvc3RlZCgkZGwpIHsNCglmb3JlYWNoICgkZGwg YXMgJGR2YWwpIHsNCgkJJHRoaXMtPmxpbmtwb3N0ZWRbXSA9ICR0aGlzLT5jbGFzc3ByZWZp eC4kZHZhbDsNCgl9DQp9DQpmdW5jdGlvbiBzZXRIb2xpZGF5cygkaG9scykgeyAkdGhpcy0+ aG9saWRheXMgPSAkaG9sczsgfQ0KZnVuY3Rpb24gc2V0U2VsZWN0b3JzKCRzZWwsICRidG4p IHsgJHRoaXMtPnNlbGVjdG9ycyA9ICRzZWw7ICR0aGlzLT5zZWxidG4gPSAkYnRuOyB9DQpm dW5jdGlvbiBzZXRGaXJzdERheU9mV2VlaygkZCkgew0KCSR0aGlzLT5maXJzdERheU9mV2Vl ayA9ICgoaW50KSRkIDw9IDYgYW5kIChpbnQpJGQgPj0gMCkgPyAoaW50KSRkIDogMDsNCg0K CSR0aGlzLT5zdGFydE9mZnNldCA9IGRhdGUoICd3JywgJHRoaXMtPnN0YXJ0VGltZSApLSR0 aGlzLT5maXJzdERheU9mV2VlazsNCglpZiAoICR0aGlzLT5zdGFydE9mZnNldCA8IDAgKSB7 DQoJCSR0aGlzLT5zdGFydE9mZnNldCA9IDcgLSBhYnMoJHRoaXMtPnN0YXJ0T2Zmc2V0KTsN Cgl9DQp9DQovKioNCiogZnJtOiBhbnkgdmFsaWQgUEhQIHN0cmZ0aW1lKCkgc3RyaW5nIG9y IEFCQlIvRlVMTA0KKiB0eXA6IGQgdG8gc2V0IGRheSwgbSB0byBzZXQgbW9udGggZm9ybWF0 DQoqLw0KZnVuY3Rpb24gc2V0TmFtZUZvcm1hdCgkZnJtLCAkdHlwPSJkIikgew0KCXN3aXRj aCAoJGZybSkgew0KCQljYXNlICJGVUxMIjoNCgkJCSRmbXQgPSAoJHR5cCA9PSAnZCcpID8g IiVBIiA6ICIlQiI7DQoJCQlicmVhazsNCgkJY2FzZSAiQUJCUiI6DQoJCQkkZm10ID0gKCR0 eXAgPT0gJ2QnKSA/ICIlYSIgOiAiJWIiOw0KCQkJYnJlYWs7DQoJCWRlZmF1bHQ6DQoJCQlp ZiAoJHR5cCA9PSAnZCcpIHsNCgkJCQlpZiAoc3RycG9zKCRmcm0sICclJykgPT09IDApIHsN CgkJCQkJJGZtdCA9ICRmcm07DQoJCQkJfSBlbHNlIHsNCgkJCQkJJGZybSA9IHRyaW0oJGZy bSwgJ3t9Jyk7DQoJCQkJCSRmcm0gPSBkb19saXN0KCRmcm0pOw0KCQkJCQkkZm10ID0gJGZy bTsNCgkJCQl9DQoJCQl9IGVsc2Ugew0KCQkJCSRmbXQgPSAkZnJtOw0KCQkJfQ0KCQkJYnJl YWs7DQoJfQ0KDQoJaWYgKCR0eXAgPT0gImQiKSB7DQoJCSR0aGlzLT5kYXlOYW1lRm10ID0g JGZtdDsNCgkJJHRoaXMtPmRheU5hbWVzID0gYXJyYXkoKTsNCg0KCQkvLyBUaGlzIGlzIGRv bmUgdG8gbWFrZSBzdXJlIFN1bmRheSBpcyBhbHdheXMgdGhlIGZpcnN0IGRheSBvZiBvdXIg YXJyYXkNCgkJLy8gVW5peCB0aW1lIGdldHMgYSBsaXR0bGUgZnVua3kgYXQgdGhlIGJlZ2lu bmluZyBkZXBlbmRpbmcgdXBvbiB5b3VyIHRpbWV6b25lLg0KCQkkc2VydmVyb2Zmc2V0ID0g Z21ta3RpbWUoMCwwLDApIC0gbWt0aW1lKDAsMCwwKTsNCgkJJHN0YXJ0ID0gKCRzZXJ2ZXJv ZmZzZXQgPCAwKSA/IDQgOiAzOw0KCQkkZW5kID0gJHN0YXJ0ICsgNzsNCgkJZm9yKCRpPSRz dGFydDsgJGk8JGVuZDsgJGkrKykgew0KCQkJaWYgKGlzX2FycmF5KCRmbXQpKSB7DQoJCQkJ JHRoaXMtPmRheU5hbWVzW10gPSAkZm10WyRpLSRzdGFydF07DQoJCQl9IGVsc2Ugew0KCQkJ CSR0aGlzLT5kYXlOYW1lc1tdID0gdWNmaXJzdChzYWZlX3N0cmZ0aW1lKCRmbXQsIDg2NDAw KiRpIC0gdHpfb2Zmc2V0KCksICR0aGlzLT5nbXQsICR0aGlzLT5sYW5nICkpOw0KCQkJfQ0K CQl9DQoJfSBlbHNlIHsNCgkJJHRoaXMtPm10aE5hbWVGbXQgPSAkZm10Ow0KCX0NCn0NCi8q Kg0KKiBSZXR1cm5zIG1hcmt1cCBmb3IgZGlzcGxheWluZyB0aGUgY2FsZW5kYXIuDQoqIEBy ZXR1cm4NCiogQHB1YmxpYw0KKi8NCmZ1bmN0aW9uIGRpc3BsYXkgKCApIHsNCgkkaWQgPSAo JHRoaXMtPnRhYmxlSUQpID8gJyBpZD0iJy4kdGhpcy0+dGFibGVJRC4nIicgOiAnJzsNCgkk Y1tdID0gJzx0YWJsZScuJGlkLic+JzsNCgkkY1tdID0gJHRoaXMtPmRzcERheU5hbWVzKCk7 DQoJJGNbXSA9ICR0aGlzLT5kc3BEYXlDZWxscygpOw0KCSRjW10gPSAnPC90YWJsZT4nOw0K DQoJcmV0dXJuIGpvaW4oJycsJGMpOw0KfQ0KLy8gPT09PSBlbmQgZGlzcGxheSA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi8qKg0KKiBEaXNw bGF5cyB0aGUgcm93IG9mIGRheSBuYW1lcy4NCiogQHJldHVybiBzdHJpbmcNCiogQHByaXZh dGUNCiovDQpmdW5jdGlvbiBkc3BEYXlOYW1lcyAoICkgew0KCSRjW10gPSAnPHRyIGNsYXNz PSJzbWRfY2FsX2RheW5hbWVzIj4nOw0KDQoJJGkgPSAkdGhpcy0+Zmlyc3REYXlPZldlZWs7 DQoJJGogPSAwOyAvLyBjb3VudCBudW1iZXIgb2YgZGF5cyBkaXNwbGF5ZWQNCgkkZW5kID0g ZmFsc2U7DQoNCglpZiAoJHRoaXMtPnNob3dJU09XZWVrKSB7DQoJCSRjW10gPSAiPHRoPiIu JHRoaXMtPklTT1dlZWtIZWFkLiI8L3RoPiI7DQoJfQ0KCWZvcigkaiA9IDA7ICRqPD02OyAk aisrLCAkaSsrKSB7DQoJCWlmKCRpID09IDcpIHsgJGkgPSAwOyB9DQoJCSRjW10gPSAnPHRo PicuJHRoaXMtPmdldERheU5hbWUoJGkpLiI8L3RoPiI7DQoJfQ0KDQoJJGNbXSA9ICc8L3Ry Pic7DQoJcmV0dXJuIGpvaW4oJycsJGMpOw0KfQ0KLy8gPT09PSBlbmQgZHNwRGF5TmFtZXMg PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQovKioN CiogRGlzcGxheXMgYWxsIGRheSBjZWxscyBmb3IgdGhlIG1vbnRoDQoqDQoqIEByZXR1cm4g c3RyaW5nDQoqIEBwcml2YXRlDQoqLw0KZnVuY3Rpb24gZHNwRGF5Q2VsbHMgKCApIHsNCgkk aSA9IDA7IC8vIGNlbGwgY291bnRlcg0KCSRlbXB0eUNsYXNzID0gJHRoaXMtPmVtcHR5Y2xh c3M7DQoJJGlzb0NsYXNzID0gJHRoaXMtPmlzb2NsYXNzOw0KCSRyb3dDbGFzcyA9ICR0aGlz LT5yb3djbGFzczsNCgkkcm93Q2xhc3MgPSAoJHJvd0NsYXNzKSA/ICcgY2xhc3M9IicuJHJv d0NsYXNzLiciJyA6ICcnOw0KDQoJJGNbXSA9ICc8dHInLiRyb3dDbGFzcy4nPic7DQoNCglp ZiAoJHRoaXMtPnNob3dJU09XZWVrKSB7DQoJCSR3a2NlbGwgPSBzdHJ0cigkdGhpcy0+SVNP V2Vla0NlbGwsIGFycmF5KCd7d2Vla30nID0+IGRhdGUoICdXJywgJHRoaXMtPnN0YXJ0VGlt ZSApICkpOw0KCQkkY1tdID0gJzx0ZCBjbGFzcz0iJy4kaXNvQ2xhc3MuJyI+Jy4kd2tjZWxs Lic8L3RkPic7DQoJfQ0KCS8vIGZpcnN0IGRpc3BsYXkgZW1wdHkgY2VsbHMgYmFzZWQgb24g d2hhdCB3ZWVrZGF5IHRoZSBtb250aCBzdGFydHMgaW4NCglmb3IoICRqPTA7ICRqPCR0aGlz LT5zdGFydE9mZnNldDsgJGorKyApCXsNCgkJJGkrKzsNCgkJJGNbXSA9ICc8dGQgY2xhc3M9 IicuJGVtcHR5Q2xhc3MuJyI+Jm5ic3A7PC90ZD4nOw0KCX0gLy8gZW5kIG9mZnNldCBjZWxs cw0KDQoJLy8gd3JpdGUgb3V0IHRoZSByZXN0IG9mIHRoZSBkYXlzLCBhdCBlYWNoIHN1bmRh eSwgc3RhcnQgYSBuZXcgcm93Lg0KCWZvciggJGQ9MTsgJGQ8PSR0aGlzLT5lbmREYXk7ICRk KysgKSB7DQoJCSRpKys7DQoJCSRjW10gPSAkdGhpcy0+ZHNwRGF5Q2VsbCggJGQgKTsNCgkJ aWYgKCAkaSU3ID09IDAgKSB7ICRjW10gPSAnPC90cj4nOyB9DQoJCWlmICggJGQ8JHRoaXMt PmVuZERheSAmJiAkaSU3ID09IDAgKSB7DQoJCQkkY1tdID0gJzx0cicuJHJvd0NsYXNzLic+ JzsNCgkJCWlmICgkdGhpcy0+c2hvd0lTT1dlZWspIHsNCgkJCQkkd2tjZWxsID0gc3RydHIo JHRoaXMtPklTT1dlZWtDZWxsLCBhcnJheSgne3dlZWt9JyA9PiBkYXRlKCAnVycsIHN0cnRv dGltZSggJHRoaXMtPnllYXIuIi0iLiR0aGlzLT5tb250aC4iLSIuKGludCkoJGQgKyAxKSAu IiAwMDowMCIgKSkgKSk7DQoJCQkJJGNbXSA9ICc8dGQgY2xhc3M9IicuJGlzb0NsYXNzLici PicuJHdrY2VsbC4nPC90ZD4nOw0KCQkJfQ0KCQl9DQoJfQ0KCS8vIGZpbGwgaW4gdGhlIGZp bmFsIHJvdw0KCSRsZWZ0ID0gNyAtICggJGklNyApOw0KCWlmICggJGxlZnQgPCA3KQl7DQoJ CWZvciAoICRqPTA7ICRqPCRsZWZ0OyAkaisrICkJew0KCQkgICRjW10gPSAnPHRkIGNsYXNz PSInLiRlbXB0eUNsYXNzLiciPiZuYnNwOzwvdGQ+JzsNCgkJfQ0KCQkkY1tdID0gIlxuXHQ8 L3RyPiI7DQoJfQ0KCXJldHVybiBqb2luKCcnLCRjKTsNCn0NCi8vID09PT0gZW5kIGRzcERh eUNlbGxzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KLyoqDQoqIG91dHB1dHMgdGhlIGNvbnRlbnRzIGZvciBhIGdpdmVuIGRheQ0KKg0KKiBA cGFyYW0gaW50ZWdlciwgZGF5DQoqIEBhYnN0cmFjdA0KKi8NCmZ1bmN0aW9uIGRzcERheUNl bGwgKCAkZGF5ICkgew0KCXJldHVybiAnPHRkPicuJGRheS4nPC90ZD4nOw0KfQ0KLy8gPT09 PSBlbmQgZGF5Q2VsbCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NCn0gLy8gZW5kIGNsYXNzDQoNCi8vIFBlcmZvcm0gb25lIG9mIDIgdHlwZXMg b2YgdGVzdDogYSBmbGFnLWJhc2VkIHRlc3QsIG9yIGFuIGluZm8tYmFzZWQgdGVzdA0KZnVu Y3Rpb24gc21kX2lmX2NhbCgkYXR0cywgJHRoaW5nKSB7DQoJZ2xvYmFsICRzbWRfY2FsX2Zs YWcsICRzbWRfY2FsX2lkLCAkc21kX3llYXIsICRzbWRfbW9udGgsICRzbWRfd2VlaywgJHNt ZF9kYXk7DQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ2ZsYWcnID0+ICcnLCAvLyBldmVu dCwgc3RhbmRhcmQsIHJlY3VyKGZpcnN0KSwgbXVsdGkoZmlyc3QsbGFzdCxwcmV2KSwgY2Fu Y2VsLCBob2xzLCB0b2RheSwgU01EX0FOWQ0KCQknY2FsaWQnID0+ICcnLA0KCQkneWVhcicg PT4gJycsDQoJCSdtb250aCcgPT4gJycsDQoJCSd3ZWVrJyA9PiAnJywNCgkJJ2RheScgPT4g JycsDQoJCSdsb2dpYycgPT4gJ2FuZCcsDQoJCSdkZWJ1ZycgPT4gJzAnLA0KCSksICRhdHRz KSk7DQoNCgkkZmxhZyA9IGRvX2xpc3QoJGZsYWcpOw0KCSRjdHIgPSAkbnVtID0gMDsNCg0K CWlmICgkZGVidWcpIHsNCgkJZG1wKCRhdHRzKTsNCgl9DQoNCglpZiAoJGZsYWcgJiYgJGZs YWdbMF0gIT0gJycpIHsNCgkJJG51bSArPSBjb3VudCgkZmxhZyk7DQoJCWZvcmVhY2ggKCRm bGFnIGFzICR3aGF0bm90KSB7DQoJCQlpZiAoZW1wdHkoJHdoYXRub3QpKSBjb250aW51ZTsN CgkJCSRjdHIgKz0gKGluX2FycmF5KCR3aGF0bm90LCAkc21kX2NhbF9mbGFnKSB8fCAoJHdo YXRub3QgPT0gJ1NNRF9BTlknICYmICFlbXB0eSgkc21kX2NhbF9mbGFnKSkpID8gMSA6IDA7 DQoJCX0NCgl9DQoJaWYgKCRjYWxpZCkgew0KCQkkbnVtKys7DQoJCSRjdHIgKz0gKCRzbWRf Y2FsX2lkID09PSAkY2FsaWQpID8gMSA6IDA7DQoJfQ0KCWZvcmVhY2ggKGFycmF5KCJ5ZWFy IiwgIm1vbnRoIiwgIndlZWsiLCAiZGF5IikgYXMgJHRlc3QpIHsNCgkJJHRlc3RlciA9ICQk dGVzdDsNCgkJJGdibCA9ICdzbWRfJy4kdGVzdDsNCgkJJGNvbXBhcmUgPSAkJGdibDsNCg0K CQlpZiAoJHRlc3Rlcikgew0KCQkJJG51bSsrOw0KCQkJcHJlZ19tYXRjaCgnLyhbIT08Pl0r KT8oW1xkXSspLycsICR0ZXN0ZXIsICRtYXRjaGVzKTsNCgkJCWlmICgkZGVidWcpIHsNCgkJ CQlkbXAoIlRFU1QgSUY6ICIuICRjb21wYXJlLiAoKCRtYXRjaGVzWzFdKSA/ICRtYXRjaGVz WzFdIDogJz0nKSAuICRtYXRjaGVzWzJdICk7DQoJCQl9DQoJCQlzd2l0Y2ggKCRtYXRjaGVz WzFdKSB7DQoJCQkJY2FzZSAiISI6DQoJCQkJCSRjdHIgKz0gKCRjb21wYXJlIT0kbWF0Y2hl c1syXSkgPyAxIDogMDsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiPiI6DQoJCQkJCSRjdHIg Kz0gKCRjb21wYXJlPiRtYXRjaGVzWzJdKSA/IDEgOiAwOw0KCQkJCQlicmVhazsNCgkJCQlj YXNlICI+PSI6DQoJCQkJCSRjdHIgKz0gKCRjb21wYXJlPj0kbWF0Y2hlc1syXSkgPyAxIDog MDsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiPCI6DQoJCQkJCSRjdHIgKz0gKCRjb21wYXJl PCRtYXRjaGVzWzJdKSA/IDEgOiAwOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICI8PSI6DQoJ CQkJCSRjdHIgKz0gKCRjb21wYXJlPD0kbWF0Y2hlc1syXSkgPyAxIDogMDsNCgkJCQkJYnJl YWs7DQoJCQkJZGVmYXVsdDoNCgkJCQkJJGN0ciArPSAoJGNvbXBhcmU9PSRtYXRjaGVzWzJd KSA/IDEgOiAwOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCX0NCgkkcmVzdWx0ID0gKCgk Y3RyID09PSAkbnVtICYmICRsb2dpYyA9PSAiYW5kIikgfHwgJGN0ciA+IDAgJiYgJGxvZ2lj ID09ICJvciIpID8gdHJ1ZSA6IGZhbHNlOw0KCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhp bmcsICRyZXN1bHQpKTsNCn0NCg0KZnVuY3Rpb24gc21kX2NhbF9pbmZvKCRhdHRzKSB7DQoJ Z2xvYmFsICRwcmV0ZXh0LCAkdGhpc2FydGljbGUsICRzbWRfY2FsX2ZsYWcsICRzbWRfY2Fs X2lkLCAkc21kX3llYXIsICRzbWRfbW9udGgsICRzbWRfd2VlaywgJHNtZF9kYXk7DQoNCgll eHRyYWN0KGxBdHRzKGFycmF5KA0KCQkndHlwZScgPT4gJ2ZsYWcnLCAvLyBmbGFnLCB5ZWFy LCBtb250aCwgd2VlaywgZGF5LCBjYWxpZCwgc2VjdGlvbiwgY2F0ZWdvcnksIGF1dGhvcg0K CQknam9pbicgPT4gJyAnLA0KCQknam9pbl9wcmVmaXgnID0+ICdTTURfQVVUTycsDQoJCSdo dG1sJyA9PiAwLA0KCQknZXNjYXBlJyA9PiAnaHRtbCcsDQoJKSwgJGF0dHMpKTsNCg0KCSRq b2luID0gKCRodG1sKSA/IGEgOiAkam9pbjsgLy8gaHRtbCBtb2RlIGZvcmNlcyBhbXBlcnNh bmQgam9pbg0KCSR0eXBlID0gZG9fbGlzdCgkdHlwZSk7DQoJJHJldCA9IGFycmF5KCk7DQoJ Zm9yZWFjaCAoJHR5cGUgYXMgJGl0ZW0pIHsNCgkJc3dpdGNoICgkaXRlbSkgew0KCQkJY2Fz ZSAiZmxhZyI6DQoJCQkJJHJldFtdID0gKCgkam9pbl9wcmVmaXg9PSJTTURfQVVUTyIpID8g JGpvaW4gOiAnJykuam9pbigkam9pbiwgJHNtZF9jYWxfZmxhZyk7DQoJCQkJYnJlYWs7DQoJ CQljYXNlICJ5ZWFyIjoNCgkJCQlpZiAoJHNtZF95ZWFyKSB7DQoJCQkJCSRyZXRbXSA9ICgo JGh0bWwpID8gJ3k9JyA6ICcnKSAuICRzbWRfeWVhcjsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJ CQljYXNlICJtb250aCI6DQoJCQkJaWYgKCRzbWRfbW9udGgpIHsNCgkJCQkJJHJldFtdID0g KCgkaHRtbCkgPyAnbT0nIDogJycpIC4gJHNtZF9tb250aDsNCgkJCQl9DQoJCQkJYnJlYWs7 DQoJCQljYXNlICJ3ZWVrIjoNCgkJCQlpZiAoJHNtZF93ZWVrKSB7DQoJCQkJCSRyZXRbXSA9 ICgoJGh0bWwpID8gJ3c9JyA6ICcnKSAuICRzbWRfd2VlazsNCgkJCQl9DQoJCQkJYnJlYWs7 DQoJCQljYXNlICJkYXkiOg0KCQkJCWlmICgkc21kX2RheSkgew0KCQkJCQkkcmV0W10gPSAo KCRodG1sKSA/ICdkPScgOiAnJykgLiAkc21kX2RheTsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJ CQljYXNlICJzZWN0aW9uIjoNCgkJCQlpZiAoJHByZXRleHRbJ3MnXSkgew0KCQkJCQkkcmV0 W10gPSAoKCRodG1sKSA/ICdzPScgOiAnJykgLiAkcHJldGV4dFsncyddOw0KCQkJCX0NCgkJ CQlicmVhazsNCgkJCWNhc2UgImNhdGVnb3J5IjoNCgkJCQlpZiAoJHByZXRleHRbJ2MnXSkg ew0KCQkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICdjPScgOiAnJykgLiAkcHJldGV4dFsnYydd Ow0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgImF1dGhvciI6DQoJCQkJaWYgKCR0aGlz YXJ0aWNsZSA9PSBOVUxMKSB7DQoJCQkJCSRjdXJyYXV0aG9yID0gJyc7DQoJCQkJfSBlbHNl IHsNCgkJCQkJJGN1cnJhdXRob3IgPSBhdXRob3IoYXJyYXkoKSk7DQoJCQkJfQ0KCQkJCWlm ICgkY3VycmF1dGhvcikgew0KCQkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICdhdXRob3I9JyA6 ICcnKSAuICRjdXJyYXV0aG9yOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgImNhbGlk IjoNCgkJCQlpZiAoJHNtZF9jYWxfaWQpIHsNCgkJCQkJJHJldFtdID0gKCgkaHRtbCkgPyAn Y2FsaWQ9JyA6ICcnKSAuICRzbWRfY2FsX2lkOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJfQ0K CX0NCgkkb3V0ID0gKCgkam9pbl9wcmVmaXg9PSJTTURfQVVUTyIpID8gKCgkaHRtbCkgPyAn PycgOiAnJykgOiAkam9pbl9wcmVmaXgpLmpvaW4oJGpvaW4sICRyZXQpOw0KCXJldHVybiAo JGVzY2FwZT09J2h0bWwnKSA/IGh0bWxzcGVjaWFsY2hhcnMoJG91dCkgOiAkb3V0Ow0KfQ0K DQpmdW5jdGlvbiBzbWRfY2FsX25vdygkYXR0cykgew0KCWdsb2JhbCAkZGF0ZWZvcm1hdDsN Cg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSdmb3JtYXQnID0+ICRkYXRlZm9ybWF0LA0K CQknZ210JyA9PiAnJywNCgkJJ2xhbmcnID0+ICcnLA0KCSksICRhdHRzKSk7DQoNCglyZXR1 cm4gc2FmZV9zdHJmdGltZSgkZm9ybWF0LCB0aW1lKCksICRnbXQsICRsYW5nKTsNCn0NCg0K Ly8gU2V0IHVzZXItZGVmaW5lZCBjbGFzc2VzIGZvciBhIGNlbGwNCmZ1bmN0aW9uIHNtZF9j YWxfY2xhc3MoJGF0dHMpIHsNCglnbG9iYWwgJHNtZF9jYWxfdWNsczsNCg0KCWV4dHJhY3Qo bEF0dHMoYXJyYXkoDQoJCSduYW1lJyA9PiAnJywNCgkpLCAkYXR0cykpOw0KDQoJJG5hbWUg PSBkb19saXN0KCRuYW1lKTsNCgkkc21kX2NhbF91Y2xzID0gYXJyYXlfbWVyZ2UoJHNtZF9j YWxfdWNscywgJG5hbWUpOw0KfQ0KDQovLyA8dHhwOmFydGljbGVfY3VzdG9tIC8+IHJlcGxh Y2VtZW50KGlzaCkgdGFnIHRoYXQgdW5kZXJzdGFuZHMgaG93IHRvIGhhbmRsZSByZWN1cnJp bmcgZXZlbnRzDQpmdW5jdGlvbiBzbWRfYXJ0aWNsZV9ldmVudCgkYXR0cywgJHRoaW5nPScn KSB7DQoJZ2xvYmFsICRwcmVmcywgJHByZXRleHQsICR0aGlzcGFnZTsNCg0KCWV4dHJhY3Qo bEF0dHMoYXJyYXkoDQoJCSd0aW1lJyA9PiAnYW55JywNCgkJJ3R5cGUnID0+ICdzdGFuZGFy ZCxyZWN1cixtdWx0aScsIC8vIHR5cGUgb2YgZXZlbnQgdG8gc2hvdw0KCQknZXhwaXJlZCcg PT4gJycsIC8vIDA9bm8sIDE9eWVzIHB1Ymxpc2ggZXhwaXJlZCBldmVudHMsIGVtcHR5PXVz ZSBwcmVmcw0KCQknaWQnID0+ICcnLA0KCQknY2F0ZWdvcnknID0+ICcnLA0KCQknc2VjdGlv bicgPT4gJycsDQoJCSdhdXRob3InID0+ICcnLA0KCQknc3RhdHVzJyA9PiAnbGl2ZScsDQoJ CSdzb3J0JyA9PiAnJywNCgkJJ2Zvcm0nID0+ICcnLA0KCQknc3RlcGZpZWxkJyA9PiAnJywN CgkJJ3NraXBmaWVsZCcgPT4gJycsDQoJCSdtb250aCcgPT4gJycsDQoJCSdmcm9tJyA9PiAn JywgLy8gc3RhcnQgZGF0ZQ0KCQkndG8nID0+ICcnLCAvLyBlbmQgZGF0ZQ0KCQknb2Zmc2V0 JyA9PiAwLA0KCQknbGltaXQnID0+ICcxMCcsDQoJCSdldmVudGxpbWl0JyA9PiAnMTAnLCAv LyBtYXggbnVtYmVyIG9mIHJlY3VycmluZyBldmVudHMgdG8gY3JlYXRlIHBlciByZWFsIGV2 ZW50DQoJCSdwYWdlYnknID0+ICcnLA0KCQkncGdvbmx5JyA9PiAnJywNCgkJJ3dyYXB0YWcn ID0+ICcnLA0KCQknYnJlYWsnID0+ICcnLA0KCQknY2xhc3MnID0+ICcnLA0KCQknZGVidWcn ID0+IDAsDQoJKSwgJGF0dHMpKTsNCg0KCS8vIEZpbHRlcnMNCgkkZmlsdFNRTCA9ICRzdWJT UUwgPSBhcnJheSgpOw0KCWlmKCRjYXRlZ29yeSkgew0KCQkkdG1wID0gZG9RdW90ZShqb2lu KCInLCciLCBkb1NsYXNoKGRvX2xpc3QoJGNhdGVnb3J5KSkpKTsNCgkJJGZpbHRTUUxbXSA9 ICcoIENhdGVnb3J5MSBJTiAoJy4kdG1wLicpIE9SIENhdGVnb3J5MiBJTiAoJy4kdG1wLicp ICknOw0KCX0NCglpZigkc2VjdGlvbikgew0KCQkkZmlsdFNRTFtdID0gJ1NlY3Rpb24gSU4g KCcuZG9RdW90ZShqb2luKCInLCciLCBkb1NsYXNoKGRvX2xpc3QoJHNlY3Rpb24pKSkpLicp JzsNCgl9DQoJaWYoJGF1dGhvcikgew0KCQkkZmlsdFNRTFtdID0gJ0F1dGhvcklEIElOICgn LmRvUXVvdGUoam9pbigiJywnIiwgZG9TbGFzaChkb19saXN0KCRhdXRob3IpKSkpLicpJzsN Cgl9DQoJaWYoJGlkKSB7DQoJCSRmaWx0U1FMW10gPSAnSUQgSU4gKCcuam9pbignLCcsIGFy cmF5X21hcCgnaW50dmFsJywgZG9fbGlzdCgkaWQpKSkuJyknOw0KCX0NCgkkdHlwZSA9IGRv X2xpc3QoJHR5cGUpOw0KCSRwYWdlYnkgPSAoZW1wdHkoJHBhZ2VieSkgPyAkbGltaXQgOiAk cGFnZWJ5KTsNCg0KCWZvcmVhY2ggKCR0eXBlIGFzICRldnR5cCkgew0KCQlzd2l0Y2goJGV2 dHlwKSB7DQoJCQljYXNlICdzdGFuZGFyZCc6DQoJCQkJaWYgKCRzdGVwZmllbGQpIHsNCgkJ CQkJJHN1YlNRTFtdID0gIigiLiRzdGVwZmllbGQuIiA9ICcnIEFORCBFeHBpcmVzID0gIi5O VUxMREFURVRJTUUuIikiOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgJ3JlY3VyJzoN CgkJCQlpZiAoJHN0ZXBmaWVsZCkgew0KCQkJCQkkc3ViU1FMW10gPSAiKCIuJHN0ZXBmaWVs ZC4iICE9ICcnKSI7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAnbXVsdGknOg0KCQkJ CWlmICgkc3RlcGZpZWxkKSB7DQoJCQkJCSRzdWJTUUxbXSA9ICIoIi4kc3RlcGZpZWxkLiIg PSAnJyBBTkQgRXhwaXJlcyAhPSAiLk5VTExEQVRFVElNRS4iKSI7DQoJCQkJfQ0KCQkJCWJy ZWFrOw0KCQl9DQoJfQ0KCWlmICgkc3ViU1FMKSB7DQoJCSRmaWx0U1FMW10gPSAnKCcuam9p bignIE9SICcsICRzdWJTUUwpLicpJzsNCgl9DQoNCgkkc3RhdHVzID0gKCRzdGF0dXMpID8g JHN0YXR1cyA6ICdsaXZlJzsgLy8gaW4gY2FzZSBzdGF0dXMgaGFzIGJlZW4gZW1wdGllZA0K CSRzdGF0dXMgPSBkb19saXN0KCRzdGF0dXMpOw0KCSRzdGF0aSA9IGFycmF5KCk7DQoJZm9y ZWFjaCAoJHN0YXR1cyBhcyAkc3RhdCkgew0KCQlpZiAoZW1wdHkoJHN0YXQpKSB7DQoJCQlj b250aW51ZTsNCgkJfSBlbHNlIGlmIChpc19udW1lcmljKCRzdGF0KSkgew0KCQkJJHN0YXRp W10gPSAkc3RhdDsNCgkJfSBlbHNlIHsNCgkJCSRzdGF0aVtdID0gZ2V0U3RhdHVzTnVtKCRz dGF0KTsNCgkJfQ0KCX0NCgkkZmlsdFNRTFtdID0gJ1N0YXR1cyBJTiAoJy5kb1F1b3RlKGpv aW4oIicsJyIsICRzdGF0aSkpLicpJzsNCg0KCSRleHBpcmVkID0gKCRleHBpcmVkKSA/ICRl eHBpcmVkIDogJHByZWZzWydwdWJsaXNoX2V4cGlyZWRfYXJ0aWNsZXMnXTsNCglpZiAoISRl eHBpcmVkKSB7DQoJCSRmaWx0U1FMW10gPSAnKG5vdygpIDw9IEV4cGlyZXMgT1IgRXhwaXJl cyA9ICcuTlVMTERBVEVUSU1FLicpJzsNCgl9DQoNCgkvLyBTb3J0aW5nIHJ1bGVzOiBkYXRh IGlzIHNvcnRlZCBvbmNlIGFzIGl0IGlzIGV4dHJhY3RlZCB2aWEgU1FMIGFuZCB0aGVuIGFn YWluIGFmdGVyIHRoZSBmYWtlIGRhdGVzIGhhdmUgYmVlbiBpbnNlcnRlZA0KCSRzb3J0ID0g KGVtcHR5KCRzb3J0KSkgPyAnUG9zdGVkIGFzYycgOiAkc29ydDsNCgkkc29ydCA9IGRvX2xp c3QoJHNvcnQpOw0KCSRzb3J0UHJlZml4ID0gIlNPUlRfIjsNCgkkc29ydE9yZGVyID0gYXJy YXkoKTsNCglmb3IgKCRpZHggPSAwOyAkaWR4IDwgY291bnQoJHNvcnQpOyAkaWR4KyspIHsN CgkJJHNvcnRpZXMgPSBleHBsb2RlKCcgJywgJHNvcnRbJGlkeF0pOw0KCQlpZiAoY291bnQo JHNvcnRpZXMpIDw9IDEpIHsNCgkJCSRzb3J0aWVzWzFdID0gImFzYyI7DQoJCX0NCgkJJHNv cnRpZXNbMV0gPSAkc29ydFByZWZpeC4oKCRzb3J0aWVzWzFdID09ICJkZXNjIikgPyAnREVT QycgOiAnQVNDJyk7DQoJCSRzb3J0T3JkZXJbXSA9IGFycmF5KCJieSIgPT4gJHNvcnRpZXNb MF0sICJkaXIiID0+ICRzb3J0aWVzWzFdKTsNCgl9DQoNCgkkZmlsdFNRTCA9IGpvaW4oJyBB TkQgJywgJGZpbHRTUUwpOw0KCSRmaWx0U1FMIC49ICcgT1JERVIgQlkgJy5qb2luKCcsJyxk b1NsYXNoKCRzb3J0KSk7DQoNCgkkZ3JhYkNvbHMgPSAnKiwgdW5peF90aW1lc3RhbXAoUG9z dGVkKSBhcyB1UG9zdGVkLCB1bml4X3RpbWVzdGFtcChMYXN0TW9kKSBhcyB1TGFzdE1vZCwg dW5peF90aW1lc3RhbXAoRXhwaXJlcykgYXMgdUV4cGlyZXMnOw0KCSRldmxpc3QgPSBzYWZl X3Jvd3MoJGdyYWJDb2xzLCAndGV4dHBhdHRlcm4nLCAkZmlsdFNRTCwgJGRlYnVnKTsNCg0K CWlmICgkZGVidWc+Mikgew0KCQllY2hvICIrKyBSRUNPUkQgU0VUICsrIjsNCgkJZG1wKCRl dmxpc3QpOw0KCX0NCgkkYWxsX2V2cyA9ICRldl90YWxseSA9IGFycmF5KCk7DQoJJG5vdyA9 IHRpbWUoKTsNCg0KCS8vIFBhc3MgMTogZXhwYW5kIGFueSByZWN1cnJpbmcgZGF0ZXMgYW5k IGNvbGxhdGUgYWxsIGV2ZW50cyB0aGF0IGZhbGwgd2l0aGluIHRoZSBhbGxvdGVkIHJhbmdl cw0KCWZvcmVhY2ggKCRldmxpc3QgYXMgJHJvdykgew0KCQkkZXZfcG9zdGVkID0gJHJvd1sn dVBvc3RlZCddOw0KCQkkZXZfZXhwaXJlcyA9ICRyb3dbJ3VFeHBpcmVzJ107DQoJCSRldl9k YXkgPSBkYXRlKCdqJywgJGV2X3Bvc3RlZCk7DQoJCSRldl9tb250aCA9IGRhdGUoJ20nLCAk ZXZfcG9zdGVkKTsNCgkJJGV2X3llYXIgPSBkYXRlKCdZJywgJGV2X3Bvc3RlZCk7DQoJCSRp Z25vcmUgPSBhcnJheSgpOw0KDQoJCS8vIEdlbmVyYXRlIGEgc2tpcCBhcnJheSBmb3IgdGhp cyBldmVudA0KCQlpZiAoJHNraXBmaWVsZCAmJiAkcm93WyRza2lwZmllbGRdICE9ICcnKSB7 DQoJCQkkaWdub3JlID0gZG9fbGlzdCgkcm93WyRza2lwZmllbGRdKTsNCgkJCWZvcmVhY2gg KCRpZ25vcmUgYXMgJGtleSA9PiAkdmFsKSB7DQoJCQkJJGlnbm9yZVska2V5XSA9IGRhdGUo ImQtTS1ZIiwgc3RydG90aW1lKCR2YWwpKTsgLy8gRm9yY2UgZWFjaCBkYXRlIHRvIGEga25v d24gZm9ybWF0DQoJCQl9DQoJCX0NCgkJaWYgKCRkZWJ1ZyA+IDEpIHsNCgkJCWVjaG8gJysr IElHTk9SRSBEQVRFUyArKyc7DQoJCQlkbXAoJGlnbm9yZSk7DQoJCX0NCg0KCQkvLyBEb2Vz IHRoZSBldmVudCBkZXNlcnZlIHRvIGJlIGluIHRoZSByZXN1bHRzPw0KCQlpZiAoc21kX2lu Y2x1ZGVfZXZlbnQoJGV2X3Bvc3RlZCwgJG5vdywgJGlnbm9yZSwgJHRpbWUsICRmcm9tLCAk dG8sICRtb250aCkpIHsNCgkJCSRhbGxfZXZzW10gPSAkcm93Ow0KCQkJJGV2X3RhbGx5WyRy b3dbJ1Bvc3RlZCddXSA9IChpc3NldCgkZXZfdGFsbHlbJHJvd1snUG9zdGVkJ11dKSkgPyAk ZXZfdGFsbHlbJHJvd1snUG9zdGVkJ11dKzEgOiAxOw0KCQl9DQoNCgkJaWYgKCRzdGVwZmll bGQgJiYgJHJvd1skc3RlcGZpZWxkXSAhPSAnJykgew0KCQkJJGZyZXEgPSBkb19saXN0KCRy b3dbJHN0ZXBmaWVsZF0pOw0KCQkJJG1vbnRobHkgPSBmYWxzZTsNCgkJCSRjdXJyc3RhbXAg PSAkZXZfcG9zdGVkOw0KCQkJJGN1cnJtb250aCA9ICRldl9tb250aDsNCgkJCSRjdXJyeWVh ciA9ICRldl95ZWFyOw0KCQkJZm9yZWFjaCAoJGZyZXEgYXMgJGludGVydmFsKSB7DQoJCQkJ JGZha2Vyb3cgPSAkcm93Ow0KCQkJCWZvcigkaWR4ID0gMDsgJGlkeCA8IDk5OTk5OyAkaWR4 KyspIHsNCgkJCQkJJGxhc3RhbXAgPSAkY3VycnN0YW1wOw0KCQkJCQlpZiAoKGlzc2V0KCRl dl90YWxseVskcm93WydQb3N0ZWQnXV0pICYmICgkZXZfdGFsbHlbJHJvd1snUG9zdGVkJ11d ID49ICRldmVudGxpbWl0KSkgfHwgKCR0byAmJiAkY3VycnN0YW1wID4gc3RydG90aW1lKCR0 bykpKSB7DQoJCQkJCQlicmVhazsNCgkJCQkJfQ0KCQkJCQkkaXZhbCA9IHN0cl9yZXBsYWNl KCI/bW9udGgiLCBkYXRlKCdGJywgZ21ta3RpbWUoMCwwLDAsJGN1cnJtb250aCwxKSksICRp bnRlcnZhbCk7DQoJCQkJCSRpdmFsID0gc3RyX3JlcGxhY2UoIj95ZWFyIiwgJGN1cnJ5ZWFy LCAkaW50ZXJ2YWwpOw0KCQkJCQlpZiAoc3RycG9zKCRpdmFsLCAibGFzdCIpID09PSAwKSB7 DQoJCQkJCQkkaXZhbCA9IGRhdGUoImwsIEYgalMgWSIsIHN0cnRvdGltZSgkaXZhbCwgbWt0 aW1lKDEyLCAwLCAwLCBkYXRlKCJuIixta3RpbWUoMCwwLDAsJGN1cnJtb250aCwxLCRjdXJy eWVhcikpKzEsIDEsICRjdXJyeWVhcikpKTsNCgkJCQkJCSRtb250aGx5ID0gdHJ1ZTsNCgkJ CQkJfSBlbHNlIGlmIChzdHJwb3MoJGl2YWwsICJmaXJzdCIpID09PSAwKSB7DQoJCQkJCQkk aXZhbCA9IGRhdGUoImwsIEYgalMgWSIsIHN0cnRvdGltZSgkaXZhbCwgbWt0aW1lKDEyLCAw LCAwLCAoKCRjdXJybW9udGg+MSkgPyAkY3Vycm1vbnRoLTEgOiAxMiksIGRhdGUoInQiLG1r dGltZSgwLDAsMCwkY3Vycm1vbnRoLTEsMSwoKCRjdXJybW9udGg9PTEpID8gJGN1cnJ5ZWFy LTE6ICRjdXJyeWVhcikpKSwgKCgkY3Vycm1vbnRoPT0xKSA/ICRjdXJyeWVhci0xOiAkY3Vy cnllYXIpKSkpOw0KCQkJCQkJJG1vbnRobHkgPSB0cnVlOw0KCQkJCQl9DQoJCQkJCWlmICgk bW9udGhseSkgew0KCQkJCQkJJGN1cnJzdGFtcCA9IHN0cnRvdGltZSgkaXZhbCk7DQoJCQkJ CX0gZWxzZSB7DQoJCQkJCQkkY3VycnN0YW1wID0gc3RydG90aW1lKCRpdmFsLCAkY3VycnN0 YW1wKTsNCgkJCQkJfQ0KCQkJCQlpZiAoJGN1cnJzdGFtcCAtICRsYXN0YW1wIDwgMCkgew0K CQkJCQkJYnJlYWs7IC8vIFBIUF9JTlRfTUFYIGV4Y2VlZGVkDQoJCQkJCX0NCgkJCQkJaWYg KCRjdXJyc3RhbXAgIT09IGZhbHNlKSB7DQoJCQkJCQlpZiAoJGRlYnVnID4gMSkgew0KCQkJ CQkJCWRtcCgiSU5URVJWQUw6ICIuICRjdXJyc3RhbXAgLiAnIC8vICcgLmRhdGUoJ2QtTS1Z IEg6aTpzJywgJGN1cnJzdGFtcCkpOw0KCQkJCQkJfQ0KDQoJCQkJCQlpZiAoKCRjdXJyc3Rh bXAgPCAkZXZfZXhwaXJlcyB8fCAkZXZfZXhwaXJlcyA9PSAnMCcpICYmICgkY3VycnN0YW1w ICE9ICRldl9wb3N0ZWQpKSB7DQoJCQkJCQkJJHNob3dfbWUgPSBzbWRfaW5jbHVkZV9ldmVu dCgkY3VycnN0YW1wLCAkbm93LCAkaWdub3JlLCAkdGltZSwgJGZyb20sICR0bywgJG1vbnRo KTsNCgkJCQkJCQlpZiAoJHNob3dfbWUpIHsNCgkJCQkJCQkJJGZha2Vyb3dbJ1Bvc3RlZCdd ID0gZGF0ZSgiWS1tLWQgSDppOnMiLCAkY3VycnN0YW1wKTsNCgkJCQkJCQkJJGZha2Vyb3db J3VQb3N0ZWQnXSA9ICRjdXJyc3RhbXA7DQoJCQkJCQkJCSRhbGxfZXZzW10gPSAkZmFrZXJv dzsNCgkJCQkJCQkJJGV2X3RhbGx5WyRyb3dbJ1Bvc3RlZCddXSA9IChpc3NldCgkZXZfdGFs bHlbJHJvd1snUG9zdGVkJ11dKSkgPyAkZXZfdGFsbHlbJHJvd1snUG9zdGVkJ11dKzEgOiAx Ow0KCQkJCQkJCX0NCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJYnJlYWs7DQoJCQkJCQl9DQoJ CQkJCX0NCgkJCQkJLy8gSW5jcmVtZW50IHRoZSBtb250aC95ZWFyIHJlYWR5IGZvciB0aGUg bmV4dCBpbnRlcnZhbA0KCQkJCQlpZiAoJG1vbnRobHkpIHsNCgkJCQkJCSRjdXJyeWVhciA9 ICgkY3Vycm1vbnRoPT0xMikgPyAkY3VycnllYXIrMSA6ICRjdXJyeWVhcjsNCgkJCQkJCSRj dXJybW9udGggPSAoJGN1cnJtb250aD09MTIpID8gMSA6ICRjdXJybW9udGgrMTsNCgkJCQkJ fQ0KCQkJCX0NCgkJCQlpZiAoJGRlYnVnPjEpIHsNCgkJCQkJaWYgKGlzc2V0KCRldl90YWxs eVskcm93WydQb3N0ZWQnXV0pKSB7DQoJCQkJCQlkbXAoIlRBTExZOiAiLiAkZXZfdGFsbHlb JHJvd1snUG9zdGVkJ11dKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCWlm ICgkZGVidWc+Mikgew0KCQllY2hvICIrKyBQUkUtU09SVEVEICsrIjsNCgkJZG1wKCRhbGxf ZXZzKTsNCgl9DQoNCgkvLyBNYWtlIHVwIGFuIGFycmF5X211bHRpc29ydCBhcmcgbGlzdCBh bmQgZXhlY3V0ZSBpdA0KCWZvcmVhY2goJGFsbF9ldnMgYXMgJGtleSA9PiAkcm93KSB7DQoJ CWZvcmVhY2ggKCRyb3cgYXMgJGlkZW50aWZpZXIgPT4gJGl0ZW0pIHsNCgkJCSR2YXJuYW1l ID0gImNvbF8iLiRpZGVudGlmaWVyOw0KCQkJJHskdmFybmFtZX1bJGtleV0gPSAkaXRlbTsN CgkJfQ0KCX0NCglmb3IgKCRpZHggPSAwOyAkaWR4IDwgY291bnQoJHNvcnRPcmRlcik7ICRp ZHgrKykgew0KCQkkc29ydGFyZ3NbXSA9ICckY29sXycuJHNvcnRPcmRlclskaWR4XVsnYnkn XTsNCgkJJHNvcnRhcmdzW10gPSAkc29ydE9yZGVyWyRpZHhdWydkaXInXTsNCgl9DQoJJHNv cnRpdCA9ICdhcnJheV9tdWx0aXNvcnQoJy5pbXBsb2RlKCIsICIsJHNvcnRhcmdzKS4nLCAk YWxsX2V2cyk7JzsNCglldmFsKCRzb3J0aXQpOw0KDQoJaWYgKCRkZWJ1Zz4yKSB7DQoJCWVj aG8gIisrIFBPU1QtU09SVEVEICsrIjsNCgkJZG1wKCRhbGxfZXZzKTsNCgl9DQoNCgkvLyBI YW5kbGUgcGFnaW5nDQoJJGdyYW5kX3RvdGFsID0gY291bnQoJGFsbF9ldnMpOw0KCSR0b3Rh bCA9ICRncmFuZF90b3RhbCAtICRvZmZzZXQ7DQoJJG51bVBhZ2VzID0gY2VpbCgkdG90YWwv JHBhZ2VieSk7DQoJJHBnID0gKCEkcHJldGV4dFsncGcnXSkgPyAxIDogJHByZXRleHRbJ3Bn J107DQoJJHBnb2Zmc2V0ID0gJG9mZnNldCArICgoJHBnIC0gMSkgKiAkcGFnZWJ5KTsNCgkv LyBzZW5kIHBhZ2luZyBpbmZvIHRvIHR4cDpuZXdlciBhbmQgdHhwOm9sZGVyDQoJJHBhZ2Vv dXRbJ3BnJ10gPSAkcGc7DQoJJHBhZ2VvdXRbJ251bVBhZ2VzJ10gPSAkbnVtUGFnZXM7DQoJ JHBhZ2VvdXRbJ3MnXSA9ICRwcmV0ZXh0WydzJ107DQoJJHBhZ2VvdXRbJ2MnXSA9ICRwcmV0 ZXh0WydjJ107DQoJJHBhZ2VvdXRbJ2dyYW5kX3RvdGFsJ10gPSAkZ3JhbmRfdG90YWw7DQoJ JHBhZ2VvdXRbJ3RvdGFsJ10gPSAkdG90YWw7DQoNCglpZiAoZW1wdHkoJHRoaXNwYWdlKSkN CgkJJHRoaXNwYWdlID0gJHBhZ2VvdXQ7DQoJaWYgKCRwZ29ubHkpDQoJCXJldHVybjsNCg0K CS8vIFBhc3MgMjogaXRlcmF0ZSBvdmVyIHRoZSBuZXcgYXJyYXkgb2JleWluZyBhbnkgb2Zm c2V0L2xpbWl0LiBBbnl0aGluZyBpbiB0aGUgcmFuZ2UgZ2V0cyBwb3B1bGF0ZWQgYW5kIHBh cnNlZA0KCSRvdXQgPSBhcnJheSgpOw0KCSRjdHIgPSAwOw0KCWFydGljbGVfcHVzaCgpOw0K CWZvcmVhY2ggKCRhbGxfZXZzIGFzICRpZHggPT4gJHJvdykgew0KCQlpZiAoJGlkeCA+PSAk cGdvZmZzZXQgJiYgJGN0ciA8ICRsaW1pdCkgew0KCQkJcG9wdWxhdGVBcnRpY2xlRGF0YSgk cm93KTsNCgkJCSRvdXRbXSA9ICgkdGhpbmcpID8gcGFyc2UoJHRoaW5nKSA6ICgoJGZvcm0p ID8gcGFyc2VfZm9ybSgkZm9ybSkgOiBocmVmKCRyb3dbJ1Bvc3RlZCddLCBwZXJtbGlua3Vy bCgkcm93KSwgJyB0aXRsZT0iJy4kcm93WydUaXRsZSddLiciJykgKTsNCgkJCSRjdHIrKzsN CgkJfQ0KCX0NCglhcnRpY2xlX3BvcCgpOw0KCXJldHVybiBkb1dyYXAoJG91dCwgJHdyYXB0 YWcsICRicmVhaywgJGNsYXNzKTsNCn0NCg0KLy8gQ2hlY2sgdGhlIHBhc3NlZCB0aW1lc3Rh bXAgYWdhaW5zdCBldmVyeSB0aW1lIHJlc3RyaWN0aW9uIGFuZCByZXR1cm4gdHJ1ZSBpZiBp dCBwYXNzZXMgdGhlbSBhbGwNCmZ1bmN0aW9uIHNtZF9pbmNsdWRlX2V2ZW50KCR0cywgJG5v dywgJGlnbiwgJHRpbWUsICRmcm9tLCAkdG8sICRtb250aCkgew0KCSRzaG93ID0gYXJyYXko KTsNCgkkc2hvd1tdID0gIWluX2FycmF5KGRhdGUoImQtTS1ZIiwgJHRzKSwgJGlnbik7DQoJ c3dpdGNoKCR0aW1lKSB7DQoJCWNhc2UgImFueSI6IGJyZWFrOw0KCQljYXNlICJmdXR1cmUi OiAkc2hvd1tdID0gKCR0cyA+ICRub3cpID8gdHJ1ZSA6IGZhbHNlOyBicmVhazsNCgkJZGVm YXVsdCA6ICRzaG93W10gPSAoJHRzIDwgJG5vdykgPyB0cnVlIDogZmFsc2U7IGJyZWFrOyAv LyBUaGUgcGFzdA0KCX0NCglpZiAoJGZyb20pIHsgJHNob3dbXSA9ICgkdHMgPj0gc3RydG90 aW1lKCRmcm9tKSkgPyB0cnVlIDogZmFsc2U7IH0NCglpZiAoJHRvKSB7ICRzaG93W10gPSAo JHRzIDw9IHN0cnRvdGltZSgkdG8pKSA/IHRydWUgOiBmYWxzZTsgfQ0KCWlmICgkbW9udGgp IHsgJHNob3dbXSA9IChkYXRlKCJZLW0iLCAkdHMpID09ICRtb250aCkgPyB0cnVlIDogZmFs c2U7IH0NCg0KCXJldHVybiAoIWluX2FycmF5KDAsICRzaG93KSkgPyB0cnVlIDogZmFsc2U7 DQp9IjtzOjQ6InR5cGUiO3M6MToiMCI7czo1OiJvcmRlciI7czoxOiI1IjtzOjQ6ImhlbHAi O3M6NTcxNDU6Igk8cD48ZGl2IGlkPSJzbWRfaGVscCI+PC9wPgoKCTxoMSBpZD0idG9wIj5z bWRfY2FsZW5kYXI8L2gxPgoKCTxwPlJlbmRlciBhIGNhbGVuZGFyIHdpdGggb25lIG9yIG1v cmUgYXJ0aWNsZXMgYXMgZXZlbnRzIG9uIGVhY2ggZGF5LiBVc2VmdWwgZm9yIGdpZyBndWlk ZXMsICYjODIyMDt3aGF0JiM4MjE3O3Mgb24mIzgyMjE7IG9yIHNjaGVkdWxpbmcuPC9wPgoK CTxoMiBpZD0iZmVhdHVyZXMiPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxpPkZ1bGwtc2l6 ZSBvciBtaW5pIGNhbGVuZGFyIGJ5IG1vbnRoIHdpdGggb3B0aW9uYWwgPHNwYW4gY2xhc3M9 ImNhcHMiPklTTzwvc3Bhbj4gd2VlayBkaXNwbGF5PC9saT4KCQk8bGk+TmF2aWdhdGlvbjog bmV4dC9wcmV2IG1vbnRoIG9yIG9wdGlvbmFsIGRyb3Bkb3duIG9mIG1vbnRoIC8geWVhci4g UGVybWl0dGVkIHllYXIgcmFuZ2UgY2FuIGJlIGRldGVybWluZWQgYnkgZmlyc3QvbGFzdCBh cnRpY2xlIG9yIGV4dGVuZGVkIGJ5ICsvLSBOIHllYXJzIGluIGVpdGhlciBkaXJlY3Rpb248 L2xpPgoJCTxsaT5PbmUgYXJ0aWNsZSA9IG9uZSBldmVudCwgbmF0aXZlIHRvIDxzcGFuIGNs YXNzPSJjYXBzIj5UWFA8L3NwYW4+IHdpdGggdGhlIFBvc3RlZCBkYXRlIGJlaW5nIHRoZSBk YXRlIGl0IGFwcGVhcnMgaW4gdGhlIGNhbGVuZGFyPC9saT4KCQk8bGk+RmlsdGVyIGV2ZW50 cyBieSBjYXRlZ29yeSAvIHNlY3Rpb24gLyBhdXRob3IgLyBzdGF0dXMgLyB0aW1lIG9yIGV4 cGlyeTwvbGk+CgkJPGxpPk5vbWluYXRlIGEgY3VzdG9tIGZpZWxkIHRvIHNwZWNpZnkgZXZl bnQgZnJlcXVlbmN5ICgxIHdlZWsgb3IgMTAgZGF5cyBvciAzIG1vbnRocywgZXRjKS4gTXVs dGlwbGUgZnJlcXVlbmNpZXMgY2FuIGJlIGdpdmVuPC9saT4KCQk8bGk+Tm9taW5hdGUgYSBj dXN0b20gZmllbGQgZm9yIGV4Y2x1c2lvbnMgKGEgbGlzdCBvZiBkYXRlcyBvbiB3aGljaCB0 aGF0IGV2ZW50IGlzIGNhbmNlbGxlZCkuIE9wdGlvbiB0byBlaXRoZXIgc2hvdyBjYW5jZWxs ZWQgZXZlbnRzIG9uIHRoYXQgZGF5IHNvIHlvdSBjYW4gc3R5bGUgdGhlbSBkaWZmZXJlbnRs eSwgb3IgcmVtb3ZlIHRoZW0gY29tcGxldGVseTwvbGk+CgkJPGxpPlNob3cgc3Bhbm5lZCBl dmVudHMgKG9uZXMgdGhhdCBsYXN0IG1vcmUgdGhhbiBhIGRheSkgYmFzZWQgb24gdGhlIGFy dGljbGXigJlzIGV4cGlyeS4gQW55IGV2ZW50IHRoYXQgZG9lcyA8c3BhbiBjbGFzcz0iY2Fw cyI+Tk9UPC9zcGFuPiByZWN1ciBhbmQgaGFzIGEgZnV0dXJlIGV4cGlyeSBjYW4gYmUgdHJl YXRlZCB0aGlzIHdheTwvbGk+CgkJPGxpPkZ1dHVyZSwgZXhwaXJlZCBvciBzdGlja3kgZXZl bnRzIG1heSBiZSBkaXNwbGF5ZWQgaWYgeW91IHdpc2g8L2xpPgoJCTxsaT5TcGVjaWZ5IGhv bGlkYXlzIG9uIGEgcGVyIGNhbGVuZGFyIGJhc2lzIChlaXRoZXIgcmVjdXJyaW5nIGV2ZW50 cyAmIzgyMTI7IHdpdGhvdXQgeWVhciAmIzgyMTI7IG9yIHNwZWNpZmljIGhvbGlkYXlzKS4g RGVmaW5lIHRoZSBsaXN0IGVpdGhlciBkaXJlY3RseSBpbiB0aGUgcGx1Z2luIGF0dHJpYnV0 ZSBvciBpbiBhIDxjb2RlPiZsdDt0eHA6dmFyaWFibGUgLyZndDs8L2NvZGU+IG9mIHlvdXIg Y2hvaWNlIGFuZCBkZWNpZGUgd2hpY2ggdHlwZXMgb2YgZXZlbnQgYXJlIHRvIGJlIGNhbmNl bGxlZCBkdWUgdG8gaG9saWRheXM8L2xpPgoJCTxsaT5FYWNoIGV2ZW50IGNhbiBiZSBwYXNz ZWQgdG8gYSBmb3JtL2NvbnRhaW5lciBzbyB5b3UgY2FuIGJ1aWxkIGl0IHlvdXIgd2F5LCBv ciB1c2UgdGhlIGJ1aWx0LWluIGh5cGVybGlua2VkIHRpdGxlLiBTcGFubmVkIGFuZC9vciBy ZWN1cnJpbmcgZXZlbnRzIGNhbiBiZSBzZW50IHRvIGEgc2VwYXJhdGUgZm9ybSBpZiB5b3Ug d2lzaC4gQWx0ZXJuYXRpdmVseSwgc2VuZCB0aGUgZW50aXJlIGNlbGwgdG8gYSBmb3JtIGFu ZCBzdHlsZSBpdCB5b3VyIHdheTwvbGk+CgkJPGxpPkNvbmRpdGlvbmFsIHRlc3RzIGZvciBm bGFncyAoc3RhbmRhcmQsIHJlY3VycmluZywgc3Bhbm5lZCwgY2FuY2VsbGVkLCBob2xpZGF5 cykgYW5kIGRhdGVzIHNvIHlvdSBjYW4gYnVpbGQgeW91ciBvd24gbG9naWMgaW4geW91ciBm b3Jtcy9jb250YWluZXI8L2xpPgoJCTxsaT5DbGFzcyBzb3VwOiB0YWJsZS0sIHJvdy0sIGNl bGwtLCBhbmQgZXZlbnQtbGV2ZWwgY2xhc3NlcyBmb3IgaW5kaWNhdGluZyBkaWZmZXJlbnQg c2NlbmFyaW9zIChzcGFubmVkIGV2ZW50LCByZWN1cnJpbmcgZXZlbnQsIGNhbmNlbGxlZCBl dmVudCwgZXRjKTsgY3VzdG9tIGNsYXNzZXMgY2FuIGJlIHNwZWNpZmllZCBiYXNlZCBvbiBh biBldmVudDwvbGk+CgkJPGxpPlRhZyB0byBkaXNwbGF5IHJlY3VycmluZyBldmVudHM8L2xp PgoJCTxsaT5UYWcgdG8gb3V0cHV0IHZhcmlvdXMgZXZlbnQgb3IgY2FsZW5kYXIgY2hhcmFj dGVyaXN0aWNzIChlLmcuIHRoZSBtb250aCwgeWVhciwgY2FsZW5kYXIgaWQsIHNlY3Rpb24g YW5kIHNvIG9uKTwvbGk+CgkJPGxpPlRhZyB0byBvdXRwdXQgdGhlIGN1cnJlbnQgZGF0ZS90 aW1lIChmb3JtYXR0ZWQgaG93IHlvdSBsaWtlKTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iYXV0 aG9yIj5BdXRob3IgLyBjcmVkaXRzPC9oMj4KCgk8cD48YSBocmVmPSJodHRwOi8vc3RlZmRh d3Nvbi5jb20vY29tbWVudEZvcm0iPlN0ZWYgRGF3c29uPC9hPi4gSm9pbnRseSBmdW5kZWQg YnkgZ2VuZXJvdXMgZG9uYXRvcnM6IG1yZGFsZSwgd29vZiwgamFrb2IsIHJlbm9iaXJkIGFu ZCBqb2ViYWljaC4gQmFzZWQgaGVhdmlseSBvbiBtZHBfY2FsZW5kYXIuIEFsbCBwcm9wcyB0 byB0aGUgb3JpZ2luYWwgYXV0aG9yIG9mIHRoZSBwbHVnaW4sIGFuZCBvZiBjb3Vyc2UgdGhl IGNsYXNzIHVwb24gd2hpY2ggdGhlIGNhbGVuZGFyIGlzIGJhc2VkLiBBbmQgbm90IGZvcmdl dHRpbmcgb3VyIGF3ZXNvbWUgVGV4dHBhdHRlcm4gZGV2cyB3aG8gY29udGludWUgdG8gcHVz aCB0aGlzIGxpdHRsZSA8c3BhbiBjbGFzcz0iY2FwcyI+Q01TPC9zcGFuPiB0byB0aGUgc3Rh cnMuPC9wPgoKCTxoMiBpZD0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRp b248L2gyPgoKCTxwIGNsYXNzPSJyZXF1aXJlZCI+UmVxdWlyZXMgVGV4dHBhdHRlcm4gNC4w LjcrPC9wPgoKCTxwPkRvd25sb2FkIHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIgPGEgaHJlZj0i aHR0cDovL3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zLzEwNTIvc21kX2NhbGVuZGFyIj50ZXh0 cGF0dGVybi5vcmc8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29t L3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNwYW4g Y2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gQWRtaW4gLSZndDsgUGx1Z2lucyBwYW5lLCBpbnN0 YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi4gVmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9m b3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yOTIwMCI+Zm9ydW0gdGhy ZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUgc3VjY2VzcyBvciBv dGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPHA+VG8gdW5pbnN0YWxsLCBzaW1wbHkg ZGVsZXRlIGZyb20gdGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFnZS48L3A+CgoJPGgyIGlk PSJuYW1pbmciPk5hbWluZyBjb252ZW50aW9uPC9oMj4KCgk8cD5CZWZvcmUgYmVnaW5uaW5n IHRoZXJlJiM4MjE3O3MgYSBsaXR0bGUgYml0IG9mIG5vbWVuY2xhdHVyZSB0byBnZXQgb3V0 IG9mIHRoZSB3YXk6PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNlbGw8 L3NwYW4+IDogYSBzcGVjaWZpYyBkYXkgb24gdGhlIGNhbGVuZGFyIGluIGEgcGFydGljdWxh ciBtb250aC95ZWFyPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmV2ZW50PC9zcGFu PiA6IGFuIGFydGljbGUuIEl0JiM4MjE3O3MgYmVzdCB0byBub21pbmF0ZSBhIGRlZGljYXRl ZCBzZWN0aW9uIGZvciBldmVudHMgc28gaXQga2VlcHMgdGhpbmdzIG5lYXRlciBvbiB5b3Vy IGNhbGVuZGFyIGJ1dCB5b3UgY2FuIHVzZSBldmVudHMgZnJvbSBtb3JlIHRoYW4gb25lIHNl Y3Rpb24gaWYgeW91IHdpc2guIEFueSBhcnRpY2xlIHdyaXR0ZW4gaW4gdGhlIGdpdmVuIHNl Y3Rpb24ocykgd2lsbCBhcHBlYXIgb24gdGhlIGNhbGVuZGFyIGFzIGxvbmcgYXMgaXRzIGV4 cGlyeSBoYXNuJiM4MjE3O3QgYmVlbiBtZXQuIE1vcmUgdGhhbiBvbmUgZXZlbnQgbWF5IGFw cGVhciBpbiBlYWNoIGNlbGw8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2VsbCBm bGFnPC9zcGFuPiA6IGVhY2ggY2VsbCBjYW4gZWl0aGVyIGJlIDxjb2RlPmVtcHR5PC9jb2Rl PiAoaS5lLiBubyBkYXRlOiBhIGZpbGxlciBhdCB0aGUgc3RhcnQvZW5kIG9mIHRoZSBtb250 aCksIGl0IGNhbiBiZSBhIHJlZ3VsYXIgZGF5IChubyBmbGFnKSwgaXQgY2FuIGNvbnRhaW4g YW4gPGNvZGU+ZXZlbnQ8L2NvZGU+LCBvciBpdCBtYXkgYmUgYSBob2xpZGF5ICg8YSBocmVm PSIjaG9saWRheXMiPmhvbHM8L2E+KTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5l dmVudCBmbGFnPC9zcGFuPiA6IGVhY2ggZXZlbnQgY2FuIGVpdGhlciBiZSBhIDxhIGhyZWY9 IiNldmVudHMiPnN0YW5kYXJkPC9hPiBldmVudCwgaXQgY2FuIDxhIGhyZWY9IiNyZWN1ciI+ cmVjdXI8L2E+LCBpdCBjYW4gc3BhbiBtb3JlIHRoYW4gb25lIGRheSAoPGEgaHJlZj0iI211 bHRpIj5tdWx0aTwvYT4pLCBvciBpdCBjYW4gYmUgdW5zY2hlZHVsZWQgKDxhIGhyZWY9IiNj YW5jZWwiPmNhbmNlbDwvYT4pPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNhbGlk PC9zcGFuPiA6IHlvdSBtYXkgcHV0IG1vcmUgdGhhbiBvbmUgY2FsZW5kYXIgb24gYSBwYWdl LiBJZiBzbywgZWFjaCBvbmUgbXVzdCBiZSB1bmlxdWVseSByZWZlcmVuY2VkIHdpdGggdGhp cyBjYWxlbmRhciBJRDwvbGk+Cgk8L3VsPgoKCTxwPkl0JiM4MjE3O3MgYWxzbyB3b3J0aCBi ZWFyaW5nIGluIG1pbmQgdGhlIDxhIGhyZWY9IiNkYXRlcyI+ZGF0ZSBjYXZlYXRzPC9hPiB0 aGF0IG1heSB3ZWxsIGJpdGUgeW91IGhhcmQuPC9wPgoKCTxoMiBpZD0idXNhZ2UiPlVzYWdl OiA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxlbmRhciAvJmd0OzwvY29kZT48L2gyPgoKCTxwPlB1 dCB0aGUgPGNvZGU+Jmx0O3R4cDpzbWRfY2FsZW5kYXIgLyZndDs8L2NvZGU+IHRhZyB3aGVy ZXZlciB5b3Ugd2FudCB5b3VyIGNhbGVuZGFyIHRvIGFwcGVhci4gVXNlIGFueSBvZiB0aGUg Zm9sbG93aW5nIGF0dHJpYnV0ZXMgdG8gY29udHJvbCBpdHMgb3V0cHV0IGRpc3BsYXkgYW5k IHVzZSB0aGUgPGEgaHJlZj0iI2F0dHN0eWxlcyI+c3R5bGUgYXR0cmlidXRlczwvYT4gdG8g ZGV0ZXJtaW5lIGhvdyB0byBhcHBseSBzdHlsZXMgdG8gdGhlIHZhcmlvdXMgZXZlbnRzIGFu ZCBjZWxscy48L3A+CgoJPGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0dHJpYnV0ZXMiPk1haW4g YXR0cmlidXRlczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2l6ZTwv c3Bhbj4gOiBjYWxlbmRhciBzaXplLCA8Y29kZT5sYXJnZTwvY29kZT4gb3IgPGNvZGU+c21h bGw8L2NvZGU+LiBUaGUgc21hbGwgaXMgbW9yZSBnZWFyZWQgdG93YXJkcyBhIG1pbmljYWws IGFsdGhvdWdoIGZ1bmN0aW9uYWxseSB0aGVyZSA8YSBocmVmPSIjc2l6ZWRpZmYiPmlzbiYj ODIxNzt0IG11Y2ggYmV0d2VlbiB0aGVtPC9hPi4gRGVmYXVsdDogPGNvZGU+bGFyZ2U8L2Nv ZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnRpbWU8L3NwYW4+IDogc2hvdyA8 Y29kZT5wYXN0PC9jb2RlPiwgPGNvZGU+ZnV0dXJlPC9jb2RlPiwgb3IgPGNvZGU+YW55PC9j b2RlPiBldmVudC4gRGVmYXVsdDogPGNvZGU+YW55PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5leHBpcmVkPC9zcGFuPiA6IGRlZmluaXRpdmVseSBoaWRlICg8Y29k ZT4wPC9jb2RlPikgb3Igc2hvdyAoPGNvZGU+MTwvY29kZT4pIGV4cGlyZWQgZXZlbnRzLiBM ZWF2ZSBibGFuayB0byB1c2UgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IEFk dmFuY2VkIFByZWZlcmVuY2UgPGNvZGU+UHVibGlzaCBleHBpcmVkIGFydGljbGVzPC9jb2Rl PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5maXJzdGRheTwvc3Bhbj4gOiB0aGUg MXN0IGRheSBvZiB0aGUgd2VlayB0byBzaG93IGluIHRoZSBjYWxlbmRhci4gMD1TdW5kYXks IDE9TW9uZGF5IGFuZCBzbyBvbiBkb3duIHRvIDY9U2F0dXJkYXkuIERlZmF1bHQ6IDxjb2Rl PjA8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmRheWZvcm1hdDwvc3Bh bj4gOiB0aGUgd2F5IGluIHdoaWNoIHRoZSBkYXkgbmFtZXMgYXJlIHJlbmRlcmVkLiBDaG9v c2UgZnJvbSBlaXRoZXIgPGNvZGU+QUJCUjwvY29kZT4gKHRoZSBkZWZhdWx0KSB0byBzaG93 IHRoZSBkYXlzIGFzIE1vbiwgVHVlLCBXZWQsIGV0YyBvciA8Y29kZT5GVUxMPC9jb2RlPiB0 byByZW5kZXIgdGhlaXIgZnVsbCBuYW1lcy4gQWx0ZXJuYXRpdmVseSwgc3VwcGx5IGFueSB2 YWxpZCA8YSBocmVmPSJodHRwOi8vdWsyLnBocC5uZXQvc3RyZnRpbWUiPnN0cmZ0aW1lKCk8 L2E+IGNvZGVzIHRvIHVzZSB0aGF0IGluc3RlYWQuIExvY2FsZS1zcGVjaWZpYyBuYW1lcyBh cmUgcmV0dXJuZWQuPGRpdiBjbGFzcz0iYnJlYWsiPkZpbmFsbHksIGlmIHlvdSByZWFsbHkg ZG9uJiM4MjE3O3QgbGlrZSBhbnkgb2YgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3Nw YW4+IGRpc3BsYXkgbWV0aG9kcyB5b3UgY2FuIGhhcmQtY29kZSB5b3VyIG93bi4gV3JpdGUg ZWFjaCBlbnRyeSBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IHN1cnJvdW5kZWQgYnkgPGNv ZGU+e308L2NvZGU+IGJyYWNrZXRzLiBTbywgaWYgeW91IHdhbnRlZCB0d28tbGV0dGVyIEdl cm1hbiB3ZWVrIGRheXMgeW91IGNvdWxkIHVzZTogPGNvZGU+ZGF5Zm9ybWF0PSZxdW90O3tT byxNbyxEaSxNaSxEbyxGcixTYX0mcXVvdDs8L2NvZGU+LiBUaGUgZmlyc3QgZGF5IGluIHRo ZSBsaXN0IDxzdHJvbmc+bXVzdDwvc3Ryb25nPiBiZSBhIFN1bmRheSBvciB0aGluZ3Mgd2ls bCBnZXQgbWlnaHR5IGJpemFycmU8L2Rpdj48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+bW9udGhmb3JtYXQ8L3NwYW4+IDogdGhlIHdheSBpbiB3aGljaCB0aGUgbW9udGggbmFt ZXMgYXJlIHJlbmRlcmVkLiBDaG9vc2UgZnJvbSBlaXRoZXIgPGNvZGU+RlVMTDwvY29kZT4g KHRoZSBkZWZhdWx0KSB0byBzaG93IHRoZSBmdWxsIG1vbnRoIG5hbWVzIG9yIDxjb2RlPkFC QlI8L2NvZGU+IHRvIHJlbmRlciB0aGVpciBhYmJyZXZpYXRlZCBuYW1lcy4gQWx0ZXJuYXRp dmVseSwgc3VwcGx5IGFueSB2YWxpZCA8YSBocmVmPSJodHRwOi8vdWsyLnBocC5uZXQvc3Ry ZnRpbWUiPnN0cmZ0aW1lKCk8L2E+IGNvZGVzIHRvIHVzZSB0aGF0IGluc3RlYWQuIExvY2Fs ZS1zcGVjaWZpYyBuYW1lcyBhcmUgcmV0dXJuZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+c2VsZWN0PC9zcGFuPiA6IHVzZSBhIHNlbGVjdCBkcm9wZG93biBmb3IgcmFwaWQg YWNjZXNzIHRvIHdlZWtzLCBtb250aHMgb3IgeWVhcnMgaW5zdGVhZCBvZiByZW5kZXJpbmcg anVzdCB0aGUgbmFtZXMuIERlZmF1bHQ6IHVuc2V0LCBidXQgeW91IG1heSBtYWtlIGEgKGNv bW1hLXNlcGFyYXRlZCkgbGlzdCBmcm9tIGVpdGhlciA8Y29kZT53ZWVrPC9jb2RlPiAvIDxj b2RlPm1vbnRoPC9jb2RlPiBvciA8Y29kZT55ZWFyPC9jb2RlPi4gKHdlZWsgYW5kIG1vbnRo IGFyZSBtdXR1YWxseSBleGNsdXNpdmUpLiBOb3RlIHRoYXQgd2hlbiB1c2luZyA8Y29kZT53 ZWVrPC9jb2RlPiwgdGhlIHBsdWdpbiBtYWtlcyBhbiBlZHVjYXRlZCBndWVzcyBhdCB0aGUg bW9udGggYW5kIG1heSBub3QgZ2V0IGl0IHJpZ2h0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPnNlbGVjdGJ0bjwvc3Bhbj4gOiBieSBkZWZhdWx0LCB0aGUgc2VsZWN0IGRyb3Bk b3ducyB3aWxsIGF1dG8tc3VibWl0IHdoZW4gdGhleSBhcmUgY2hhbmdlZC4gSWYgeW91IHBy ZWZlciBhIGRlZGljYXRlZCBzdWJtaXQgYnV0dG9uLCBnaXZlIHRoZSB0ZXh0IHlvdSB3aXNo IHRvIGFwcGVhciBvbiB0aGUgYnV0dG9uIGhlcmUuIFRoZSBidXR0b24gaGFzIGEgZml4ZWQg Y2xhc3Mgb2YgPGNvZGU+c21kX2NhbF9pbnB1dDwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+aXNvd2Vla3M8L3NwYW4+IDogc2hvdyB0aGUgPHNwYW4gY2xhc3M9ImNh cHMiPklTTzwvc3Bhbj4gd2VlayBudW1iZXJzIGFzIGEgY29sdW1uIGF0IHRoZSBzdGFydCBv ZiB0aGUgY2FsZW5kYXIuIEFueSB0ZXh0IGluIHRoaXMgYXR0cmlidXRlIGVuYWJsZXMgdGhl IGZlYXR1cmUsIGFuZCB5b3VyIHRleHQgYmVjb21lcyB0aGUgaGVhZGluZyBvZiB0aGUgPHNw YW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlayBjb2x1bW4uIFlvdSBtYXkgb3B0aW9u YWxseSBvdmVycmlkZSB0aGUgZGVmYXVsdCB3ZWVrIG51bWJlciBkaXNwbGF5ZWQgaW4gZWFj aCBjZWxsIGJ5IGFkZGluZyBhIGNvbW1hIGFuZCBzb21lIHRleHQ7IHdoYXRldmVyIHlvdSBl bnRlciB3aWxsIGJlIHB1dCBpbiBlYWNoIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+ IHdlZWsgY2VsbC4gVXNlIHRoZSByZXBsYWNlbWVudCBjb2RlIDxjb2RlPnt3ZWVrfTwvY29k ZT4gaW4geW91ciBtYXJrdXAgdG8gaW5zZXJ0IHRoZSBjdXJyZW50IHdlZWsgbnVtYmVyLiA8 ZGl2IGNsYXNzPSJicmVhayI+RXhhbXBsZTogPGNvZGU+aXNvd2Vla3M9JnF1b3Q7d2ssICN7 d2Vla30mcXVvdDs8L2NvZGU+IHdpbGwgcmVuZGVyICYjODIxNjt3ayYjODIxNzsgYXQgdGhl IHRvcCBvZiB0aGUgY29sdW1uIGFuZCBzb21ldGhpbmcgbGlrZSA8Y29kZT4jMjQ8L2NvZGU+ LCA8Y29kZT4jMjU8L2NvZGU+LCA8Y29kZT4jMjY8L2NvZGU+JiM4MjMwOyBhdCB0aGUgc3Rh cnQgb2YgZWFjaCB3ZWVrIHJvdy4gSWYgdGhlIGF0dHJpYnV0ZSBiZWdpbnMgd2l0aCBhIGNv bW1hIChpLmUgdGhlIGZpcnN0IGl0ZW0gaXMgb21pdHRlZCksIHRoZXJlIHdpbGwgYmUgbm8g Y29sdW1uIGhlYWRpbmcuPC9kaXY+PGRpdiBjbGFzcz0iYnJlYWsiPk5vdGUgdGhhdCBpZiB0 aGUgaXNvd2Vla3MgZmVhdHVyZSBpcyBlbmFibGVkLCA8Y29kZT5maXJzdGRheTwvY29kZT4g d2lsbCBiZSBmb3JjZWQgdG8gc3RhcnQgb24gYSBNb25kYXkgYXMgZ292ZXJuZWQgYnkgdGhl IDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHNwZWNpZmljYXRpb24uIERlZmF1bHQ6 IHVuc2V0PC9kaXY+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnN0YXR1czwvc3Bh bj4gOiBldmVudHMgaW4gdGhpcyBsaXN0IG9mIHN0YXR1cyBhcmUgcHVibGlzaGVkLiBEZWZh dWx0OiA8Y29kZT5saXZlPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5j YXRlZ29yeTwvc3Bhbj4gOiBmaWx0ZXIgZXZlbnRzIGJ5IHRoaXMgbGlzdCBvZiBjYXRlZ29y aWVzLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zZWN0 aW9uPC9zcGFuPiA6IGZpbHRlciBldmVudHMgYnkgdGhpcyBsaXN0IG9mIHNlY3Rpb25zLiBE ZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5hdXRob3I8L3Nw YW4+IDogZmlsdGVyIGV2ZW50cyBieSB0aGlzIGF1dGhvciBSZWFsIE5hbWUuIERlZmF1bHQ6 IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmlkPC9zcGFuPiA6IHRoZSA8 c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gSUQgdG8gYXBwbHkgdG8gdGhlIHRhYmxl IHRoYXQgaG9sZHMgdGhlIGNhbGVuZGFyLiBUaGlzIGlzIHRoZSB2YWx1ZSBvZiB0aGUgPHNw YW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdmFyaWFibGUgPGNvZGU+Y2FsaWQ8L2NvZGU+ IGFuZCBpdHMgZGVmYXVsdCBpcyB1bnNldC4gRWFjaCBjYWxlbmRhciBvbiBhIHBhZ2UgPGEg aHJlZj0iI25hbWluZyI+bXVzdCBiZSB1bmlxdWU8L2E+PC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPm5hdmlkPC9zcGFuPiA6IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwv c3Bhbj4gSUQgdG8gYXBwbHkgdG8gdGhlIHByZXYvbmV4dC9tb250aC95ZWFyIG5hdmlnYXRp b24gZm9ybS4gSWYgdXNlZCwgZWFjaCBjYWxlbmRhciBvbiBhIHBhZ2UgbXVzdCBoYXZlIGEg dW5pcXVlIG5hdmlkLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5uYXZhcnJvdzwvc3Bhbj4gOiBjb21tYS1zZXBhcmF0ZWQgcGFpciBvZiBpdGVtcyB5 b3Ugd2FudCB0byBhcHBlYXIgYXMgcHJldi9uZXh0IGFycm93cyBpbiB0aGUgY2FsZW5kYXIu IERlZmF1bHQ6IDxjb2RlPiZhbXA7IzYwOywgJmFtcDsjNjI7PC9jb2RlPjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5tb250aDwvc3Bhbj4gOiBzdGFydCB0aGUgY2FsZW5kYXIg b24gdGhpcyBtb250aCBmcm9tIDEgKEphbnVhcnkpIHRvIDEyIChEZWNlbWJlcikuIE5vcm1h bCBjYWxlbmRhciBuYXZpZ2F0aW9uIG92ZXJyaWRlcyB0aGlzIHZhbHVlLiBJZiA8Y29kZT5z dGF0aWM8L2NvZGU+IGlzIHVzZWQsIHRoaXMgbW9udGggYmVjb21lcyB0aGUgb25seSBvbmUg eW91IG1heSB2aWV3LiBJZiB1bnNldCwgYW5kIG5vIDxjb2RlPm09PC9jb2RlPiB2YWx1ZSBh cHBlYXJzIG9uIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBsaW5lLCB0aGUg Y3VycmVudCBtb250aCBpcyB1c2VkPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPndl ZWs8L3NwYW4+IDogc3RhcnQgdGhlIGNhbGVuZGFyIGR1cmluZyB0aGUgbW9udGggY29udGFp bmluZyB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHdlZWsgKGZyb20gMSB0 byA1MykuIElnbm9yZWQgaWYgPGNvZGU+c3RhdGljPC9jb2RlPiBvciBvbmUgb2YgdGhlIGNh bGVuZGFyIG5hdmlnYXRpb24gY29udHJvbHMgaXMgdXNlZC4gSWYgYSA8Y29kZT53PTwvY29k ZT4gdmFsdWUgYXBwZWFycyBvbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4g bGluZSwgdGhlIGdpdmVuIHdlZWsgb3ZlcnJpZGVzIGFueSBtb250aCB2YWx1ZTwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj55ZWFyPC9zcGFuPiA6IHN0YXJ0IHRoZSBjYWxlbmRh ciBhdCB0aGlzIDQtZGlnaXQgeWVhci4gTm9ybWFsIGNhbGVuZGFyIG5hdmlnYXRpb24gb3Zl cnJpZGVzIHRoaXMgdmFsdWUuIElmIDxjb2RlPnN0YXRpYzwvY29kZT4gaXMgdXNlZCwgdGhp cyB5ZWFyIGJlY29tZXMgdGhlIG9ubHkgb25lIHlvdSBtYXkgdmlldy4gSWYgdW5zZXQsIGFu ZCBubyA8Y29kZT55PTwvY29kZT4gdmFsdWUgYXBwZWFycyBvbiB0aGUgPHNwYW4gY2xhc3M9 ImNhcHMiPlVSTDwvc3Bhbj4gbGluZSwgdGhlIGN1cnJlbnQgeWVhciBpcyB1c2VkPC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnllYXJ3aWR0aDwvc3Bhbj4gOiBhIGNvbW1hLXNl cGFyYXRlZCBsaXN0IHRoYXQgc3BlY2lmaWVzIGhvdyBtYW55IHllYXJzIHlvdXIgY2FsZW5k YXIgc3BhbnMuIEJ5IGRlZmF1bHQgaXQgaXMgPGNvZGU+MCwwPC9jb2RlPiB3aGljaCB1c2Vz IHRoZSBlYXJsaWVzdCAocG9zdGVkKSBldmVudCBpbiB0aGUgc2VjdGlvbiBhcyB0aGUgbG93 ZXN0IHllYXIgYW5kIHRoZSBsYXRlc3QgKG1vZGlmaWVkKSBldmVudCBpbiB0aGUgc2VjdGlv biBhcyB0aGUgbGF0ZXN0IHllYXIuIFlvdSB3aWxsIG5vdCBiZSBwZXJtaXR0ZWQgdG8gbmF2 aWdhdGUgdGhlIGNhbGVuZGFyIG91dHNpZGUgdGhpcyByYW5nZS4gVG8gd2lkZW4gdGhlIHJh bmdlLCBzcGVjaWZ5IHNvbWUgdmFsdWVzLCBmb3IgZXhhbXBsZSA8Y29kZT55ZWFyd2lkdGg9 JnF1b3Q7Miw0JnF1b3Q7PC9jb2RlPiB3aWxsIHN1YnRyYWN0IDIgd2hvbGUgeWVhcnMgZnJv bSB0aGUgZWFybGllc3QgZXZlbnQgYW5kIGFkZCA0IHdob2xlIHllYXJzIHRvIHRoZSBsYXRl c3QgZXZlbnQuIElmIHlvdSBzcGVjaWZ5IGEgc2luZ2xlIG51bWJlciwgdGhhdCB2YWx1ZSB3 aWxsIGJlIHVzZWQgdG8gZXhwYW5kIHRoZSByYW5nZSBlcXVhbGx5IGluIGJvdGggZGlyZWN0 aW9uczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5mb3JtPC9zcGFuPiA6IHVzZSB0 aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGZvcm0gdG8gcHJvY2VzcyBlYWNo IGV2ZW50LiBJZiB0aGUgY2FsZW5kYXIgdGFnIGlzIHVzZWQgYXMgYSBjb250YWluZXIgaXQg d2lsbCBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhlIGZvcm0uIElmIG5laXRoZXIgYXJl IHVzZWQsIHRoZSBkZWZhdWx0IGZvciBhIGxhcmdlIGNhbGVuZGFyIGlzIGEgaHlwZXJsaW5r ZWQgYXJ0aWNsZSB0aXRsZS4gVGhlIHNtYWxsIGNhbGVuZGFyIHJlbmRlcnMgYW4gZW1wdHkg ZXZlbnQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c3BhbmZvcm08L3NwYW4+IDog eW91IG1heSBlbGVjdCB0byByZW5kZXIgc3Bhbm5lZCBldmVudHMgZGlmZmVyZW50bHkgdG8g c3RhbmRhcmQgZXZlbnRzLiBCeSBkZWZhdWx0IHRoZXkgdXNlIHRoZSBzYW1lIDxjb2RlPmZv cm08L2NvZGU+IGJ1dCAmIzgyMTI7IGlmIG5laXRoZXIgdGhhdCBub3IgdGhlIGNvbnRhaW5l ciBhcmUgc3BlY2lmaWVkICYjODIxMjsgd2lsbCBiZSByZW5kZXJlZCBhcyBhIGh5cGVybGlu a2VkIHJpZ2h0LWFycm93IHRvIGluZGljYXRlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlv dXMgZGF5JiM4MjE3O3MgZXZlbnQuIE5vdGUgdGhlIGZpcnN0IGRheSBvZiBhIHNwYW5uZWQg c2V0IGlzIDxlbT5ub3Q8L2VtPiBwYXNzZWQgdG8gdGhlIDxjb2RlPnNwYW5mb3JtPC9jb2Rl Pjsgb25seSBjb250aW51YXRpb24gY2VsbHMgYXJlIHBhc3NlZCB0byBpdDwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5yZWN1cmZvcm08L3NwYW4+IDogc2ltaWxhcmx5IHRvIDxj b2RlPnNwYW5mb3JtPC9jb2RlPiB5b3UgbWF5IGVsZWN0IHRvIHJlbmRlciByZWN1cnJpbmcg ZXZlbnRzIGRpZmZlcmVudGx5IHRvIHN0YW5kYXJkIGV2ZW50cy4gQnkgZGVmYXVsdCB0aGV5 IHVzZSB0aGUgc2FtZSA8Y29kZT5mb3JtPC9jb2RlPiAob3IgY29udGFpbmVyKSBhcyBzdGFu ZGFyZCBldmVudHMgYW5kIHRoZSBmaXJzdCBldmVudCBvZiBhIHJlY3VycmluZyBzZXQgaXMg bm90IHBhc3NlZCB0byA8Y29kZT5yZWN1cmZvcm08L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPmNlbGxmb3JtPC9zcGFuPiAoPHNwYW4gY2xhc3M9InJlcXVpcmVkIj5v bmx5IG9uIGxhcmdlIGNhbGVuZGFyczwvc3Bhbj4pIDogdXNlIHRoaXMgaWYgeW91IHdpc2gg dG8gYnVpbGQgZWFjaCBjZWxsIGVudGlyZWx5IGZyb20gc2NyYXRjaC4gSXQgd29ya3MgZGlm ZmVyZW50bHkgdG8gdGhlIG90aGVyIGZvcm0gYXR0cmlidXRlcyBpbiB0aGF0IGl0IDxlbT5t dXN0PC9lbT4gYmUgYSBmb3JtIGFuZCBjYW5ub3QgdXNlIHRoZSBjb250YWluZXIuIFRoZXJl IGFyZSBhbHNvIHNvbWUgPGEgaHJlZj0iI2NlbGxmb3JtIj5yZXBsYWNlbWVudCB2YXJpYWJs ZXM8L2E+IHlvdSBjYW4gdXNlIHRvIGluc2VydCBkeW5hbWljIHBpZWNlcyBvZiBpbmZvcm1h dGlvbiBpbiB5b3VyIGNlbGxzPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnN0ZXBm aWVsZDwvc3Bhbj4gOiB0aGUgSUQgb2YgYSBmaWVsZCB3aXRoaW4gd2hpY2ggYW4gZXZlbnQg bWF5IGJlIHRvbGQgdG8gcmVwZWF0LiBOb3RlIGl0IGlzIHRoZSBmaWVsZCYjODIxNztzIElE IG5vdCBpdHMgbmFtZSwgc28gZm9yIGN1c3RvbSBmaWVsZHMgeW91IG11c3QgdXNlIDxjb2Rl PmN1c3RvbV8xPC9jb2RlPiBvciA8Y29kZT5jdXN0b21fMjwvY29kZT4gZXRjLiBXaXRob3V0 IHRoaXMgYXR0cmlidXRlIChpdHMgZGVmYXVsdCksIG5vIHJlY3VycmluZyBldmVudHMgbWF5 IGJlIGRlZmluZWQuIFNlZSA8YSBocmVmPSIjcmVjdXIiPnJlY3VycmluZyBldmVudHM8L2E+ PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNraXBmaWVsZDwvc3Bhbj4gOiB0aGUg SUQgb2YgYSBmaWVsZCBmcm9tIHdoaWNoIGFydGljbGVzIG1heSBiZSBjYW5jZWxsZWQgaWYg cmVxdWlyZWQuIEFzIGFib3ZlLCB0aGlzIGlzIHRoZSBJRCAobm90IG5hbWUpIG9mIHRoZSBm aWVsZC4gU3BlY2lmeSBhIGxpc3Qgb2YgZGF0ZXMgb24gd2hpY2ggdGhpcyBldmVudCB3aWxs IGJlIGNhbmNlbGxlZC4gU2VlIDxhIGhyZWY9IiNjYW5jZWwiPmNhbmNlbGxpbmcgZXZlbnRz PC9hPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zaG93c2tpcHBlZDwvc3Bhbj4g OiB3aGVuIGFuIGV2ZW50IGlzIGNhbmNlbGxlZCB5b3UgY2FuIHJlbW92ZSBpdCBmcm9tIHRo ZSBjYWxlbmRhciAoPGNvZGU+MDwvY29kZT4pIG9yIHNob3cgaXQgKDxjb2RlPjE8L2NvZGU+ KS4gRGVmYXVsdDogPGNvZGU+MDwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+c2hvd3NwYW5uZWQ8L3NwYW4+IDogZXZlbnRzIHdpdGggZXhwaXJ5IHRpbWVzIGxhdGVy IHRoYW4gdGhlaXIgcG9zdGVkIGRhdGUgbWF5IGJlIHJlbmRlcmVkIGFjcm9zcyBtdWx0aXBs ZSBjZWxscy4gSWYgeW91IGRvIG5vdCB3YW50IHRoaXMgZmVhdHVyZSB5b3UgY2FuIHR1cm4g aXQgb2ZmICg8Y29kZT4wPC9jb2RlPikuIERlZmF1bHQ6IDxjb2RlPjE8L2NvZGU+PC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmhvbGlkYXlzPC9zcGFuPiA6IGxpc3Qgb2YgZGF0 ZXMgdGhhdCBhcmUgZGVjcmVlZCBhcyA8YSBocmVmPSIjaG9saWRheXMiPmhvbGlkYXlzPC9h Pi4gRXZlbnRzIGNhbiBiZSBzY2hlZHVsZWQgb24gaG9saWRheXMgYnV0IG1heSBub3QgcmVj dXIgb3Igc3BhbiBhIGhvbGlkYXkgdW5sZXNzIHlvdSBleHBsaWNpdGx5IHNheSBzbyB2aWEg dGhlIDxjb2RlPmhvbGlkYXlmbGFnczwvY29kZT4gYXR0cmlidXRlLiBZb3VyIGxpc3Qgb2Yg ZGF0ZXMgbWF5IGJlIGRlZmVycmVkIHRvIGEgPGNvZGU+Jmx0O3R4cDp2YXJpYWJsZSAvJmd0 OzwvY29kZT4sIGluIHdoaWNoIGNhc2UgZGVmaW5lIHlvdXIgbGlzdCBpbiBhIG5hbWVkIHZh cmlhYmxlIGFuZCB1c2UgPGNvZGU+aG9saWRheXM9JnF1b3Q7dHhwdmFyOm15X3Zhcl9uYW1l JnF1b3Q7PC9jb2RlPiB0byByZWFkIHRoZW0gaW50byB0aGUgcGx1Z2luPC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPmhvbGlkYXlmbGFnczwvc3Bhbj4gOiBwZXJtaXQgY2VydGFp biA8YSBocmVmPSIjbmFtaW5nIj5ldmVudCBmbGFnczwvYT4gdG8gYmUgc2NoZWR1bGVkIG9u IGhvbGlkYXlzLiBEZWZhdWx0OiA8Y29kZT5zdGFuZGFyZDwvY29kZT4gKGkuZS4gc3RhbmRh cmQgb25lLW9mZiBldmVudHMpIGJ1dCBvdGhlcnMgbWF5IGJlIGxpc3RlZCBhcyB3ZWxsLiBD aG9vc2UgZnJvbSA8Y29kZT5zdGFuZGFyZDwvY29kZT4sIDxjb2RlPnJlY3VyPC9jb2RlPiBv ciA8Y29kZT5tdWx0aTwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGlu a3Bvc3RlZDwvc3Bhbj4gKDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+b25seSBvbiBzbWFsbCBj YWxlbmRhcnM8L3NwYW4+KSA6IGVhY2ggY2VsbCB0aGF0IGNvbnRhaW5zIGFuIDxhIGhyZWY9 IiNuYW1pbmciPmV2ZW50IGZsYWc8L2E+IG9mIHRoZSBnaXZlbiB0eXBlKHMpIHdpbGwgaGF2 ZSBpdHMgZGF5IG51bWJlciBsaW5rZWQgdG8gdGhlIGV2ZW50JiM4MjE3O3MgdHJ1ZSBzdGFy dCBkYXRlIGluc3RlYWQgb2YgdGhlIGNlbGwmIzgyMTc7cyBkYXRlLiBUaHVzLCBpZiB5b3Ug aGF2ZSBhIHdlZWtseSBldmVudCB0aGF0IHN0YXJ0cyBvbiB0aGUgMjB0aCBEZWNlbWJlciAy MDA4LCBzZXR0aW5nIDxjb2RlPmxpbmtwb3N0ZWQ9JnF1b3Q7cmVjdXImcXVvdDs8L2NvZGU+ IHdpbGwgY2F1c2UgdGhlIGxpbmsgdG8gc2hvdyA8Y29kZT5kYXRlPTIwMDgtMTItMjA8L2Nv ZGU+IGVhY2ggd2Vlay4gVGhpcyBhbGxvd3MgeW91IHRvIGFsd2F5cyBsaW5rIHRvIGEgdmFs aWQgYXJ0aWNsZS9ldmVudC4gV2l0aG91dCBsaW5rcG9zdGVkLCB0aGUgZGF0ZXMgd291bGQg YmUgMjAwOC0xMi0yMCwgMjAwOC0xMi0yNywgMjAwOS0wMS0wMywgYW5kIHNvIG9uLiBEZWZh dWx0OiA8Y29kZT5yZWN1ciwgbXVsdGksIG11bHRpcHJldiwgbXVsdGlsYXN0PC9jb2RlPiAo aS5lLiBhbnkgcmVjdXJyaW5nIG9yIHNwYW5uZWQgZXZlbnQpLiBOb3RlIHRoYXQgaWYgbW9y ZSB0aGFuIG9uZSBldmVudCBvY2N1cnMgaW4gdGhlIGNlbGwsIHRoZSBsaW5rIHdpbGwgb25s eSBiZSB0byB0aGUgZmlyc3QgZXZlbnQgdGhlIHBsdWdpbiBmaW5kczwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5tYWludGFpbjwvc3Bhbj4gOiBrZWVwIHRyYWNrIG9mIHRoZSBj dXJyZW50IHN0YXRlIG9mIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB3aGVu IG5hdmlnYXRpbmcgdGhlIGNhbGVuZGFyIHVzaW5nIHRoZSBuZXh0L3ByZXYgb3IgbW9udGgv eWVhciBzZWxlY3QgbGlzdHMuIEl0ZW1zIHRoYXQgeW91IHdhbnQgdG8gcHJlc2VydmUgc2hv dWxkIGJlIGNvbW1hLXNlcGFyYXRlZCBoZXJlLiBDaG9vc2UgZnJvbSA8Y29kZT5jYWxpZDwv Y29kZT4sIDxjb2RlPnNlY3Rpb248L2NvZGU+LCA8Y29kZT5jYXRlZ29yeTwvY29kZT4sIDxj b2RlPmF1dGhvcjwvY29kZT4sIDxjb2RlPmFydGljbGU8L2NvZGU+LCA8Y29kZT5wZzwvY29k ZT4gb3IgeW91ciBvd24gPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdmFyaWFibGUu IERlZmF1bHQ6IDxjb2RlPmNhbGlkPC9jb2RlPi48ZGl2IGNsYXNzPSJicmVhayI+VXNlIDxj b2RlPm1haW50YWluPSZxdW90O3NlY3Rpb24sIGFydGljbGUsIGNhbGlkJnF1b3Q7PC9jb2Rl PiBpZiB5b3UgaGF2ZSBhbiBpbmRpdmlkdWFsIGFydGljbGUgcGFnZSB3aXRoIGEgY2FsZW5k YXIgaW4gYSBzaWRlYmFyLCBzbyB0aGUgY3VycmVudGx5IHZpZXdlZCBhcnRpY2xlIHdpbGwg cmVtYWluIGluIHZpZXcgd2hlbiBjaGFuZ2luZyBkYXRlLiBJZiB5b3Ugd2lzaCB0byBtYWlu dGFpbiBzdGF0ZSB5b3Vyc2VsZiBvciBkbyBzb21ldGhpbmcgZXhvdGljLCBlbXB0eSB0aGlz IGF0dHJpYnV0ZSBmaXJzdCB0byBhdm9pZCB3ZWlyZG5lc3M8L2Rpdj48L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+c3RhdGljPC9zcGFuPiA6IGZvcmNlIHRoZSBjYWxlbmRhciB0 byBiZSBmaXhlZCB0byBvbmUgbW9udGgveWVhciAoaS5lLiBubyBuYXZpZ2F0aW9uKS4gTW9u dGggYW5kIHllYXIgZGVjaWRlZCBieSBhdHRyaWJ1dGVzIDxjb2RlPm1vbnRoPC9jb2RlPiBh bmQgPGNvZGU+eWVhcjwvY29kZT4gb3IgJiM4MjEyOyBpZiBvbWl0dGVkICYjODIxMjsgdGhl IGN1cnJlbnQgZGF0ZSB3aWxsIGJlIHVzZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+Z210PC9zcGFuPiA6IHJldHVybiBlaXRoZXIgbG9jYWwgdGltZSAoPGNvZGU+MDwvY29k ZT4pIGFjY29yZGluZyB0byB0aGUgdGltZSB6b25lIHNldCBpbiBCYXNpYyBQcmVmcywgb3Ig PHNwYW4gY2xhc3M9ImNhcHMiPkdNVDwvc3Bhbj4gdGltZSAoPGNvZGU+MTwvY29kZT4pLiBE ZWZhdWx0OiA8Y29kZT4wPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5s YW5nPC9zcGFuPiA6IGFuIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IGxhbmd1YWdl IGNvZGUgdGhhdCBmb3JtYXRzIHRpbWUgc3RyaW5ncyBzdWl0YWJsZSBmb3IgdGhlIHNwZWNp ZmllZCBsYW5ndWFnZSAob3IgbG9jYWxlKSBhcyBkZWZpbmVkIGJ5IDxhIGhyZWY9Imh0dHA6 Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzYzOSI+PHNwYW4gY2xhc3M9ImNhcHMiPklT Tzwvc3Bhbj4gNjM5PC9hPi4gRGVmYXVsdDogdW5zZXQgKGkuZS4gdXNlIHRoZSB2YWx1ZSBh cyBzdGF0ZWQgaW4gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gcHJlZnMpPC9saT4K CTwvdWw+CgoJPGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0dHN0eWxlcyI+U3R5bGUgYXR0cmli dXRlczwvaDM+CgoJPHA+T25jZSB5b3UgaGF2ZSB0d2Vha2VkIHlvdXIgYmFzaWMgY2FsZW5k YXIgYXMgZGVzY3JpYmVkIGFib3ZlIHlvdSBjYW4gbW92ZSBvbnRvIHRoZSBzdHlsZSBhdHRy aWJ1dGVzIHNvIHlvdSBtYXkgZ2V0IGF0IGVhY2ggZmFjZXQgb2YgdGhlIGNhbGVuZGFyIGFu ZCB2aXN1YWxseSBhbHRlciBpdDo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+Y2xhc3NsZXZlbHM8L3NwYW4+IDogY2xhc3NlcyBjYW4gYmUgYXBwbGllZCBhdCB0aGUg ZXZlbnQgbGV2ZWwgKHNvIHlvdSBjYW4gY29sb3VyIGVhY2ggZXZlbnQgaW4gYSBjZWxsKSwg b3IgdGhlIGNlbGwgbGV2ZWwgKHNvIHlvdSBjYW4gY29sb3VyIHRoZSB3aG9sZSBkYXkpLCBv ciBib3RoLiBZb3UgbWF5IGFsc28gcHJvbW90ZSAoaS5lLiBjb3B5KSBhbGwgZXZlbnQtbGV2 ZWwgY2xhc3NlcyB0aGF0IG9jY3VyIGluIGEgZGF5IHRvIHRoZSBjZWxsIGxldmVsIHNvIHlv dSBjYW4gY29sb3VyIHRoZSBjZWxsIGJhc2VkIG9uIHRoZSBldmVudHMgdGhhdCBpdCBjb250 YWlucy4gQ29tbWEtc2VwYXJhdGUgYW55IG9mIDxjb2RlPmV2ZW50PC9jb2RlPiAoZm9yIHJl bmRlcmluZyBldmVudC1sZXZlbCBzdHlsZXMpLCA8Y29kZT5jZWxsPC9jb2RlPiAoZm9yIHJl bmRlcmluZyBzdHlsZXMgYXQgdGhlIGNlbGwgbGV2ZWwpLCBvciA8Y29kZT5jZWxscGx1czwv Y29kZT4gKGZvciBjb3B5aW5nIHVuaXF1ZSBldmVudCBjbGFzc2VzIHRvIHRoZSBjZWxsKS4g Tm90ZSB5b3Ugd2lsbCBub3QgbmVlZCB0byB1c2UgPGNvZGU+Y2VsbDwvY29kZT4gYW5kIDxj b2RlPmNlbGxwbHVzPC9jb2RlPiB0b2dldGhlciBiZWNhdXNlIHRoZSBsYXR0ZXIgb3ZlcnJp ZGVzIHRoZSBmb3JtZXIsIGJ1dCB0aGVyZSYjODIxNztzIG5vIGhhcm0gaWYgeW91IGRvLiBE ZWZhdWx0OiA8Y29kZT5jZWxsLCBldmVudDwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+Y2xhc3NwcmVmaXhlczwvc3Bhbj4gOiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0 IG9mIHVwIHRvIHR3byBwcmVmaXhlcyB0byBhcHBseSB0byB5b3VyIGNsYXNzIG5hbWVzLiBU aGUgZmlyc3QgcHJlZml4IGlzIGFwcGxpZWQgdG8gY2VsbC1sZXZlbCBjbGFzc2VzIChhbmQg ZmxhZ3MpIGFuZCB0aGUgc2Vjb25kIHByZWZpeCBpcyBhcHBsaWVkIHRvIGV2ZW50IGNsYXNz ZXMgKHNlZSA8Y29kZT5ldmVudGNsYXNzZXM8L2NvZGU+KSBzbyB5b3UgbWF5IGRpc3Rpbmd1 aXNoIHRoZW0gaWYgeW91IHdpc2guIElmIHlvdSBvbmx5IHNwZWNpZnkgb25lIHByZWZpeCBp dCB3aWxsIGJlIHVzZWQgZm9yIGJvdGggdHlwZXMgb2YgY2xhc3MuIElmIHlvdSB1c2UgPGNv ZGU+Y2xhc3NwcmVmaXhlcz0mcXVvdDsmcXVvdDs8L2NvZGU+IHRoZW4gbm8gcHJlZml4ZXMg d2lsbCBiZSB1c2VkIGF0IGFsbC4gRGVmYXVsdDogPGNvZGU+c21kX2NhbF8sIHNtZF9jYWxf ZXZfPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jbGFzczwvc3Bhbj4g OiB0aGUgY2xhc3MgbmFtZSAocGx1cyBjbGFzcyBwcmVmaXgpIHRvIGFwcGx5IHRvIHRoZSBj YWxlbmRhciB0YWJsZSBpdHNlbGYuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPnJvd2NsYXNzPC9zcGFuPiA6IHRoZSBjbGFzcyBuYW1lIChwbHVzIGNs YXNzIHByZWZpeCkgdG8gYXBwbHkgdG8gZWFjaCB0YWJsZSByb3cuIERlZmF1bHQ6IHVuc2V0 PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNlbGxjbGFzczwvc3Bhbj4gOiB0aGUg Y2xhc3MgbmFtZSAocGx1cyBjbGFzcyBwcmVmaXgpIHRvIGFwcGx5IHRvIGVhY2ggdGFibGUg Y2VsbC4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZW1w dHljbGFzczwvc3Bhbj4gOiB0aGUgY2xhc3MgbmFtZSAocGx1cyBjbGFzcyBwcmVmaXgpIHRv IGFwcGx5IHRvIGFueSBjZWxscyB0aGF0IGRvbiYjODIxNzt0IGNvbnRhaW4gYSBkYXkgbnVt YmVyIChpLmUuIHRoZSBibGFuayBjZWxscyBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiBhIG1v bnRoKS4gRGVmYXVsdDogPGNvZGU+ZW1wdHk8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPmlzb3dlZWtjbGFzczwvc3Bhbj4gOiB0aGUgY2xhc3MgbmFtZSAocGx1cyBj bGFzcyBwcmVmaXgpIHRvIGFwcGx5IHRvIGVhY2ggY2VsbCBjb250YWluaW5nIGFuIDxzcGFu IGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHdlZWsgKGlmIDxjb2RlPmlzb3dlZWtzPC9jb2Rl PiBpcyB1c2VkKS4gRGVmYXVsdDogPGNvZGU+d2VlazwvY29kZT48L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+bmF2Y2xhc3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgKHBsdXMg Y2xhc3MgcHJlZml4KSB0byBhcHBseSB0byB0aGUgcHJldi9uZXh0IG1vbnRoIG5hdmlnYXRp b24gYXJyb3dzLiBJZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGlzIHVzZWQsIHRoZSBmaXJz dCBpdGVtIHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIG9uIHRoZSBsaW5rIHRvIHRo ZSBwcmV2aW91cyBtb250aCwgdGhlIDJuZCBpdGVtIHRvIHRoZSBuZXh0IG1vbnRoLiBJZiBh IHNpbmdsZSB2YWx1ZSBpcyB1c2VkLCBib3RoIGNsYXNzIG5hbWVzIHdpbGwgYmUgdGhlIHNh bWUuIERlZmF1bHQ6IDxjb2RlPm5hdnByZXYsIG5hdm5leHQ8L2NvZGU+PC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPm15Y2xhc3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgKHBs dXMgY2xhc3MgcHJlZml4KSB0byBhcHBseSB0byBib3RoIHRoZSBtb250aCBhbmQgeWVhciBp biB0aGUgY2FsZW5kYXIgaGVhZGVyIChlaXRoZXIgdGhlIDxjb2RlPiZsdDtzcGFuJmd0Ozwv Y29kZT4gb3IgPGNvZGU+Jmx0O3NlbGVjdCZndDs8L2NvZGU+IHRhZ3MpLiBJZiA8Y29kZT5t eXdyYXB0YWc8L2NvZGU+IGlzIHVzZWQsIHRoZSBjbGFzcyBpcyBhcHBsaWVkIHRvIHRoZSB3 cmFwdGFnIGluc3RlYWQuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPmV2ZW50Y2xhc3Nlczwvc3Bhbj4gOiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9m IGl0ZW1zIHRvIGFkZCBhcyBjbGFzc2VzIHRvIGVhY2ggZXZlbnQgKGVhY2ggcHJlZml4ZWQg d2l0aCB0aGUgZXZlbnQgcHJlZml4KS4gSXQgZGVmYXVsdHMgdG8gPGNvZGU+Y2F0ZWdvcnk8 L2NvZGU+IHNvIGl0IGFkZHMgdGhlIENhdGVnb3J5MSBhbmQgMiBuYW1lcyBhcyBjbGFzcyBp ZGVudGlmaWVycyB0byBlYWNoIGV2ZW50LiBUaHVzLCBvdXQgb2YgdGhlIGJveCwgeW91IGNh biBzdHlsZSBldmVudHMgYnkgY2F0ZWdvcnkuIDxkaXYgY2xhc3M9ImJyZWFrIj5JZiB5b3Ug d2lzaCB0byBleHRlbmQgb3IgYWx0ZXIgdGhpcywganVzdCBnaXZlIGEgbGlzdCBvZiBmaWVs ZHMgdGhhdCB5b3Ugd2FudCB0byBhcHBseSB0byB0aGUgZXZlbnQgKGUuZy4gPGNvZGU+ZXZl bnRjbGFzc2VzPSZxdW90O0lELCBBdXRob3JJRCwgY3VzdG9tXzUmcXVvdDs8L2NvZGU+IHdv dWxkIGFkZCB0aHJlZSBjbGFzc2VzIHRvIGVhY2ggZXZlbnQgY29ycmVzcG9uZGluZyB0byB0 aGUgZXZlbnQmIzgyMTc7cyBJRCwgaXRzIGF1dGhvciAobG9naW4pIG5hbWUgYW5kIHRoZSBj b250ZW50cyBvZiBjdXN0b21fNSkuIE9mIGNvdXJzZSwgaWYgeW91IHVzZSA8Y29kZT5jZWxs cGx1czwvY29kZT4gbW9kZSB0aGVzZSBjbGFzc2VzIHdpbGwgYmUgY29waWVkIHRvIHRoZSBj ZWxsIGxldmVsLiA8L2Rpdj48ZGl2IGNsYXNzPSJicmVhayI+U29tZSBzcGVjaWFsIG5hbWVz IGV4aXN0OiA8Y29kZT5jYXRlZ29yeTwvY29kZT4gcmV0dXJucyBib3RoIENhdGVnb3J5MSBh bmQgQ2F0ZWdvcnkyIChpZiBzZXQpOyA8Y29kZT5nY2F0PC9jb2RlPiB3aWxsIHJldHVybiB0 aGUgY3VycmVudCAmIzgyMTY7Z2xvYmFsJiM4MjE3OyBjYXRlZ29yeSAoaWYgY3VycmVudGx5 IGZpbHRlcmluZyBieSBjYXRlZ29yeSk7IDxjb2RlPmF1dGhvcjwvY29kZT4gcmV0dXJucyB0 aGUgYXV0aG9yIElEIChpZiBjdXJyZW50bHkgZmlsdGVyaW5nIGJ5IGF1dGhvcik7IDxjb2Rl PnNlY3Rpb248L2NvZGU+IGdpdmVzIHRoZSBjdXJyZW50IHNlY3Rpb248L2Rpdj48L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZXZlbnR3cmFwdGFnPC9zcGFuPiA6IHRoZSAoWClI VE1MIHRhZywgd2l0aG91dCBpdHMgYnJhY2tldHMsIHRvIHdyYXAgZWFjaCBldmVudCB3aXRo LiBEZWZhdWx0OiA8Y29kZT5zcGFuPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5teXdyYXB0YWc8L3NwYW4+IDogdGhlIChYKUhUTUwgdGFnLCB3aXRob3V0IGl0cyBi cmFja2V0cywgdG8gd3JhcCBhcm91bmQgPGVtPmJvdGg8L2VtPiBtb250aCArIHllYXIgZHJv cGRvd24gc2VsZWN0IGxpc3RzIGFuZCBvcHRpb25hbCBzdWJtaXQgYnV0dG9uIChpdCB3cmFw cyB0aGUgbG90LCBjb21iaW5lZCkuIERlZmF1bHQ6IHVuc2V0PC9saT4KCTwvdWw+CgoJPGgy IGlkPSJldmVudHMiPlN0YW5kYXJkIGNlbGxzIGFuZCBldmVudHM8L2gyPgoKCTxwPlRoZXNl IGFyZSB0aGUgc3RhbmRhcmQgY2xhc3MgLyBmbGFnIG5hbWluZyBydWxlcywgYW5kIHRoZXkg YXJlIGN1bXVsYXRpdmU6PC9wPgoKCTx1bD4KCQk8bGk+Tm9ybWFsIChkYXkpIGNlbGxzIGRv biYjODIxNzt0IGhhdmUgYSBjbGFzcyBhc3NpZ25lZCB0byB0aGVtIHVubGVzcyB5b3Ugc3Bl Y2lmeSBvbmUgd2l0aCA8Y29kZT5jZWxsY2xhc3M8L2NvZGU+PC9saT4KCQk8bGk+QW55IGNl bGwgdGhhdCBjb250YWlucyBhbiBldmVudCAob2YgYW55IHR5cGUpIGlzIGZsYWdnZWQgYXMg YW4gPGNvZGU+ZXZlbnQ8L2NvZGU+PC9saT4KCQk8bGk+QW55IGNlbGwgdGhhdCBmYWxscyBv biBhIGhvbGlkYXkgaXMgZ2l2ZW4gdGhlIGZsYWcgPGNvZGU+aG9sczwvY29kZT48L2xpPgoJ CTxsaT5UaGUgY3VycmVudCBkYXkgaXMgZ2l2ZW4gdGhlIGZsYWcgPGNvZGU+dG9kYXk8L2Nv ZGU+PC9saT4KCQk8bGk+SWYgdGhlIGNlbGwgY29udGFpbnMgYSBzdGFuZGFyZCAob25lLW9m ZikgZXZlbnQsIHRoZSA8ZW0+ZXZlbnQ8L2VtPiB3aWxsIGJlIGZsYWdnZWQgPGNvZGU+c3Rh bmRhcmQ8L2NvZGU+PC9saT4KCQk8bGk+RmxhZ3MgcHJvdmlkZSBpbmZvcm1hdGlvbiA8ZW0+ YWJvdXQ8L2VtPiB0aGUgY2VsbCAvIGV2ZW50IHRoYXQgY2FuIGJlIHRlc3RlZCB3aXRoIHRo ZSA8YSBocmVmPSIjaWZjYWwiPmNvbmRpdGlvbmFsIHRhZzwvYT4sIGFuZCBhcmUgYWxzbyBh ZGRlZCBhcyBjbGFzcyBuYW1lcy4gV2hlbiBhc3NpZ25lZCBhcyBjbGFzc2VzLCBmbGFncyA8 c3Ryb25nPmFsd2F5czwvc3Ryb25nPiB0YWtlIHRoZSAmIzgyMTY7Y2xhc3MmIzgyMTc7IHBy ZWZpeCAoaS5lLiB0aGUgMXN0IGl0ZW0gZ2l2ZW4gaW4gPGNvZGU+Y2xhc3NwcmVmaXhlczwv Y29kZT4pICYjODIxMjsgd2hldGhlciB0aGV5IGFwcGVhciBhdCB0aGUgPGVtPmV2ZW50PC9l bT4gb3IgPGVtPmNlbGw8L2VtPiBsZXZlbHMuIFRoZSBvbmx5IGNsYXNzZXMgdGhhdCB0YWtl IHRoZSAybmQgJiM4MjE2O2V2ZW50JiM4MjE3OyBwcmVmaXggYXJlIHRoZSBmaWVsZHMgeW91 IHNwZWNpZnkgaW4gPGNvZGU+ZXZlbnRjbGFzc2VzPC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxw PkZsYWdzIGZvciBvdGhlciB0eXBlcyBvZiBldmVudCBhcmUgZGV0YWlsZWQgYmVsb3cuPC9w PgoKCTxoMiBpZD0icmVjdXIiPlJlY3VycmluZyBldmVudHM8L2gyPgoKCTxwPklmIHlvdSBo YXZlIG5vbWluYXRlZCBhbiBhcnRpY2xlIGZpZWxkIGFzIHlvdXIgPGNvZGU+c3RlcGZpZWxk PC9jb2RlPiB5b3UgbWF5IGVudGVyIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZnJlcXVl bmNpZXMgYXQgd2hpY2ggdGhpcyBldmVudCBpcyB0byBiZSByZXBlYXRlZC4gVGhlIGZvcm1h dCBvZiB0aGUgcmVwZXRpdGlvbiBpcyAmIzgyMjA7bnVtYmVyIGludGVydmFsJiM4MjIxOywg ZS5nLiA8Y29kZT40IHdlZWtzPC9jb2RlPiBvciA8Y29kZT4xMCBkYXlzPC9jb2RlPiBvciA8 Y29kZT42IG1vbnRoczwvY29kZT4uIFRoZSBwbHVnaW4gd2lsbCBkbyBpdHMgYmVzdCB0byBm aWd1cmUgb3V0IHdoYXQgeW91IG1lYW4uIENvbnN1bHQgPGEgaHJlZj0iaHR0cDovL3d3dy5n bnUub3JnL3NvZnR3YXJlL3Rhci9tYW51YWwvaHRtbF9ub2RlL0RhdGUtaW5wdXQtZm9ybWF0 cy5odG1sIj5kYXRlIGlucHV0IGZvcm1hdHM8L2E+IGZvciBzb21lIG1vcmUgZXhhbXBsZXMg KGxpa2UgJiM4MjIwO3RoaXJkIG1vbmRheSYjODIyMTsgYW5kIHNvIG9uKS4gVGhpbmdzIGxp a2UgJiM4MjIwO2ZpcnN0IHRodXJzZGF5JiM4MjIxOyBvciAmIzgyMjA7bGFzdCBmcmlkYXkm IzgyMjE7IHdpbGwgb25seSBzaG93IHRoZSBldmVudCBvbiB0aGUgZ2l2ZW4gZmlyc3QvbGFz dCBkYXkgb2YgdGhlIG1vbnRoLjwvcD4KCgk8cD5JZiB5b3UgY2FuIGZpbmQgYSB1c2UgZm9y IGl0LCB5b3UgbWF5IHNwZWNpZnkgbXVsdGlwbGUgZnJlcXVlbmNpZXMsIGZvciBleGFtcGxl IDxjb2RlPjMgZGF5cywgMSB3ZWVrPC9jb2RlPi4gU28geW91IHdvdWxkIHNlZSB0aGF0IGV2 ZW50IG9uIHRoZSBmaXJzdCBkYXksIHRoZW4gdGhlIDNyZCwgNnRoLCA3dGgsIDl0aCwgMTJ0 aCwgMTR0aCwgMTV0aCwgMTh0aCwgMjFzdCwgMjR0aCYjODIzMDsgZGF5cyB0aGVyZWFmdGVy LiBOb3RlIHRoYXQgdGhlIGV2ZW50IG9ubHkgb2NjdXJzIG9uY2Ugb24gdGhlIDIxc3QgZGF5 IGV2ZW4gdGhvdWdoIHRoZSB0d28gZnJlcXVlbmNpZXMgY2xhc2guPC9wPgoKCTxwPlJlY3Vy IHJ1bGVzOjwvcD4KCgk8dWw+CgkJPGxpPlRoZSByZXBldGl0aW9uIHdpbGwgY29udGludWUg Zm9yZXZlcjxzdXAgY2xhc3M9ImZvb3Rub3RlIj48YSBocmVmPSIjZm4xMTE0NTQ0OTIzNDk1 ZGQ4Y2FiMTU5YyI+MTwvYT48L3N1cD4gdW5sZXNzIHlvdSBzcGVjaWZ5IHRoYXQgdGhlIGV2 ZW50IGV4cGlyZXMgYnkgc2V0dGluZyBhbiBleHBpcnkgdGltZSB1bmRlciB0aGUgYXJ0aWNs ZSYjODIxNztzIDxlbT5Nb3JlPC9lbT4gYXJlYTwvbGk+CgkJPGxpPlRoZSB2ZXJ5IGZpcnN0 IGV2ZW50IG9mIGEgcmVjdXJyaW5nIHNldCB3aWxsIGJlIGZsYWdnZWQgd2l0aCA8Y29kZT5y ZWN1cmZpcnN0PC9jb2RlPjwvbGk+CgkJPGxpPkVhY2ggZm9sbG93aW5nIGNlbGwgdGhhdCBj b250YWlucyBhIHJlY3VycmluZyBldmVudCB3aWxsIGJlIGZsYWdnZWQgd2l0aCA8Y29kZT5y ZWN1cjwvY29kZT48L2xpPgoJCTxsaT5Cb3RoIGZsYWdzIGFyZSBhcHBsaWVkIHRvIHRoZSBl dmVudCBhcyBjbGFzc2VzIHVzaW5nIHRoZSBjbGFzcyBwcmVmaXg8L2xpPgoJCTxsaT5SZXBl YXRlZCBldmVudHMgbWF5IGJlIDxhIGhyZWY9IiNjYW5jZWwiPmNhbmNlbGxlZDwvYT4gb24g YSBwZXItZGF0ZSBiYXNpczwvbGk+Cgk8L3VsPgoKCTxwIGNsYXNzPSJzbWFsbCIgaWQ9ImZu MTExNDU0NDkyMzQ5NWRkOGNhYjE1OWMiPjxzdXA+MTwvc3VwPiAmIzgyMTY7Zm9yZXZlciYj ODIxNzsgaXMgbGltaXRlZCB0byA5OTk5OSByZWN1cnJlbmNlcyBwZXIgZXZlbnQsIG9yIDI3 NCB5ZWFycyYjODIxNzsgd29ydGggb2YgZGFpbHkgZXZlbnRzLiA8c3BhbiBjbGFzcz0iY2Fw cyI+UEhQPC9zcGFuPiB3aWxsIHJ1biBvdXQgb2YgbWVtb3J5IGxvbmcgYmVmb3JlIHlvdSBy ZWFjaCB0aGlzIGxpbWl0IDotKTwvcD4KCgk8aDIgaWQ9Im11bHRpIj5NdWx0aXBsZSAoc3Bh bm5lZCkgZXZlbnRzPC9oMj4KCgk8cD5BbnkgZXZlbnQgdGhhdCBoYXMgYSBzdGFydCBkYXRl IGFuZCBhbiBleHBpcnkgZGF0ZSB0aGF0IGlzIGEgZGF5IG9yIG1vcmUgbGF0ZXIsIGFuZCA8 ZW0+ZG9lcyBub3Q8L2VtPiBoYXZlIGFueSByZXBldGl0aW9uIGluIGl0cyA8Y29kZT5zdGVw ZmllbGQ8L2NvZGU+LCBpcyBmbGFnZ2VkIGFzIGEgPGNvZGU+bXVsdGk8L2NvZGU+LiBCeSBk ZWZhdWx0IHRoZSBmaXJzdCBldmVudCBpcyBkaXNwbGF5ZWQgaW4gZnVsbCBhbmQgZWFjaCAm IzgyMTY7Y29udGludWF0aW9uJiM4MjE3OyBldmVudCBpcyBzaG93biBvbmx5IGFzIGEgcmln aHQgYXJyb3cgaW4gc3Vic2VxdWVudCBjZWxscyAodGhlIGV2ZW50IHRpdGxlIGlzIGRpc3Bs YXllZCBvbiBtb3VzZSBob3ZlcikuIEV2ZW50cyBtYXkgc3BhbiBtb250aHMgb3IgeWVhcnMg YW5kIHRoZSBwbHVnaW4gZmlndXJlcyBldmVyeXRoaW5nIG91dCB1c2luZyB0aGUgZmxhZyBy dWxlczo8L3A+CgoJPHVsPgoJCTxsaT5UaGUgZmlyc3QgY2VsbCBvZiBhIHNwYW5uZWQgc2V0 IGlzIGEgPGNvZGU+bXVsdGlmaXJzdDwvY29kZT48L2xpPgoJCTxsaT5UaGUgbGFzdCBjZWxs IGlzIGEgPGNvZGU+bXVsdGlsYXN0PC9jb2RlPjwvbGk+CgkJPGxpPkV2ZXJ5IG90aGVyIGNl bGwgaXMgYSA8Y29kZT5tdWx0aTwvY29kZT4gPGVtPmV4Y2VwdDwvZW0+IGlmIHRoZSBldmVu dCByb2xscyBvdmVyIGludG8gdGhlIG5leHQgbW9udGguIEluIHRoYXQgY2FzZSwgdGhlIGVu dHJ5IG9uIHRoZSAxc3Qgb2YgdGhlIG1vbnRoIGlzIGEgPGNvZGU+bXVsdGlwcmV2PC9jb2Rl PiB0byBpbmRpY2F0ZSBpdCBiZWxvbmdzIHRvIGEgcHJldmlvdXMgZXZlbnQ8L2xpPgoJCTxs aT5JZiB0aGUgMXN0IGRheSBvZiB0aGUgbW9udGggaXMgdGhlIGxhc3QgZGF5IG9mIHRoZSBl dmVudCwgdGhlIDxjb2RlPm11bHRpcHJldjwvY29kZT4gaXMgZHJvcHBlZCBpbiBmYXZvdXIg b2YgPGNvZGU+bXVsdGlsYXN0PC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxwPlN3aXRjaCBvZmYg c3Bhbm5pbmcgY29tcGxldGVseSB3aXRoIHRoZSA8Y29kZT5zaG93c3Bhbm5lZD0mcXVvdDsw JnF1b3Q7PC9jb2RlPiBhdHRyaWJ1dGUuIEV2ZW50cyB0aGF0IGhhdmUgYW4gZXhwaXJ5IGFy ZSB0aGVuIGp1c3Qgc3RhbmRhcmQgZXZlbnRzLjwvcD4KCgk8cD4mIzgyMTY7Q29udGludWF0 aW9uJiM4MjE3OyBjZWxscyBtYXkgYmUgcHJvY2Vzc2VkIHdpdGggYSBzZXBhcmF0ZSBmb3Jt IChjYWxsZWQgYSA8Y29kZT5zcGFuZm9ybTwvY29kZT4gYmVjYXVzZSAmIzgyMTY7Y29udGZv cm0mIzgyMTc7IGRpZG4mIzgyMTc7dCBzb3VuZCB2ZXJ5IG5pY2UhKS4gSWYgeW91IGNob29z ZSBub3QgdG8gdXNlIGEgPGNvZGU+c3BhbmZvcm08L2NvZGU+LCB0aGUgc3RhbmRhcmQgPGNv ZGU+Zm9ybTwvY29kZT4gb3IgY29udGFpbmVyIHdpbGwgYmUgdXNlZCBhbmQgeW91IHdpbGwg aGF2ZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgbXVsdGkgZmxhZ3Mg eW91cnNlbGYgdXNpbmcgdGhlIDxhIGhyZWY9IiNpZmNhbCI+Y29uZGl0aW9uYWwgdGFnPC9h Pi48L3A+CgoJPHA+WW91IGNhbiBhbHNvIDxhIGhyZWY9IiNjYW5jZWwiPmNhbmNlbDwvYT4g ZGF5cyBvZiBhIHNwYW5uZWQgZXZlbnQgaW4gdGhlIHNhbWUgbWFubmVyIGFzIHlvdSBkbyB3 aXRoIDxhIGhyZWY9IiNyZWN1ciI+cmVjdXJyaW5nIGV2ZW50czwvYT4sIGV4Y2VwdCB5b3Ug Y2Fubm90IGNhbmNlbCB0aGUgZmlyc3QgZGF5OyB5b3Ugc2hvdWxkIG1vdmUgdGhlIGV2ZW50 IHN0YXJ0IGRhdGUgYW5kIGFwb2xvZ2lzZSE8L3A+CgoJPGgyIGlkPSJjYW5jZWwiPkNhbmNl bGxpbmcgZXZlbnRzPC9oMj4KCgk8cD5QbGFucyBjaGFuZ2UgYW5kIHlvdSBtYXkgZmluZCB0 aGF0IGEgZ2lnIGhhcyB0byBiZSBjYW5jZWxsZWQgZm9yIHdoYXRldmVyIHJlYXNvbi4gUGVy aGFwcyB5b3UgYWR2ZXJ0aXNlIGEgd2Vla2x5IGJvb3QgZmFpciBidXQgdGhlIGZpZWxkIGlz IHdhdGVybG9nZ2VkIG9uZSB3ZWVrLiBObyBwcm9ibGVtLiBOb21pbmF0ZSBhIDxjb2RlPnNr aXBmaWVsZDwvY29kZT4gaW4geW91ciA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxlbmRhciAvJmd0 OzwvY29kZT4gdGFnIGFuZCBlbnRlciB0aGUgZGF0ZSBvZiB0aGUgY2FuY2VsbGVkIGV2ZW50 LjwvcD4KCgk8cD5Vc2UgYW55IGFjY2VwdGFibGUgZm9ybWF0LCBidXQgZGVyaXZhdGl2ZXMg b2YgZGQtbW9udGhuYW1lLXl5eXkgb3IgbW9udGhuYW1lLWRkLXl5eXkgYXJlIHRoZSBtb3N0 IHVuYW1iaWd1b3VzIHRvIGF2b2lkIHRoZSBwcm9ibGVtcyBvZiBob3cgdGhlIHBsdWdpbiBt aWdodCBpbnRlcnByZXQgPGNvZGU+MS81PC9jb2RlPiBhcyBKYW4gNXRoIG9yIE1heSAxc3Qu IFlvdSBjYW4gc3BlY2lmeSBhcyBtYW55IGNhbmNlbGxhdGlvbnMgYXMgeW91IGxpa2U7IGNv bW1hLXNlcGFyYXRlIGVhY2ggb25lLjwvcD4KCgk8cD5CeSBkZWZhdWx0IGNhbmNlbGxlZCBl dmVudHMgd2lsbCBub3QgYXBwZWFyIG9uIHRoZSBjYWxlbmRhciBhbmQgdGhlcmUgd2lsbCBi ZSBhIGNvbnNwaWN1b3VzIGhvbGUgaW4gdGhlIHJlcGV0aXRpb24uIElmIHlvdSBzd2l0Y2gg PGNvZGU+c2hvd3NraXBwZWQ9JnF1b3Q7MSZxdW90OzwvY29kZT4gdGhlIGV2ZW50IHdpbGwg YXBwZWFyIGluIHRoZSBjZWxsIGFzIG5vcm1hbCBhbmQgdGhlIDxjb2RlPmNhbmNlbDwvY29k ZT4gZmxhZyB3aWxsIGFwcGx5IHRvIHRoZSBldmVudCBzbyB5b3UgbWF5IGRldGVjdC9zdHls ZSBpdC48L3A+CgoJPGgyIGlkPSJob2xpZGF5cyI+SG9saWRheXM8L2gyPgoKCTxwPlB1Ymxp YyBob2xpZGF5cyBuZWVkIG5vdCBiZSBhIG51aXNhbmNlIHRvIHlvdXIgZXZlbnRzLiBHaXZl IHRoZSBwbHVnaW4gYSBob2xpZGF5IGxpc3QgYW5kIGl0JiM4MjE3O2xsIG1ha2Ugc3VyZSB0 aGF0IGFueSByZWN1cnJpbmcgb3IgbXVsdGkgZXZlbnRzIGFyZSBub3Qgc2NoZWR1bGVkIG9u IHRob3NlIGRheXMuIDxhIGhyZWY9IiNldmVudHMiPlN0YW5kYXJkPC9hPiBvbmUtb2ZmIGV2 ZW50cyBhcmUgcGVybWl0dGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSB5b3UgbWlnaHQgd2FudCB0 byBvcmdhbmlzZSBhIHNwZWNpYWwgZXZlbnQgb24gdGhhdCBkYXksIHRob3VnaCB5b3UgY2Fu IGZvcmJpZCB0aG9zZSB0b28gaWYgeW91IHdpc2guPC9wPgoKCTxwPlRoZSBsaXN0IG9mIGRh dGVzIHlvdSBzcGVjaWZ5IGNhbiBiZSBlbnRlcmVkIGRpcmVjdGx5IGluIGEgc3RyaW5nIGlu IHRoZSA8Y29kZT5ob2xpZGF5czwvY29kZT4gYXR0cmlidXRlIG9yIGluIGEgPGNvZGU+Jmx0 O3R4cDp2YXJpYWJsZSAvJmd0OzwvY29kZT4uIFRoZSBsYXR0ZXIgaXMgbW9yZSBmdW4gc28g bGV0JiM4MjE3O3MgdHJ5IHRoYXQ6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNs YXNzPSJibG9jayI+Jmx0O3R4cDp2YXJpYWJsZSBuYW1lPSZxdW90O25hdF9ob2xzJnF1b3Q7 CiAgICAgdmFsdWU9JnF1b3Q7RGVjIDI1LCAyNiBEZWMsIDMxL0RlYywgSmFuLTEsCiAgICAg ICAgTWF5IDQgMjAwOSwgMjAwOS0wOC0zMSZxdW90OyAvJmd0OwombHQ7dHhwOnNtZF9jYWxl bmRhciBob2xpZGF5cz0mcXVvdDt0eHB2YXI6bmF0X2hvbHMmcXVvdDsgLyZndDsKPC9jb2Rl PjwvcHJlPgoKCTxwPlRoZXJlIHlvdSBnbywgYWxsIGRvbmUuIFRoZSBsaXN0IHRoZXJlIHNo b3dzIHNvbWUgb2YgdGhlIHZhcmlldHkgYW5kIGJyZWFkdGggb2YgZm9ybWF0cyB0aGF0IHRo ZSBwbHVnaW4gYWxsb3dzLiBUaGVyZSBhcmUgbW9yZS4gTm90ZSB0aGF0IHNvbWUgZXZlbnRz IGhhdmUgYSB5ZWFyIGFuZCBvdGhlcnMgZG9uJiM4MjE3O3QuIFRoZSBvbmVzIHdpdGhvdXQg YSB5ZWFyIG9jY3VyIG9uIHRoZSBzYW1lIGRhdGUgZXZlcnkgeWVhciB3aGVyZWFzIHRoZSBv bmVzIHdpdGggYSB5ZWFyIHdpbGwgb25seSBvY2N1ciBvbiB0aGF0IHNwZWNpZmljIGRhdGUu PC9wPgoKCTxwPk9uY2UgeW91ciBkYXRlcyBhcmUgZGVmaW5lZCB5b3UgY2FuIGNvbnRyb2wg d2hjaCBldmVudHMgYXJlIGFsbG93ZWQgdG8gZmFsbCBvbiB0aG9zZSBkYXRlcyB2aWEgPGNv ZGU+aG9saWRheWZsYWdzPC9jb2RlPi4gSnVkaWNpYWwgdXNlIG9mIHRoYXQgYXR0cmlidXRl LCA8Y29kZT5zaG93c3Bhbm5lZDwvY29kZT4sIDxjb2RlPnNob3dza2lwcGVkPC9jb2RlPiBh bmQgdGhlIHZhcmlvdXMgZm9ybXMgJiM4MjEyOyBhbG9uZyB3aXRoIHRoZSA8YSBocmVmPSIj aWZjYWwiPmNvbmRpdGlvbmFsIHRhZzwvYT4gJiM4MjEyOyBjYW4gZ2l2ZSB5b3UgYSB3aWRl IHZhcmlldHkgb2Ygd2F5cyB0byBkaXNwbGF5IGV2ZW50cyBhbmQgY2VsbHMuPC9wPgoKCTxw PkhvbGlkYXkgY2VsbHMgYXJlIGdpdmVuIHRoZSBmbGFnIDxjb2RlPmhvbHM8L2NvZGU+LCBh bmQgYW55IGV2ZW50IHRoYXQgaXMgbm90IHNwZWNpZmljYWxseSBwZXJtaXR0ZWQgYnkgdGhl IDxjb2RlPmhvbGlkYXlmbGFnczwvY29kZT4gaXMgYXV0b21hdGljYWxseSBhc3NpZ25lZCBh IDxjb2RlPmNhbmNlbDwvY29kZT4gZmxhZyBpZiBpdCBmYWxscyBvbiBvbmUgb2YgdGhlIGRh eXMuPC9wPgoKCTxoMiBpZD0iY2VsbGZvcm0iPlVzaW5nIGEgPGNvZGU+Y2VsbGZvcm08L2Nv ZGU+IHdpdGggcmVwbGFjZW1lbnQgdmFyaWFibGVzPC9oMj4KCgk8cD5JZiB5b3UgZG9uJiM4 MjE3O3QgbGlrZSB0aGUgbGF5b3V0IG9mIHRoZSBkZWZhdWx0IGNlbGwsIHlvdSBjYW4gZG8g aXQgeW91cnNlbGYgd2l0aCB0aGUgPGNvZGU+Y2VsbGZvcm08L2NvZGU+IGF0dHJpYnV0ZS48 L3A+CgoJPHA+VG8gYnVpbGQgeW91ciBvd24gY2VsbHMgeW91IG9mdGVuIG5lZWQgaW5mb3Jt YXRpb24gc3VjaCBhcyB0aGUgKHByZS1wcm9jZXNzZWQpIGV2ZW50cywgdGhlIGRheSwgb3Ig bW9udGggZXRjLiBTbyAmIzgyMTI7IGluIGFkZGl0aW9uIHRvIHlvdXIgdXN1YWwgbWFya3Vw IGFuZCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB0YWdzICYjODIxMjsgeW91IG1h eSBhbHNvIGluc2VydCBhbnkgb2YgdGhlIGZvbGxvd2luZyAmIzgyMTY7cmVwbGFjZW1lbnRz JiM4MjE3OyB0byBoYXZlIHRoZSByZWxldmFudCB2YWx1ZSBpbnNlcnRlZCBhdCB0aGF0IHBs YWNlIGluIHRoZSBjZWxsOjwvcD4KCgk8dWw+CgkJPGxpPjxjb2RlPntkYXl9PC9jb2RlPiA6 IGluc2VydHMgdGhlIGN1cnJlbnQgZGF5IChhcyBhIG51bWJlciBmcm9tIDEgdG8gMzEpPC9s aT4KCQk8bGk+PGNvZGU+e3dlZWtkYXl9PC9jb2RlPiA6IGluc2VydHMgdGhlIGN1cnJlbnQg d2Vla2RheSAoYXMgYSB3b3JkIGluIHRoZSBsb2NhbCBsYW5ndWFnZSwgb3IgZnJvbSB5b3Vy IDxjb2RlPmRheWZvcm1hdDwvY29kZT4gbGlzdCk8L2xpPgoJCTxsaT48Y29kZT57d2Vla308 L2NvZGU+IDogaW5zZXJ0cyB0aGUgY3VycmVudCA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9z cGFuPiB3ZWVrIG51bWJlcjwvbGk+CgkJPGxpPjxjb2RlPnttb250aH08L2NvZGU+IDogaW5z ZXJ0cyB0aGUgY3VycmVudCBtb250aCAoYXMgYSBudW1iZXIgZnJvbSAxIHRvIDEyKTwvbGk+ CgkJPGxpPjxjb2RlPnttb250aG5hbWV9PC9jb2RlPiA6IGluc2VydHMgdGhlIG1vbnRoIG5h bWUgaW4gdGhlIGxvY2FsIGxhbmd1YWdlPC9saT4KCQk8bGk+PGNvZGU+e3llYXJ9PC9jb2Rl PiA6IGluc2VydHMgdGhlIGN1cnJlbnQgeWVhciAoNCBkaWdpdHMpPC9saT4KCQk8bGk+PGNv ZGU+e3Nob3J0eWVhcn08L2NvZGU+IDogaW5zZXJ0cyB0aGUgY3VycmVudCB5ZWFyICgyIGRp Z2l0cyk8L2xpPgoJCTxsaT48Y29kZT57ZXZlbnRzfTwvY29kZT4gOiBpbnNlcnRzIGFsbCBl dmVudHMgKGluY2x1ZGluZyB0aGVpciBwcm9jZXNzZWQgZm9ybS9jb250YWluZXIgaW5mbyk8 L2xpPgoJPC91bD4KCgk8aDIgaWQ9InNpemVkaWZmIj5EaWZmZXJlbmNlcyBiZXR3ZWVuIGxh cmdlIGFuZCBzbWFsbCBjYWxlbmRhcnM8L2gyPgoKCTxwPk5vdCBhIGxvdCEgQnV0IHRoZXJl IGFyZSBzb21lIHN1YnRsZXRpZXM6PC9wPgoKCTx1bD4KCQk8bGk+PGNvZGU+Y2VsbGZvcm08 L2NvZGU+IGNhbm5vdCBiZSB1c2VkIG9uIGEgc21hbGwgY2FsZW5kYXI8L2xpPgoJCTxsaT5C eSBkZWZhdWx0LCBubyBldmVudHMgYXJlIHBsYWNlZCBpbiB0aGUgc21hbGwgY2FsZW5kYXIu IFlvdSBjYW4gYWRkIHRoZW0geW91cnNlbGYgaWYgeW91IHdpc2ggYmVjYXVzZSB5b3UgY2Fu IHVzZSB0aGUgc2FtZSBmb3JtL2NvbnRhaW5lciBtZWNoYW5pc20gYXMgdGhlIGxhcmdlIGNh bGVuZGFyPC9saT4KCQk8bGk+VGhlIG9ubHkgdGhpbmcgcmVuZGVyZWQgaW4gYSBzbWFsbCBj YWxlbmRhciBjZWxsIGlzIHRoZSBoeXBlcmxpbmtlZCBkYXRlIGFuZCBhbnkgPGEgaHJlZj0i I25hbWluZyI+ZmxhZ3M8L2E+IHNvIHlvdSBjYW4gc3R5bGUgdGhlIGJveGVzPC9saT4KCQk8 bGk+PGNvZGU+Y2xhc3NsZXZlbHM8L2NvZGU+IGFyZSBpZ25vcmVkOiBldmVyeXRoaW5nIGlz IGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgYXQgdGhlIGNlbGwgbGV2ZWwgKGkuZS4gPGNvZGU+ Y2VsbHBsdXM8L2NvZGU+IGlzIHNldCk8L2xpPgoJCTxsaT48Y29kZT5ldmVudGNsYXNzZXM8 L2NvZGU+IGFyZSBzdGlsbCBob25vdXJlZCBpZiB5b3Ugd2lzaCB0byB1c2UgYSA8Y29kZT5m b3JtPC9jb2RlPiB0byBwcm9jZXNzIHRoZW0geW91cnNlbGY8L2xpPgoJCTxsaT5UaGUgc21h bGwgY2FsZW5kYXIgb3V0cHV0cyB5ZWFyLW1vbnRoLWRheS10aXRsZSBvciBtZXNzeSBwZXJt bGlua3Mgb25seTwvbGk+Cgk8L3VsPgoKCTxwPkFzaWRlIGZyb20gdGhhdCB0aGV5JiM4MjE3 O3JlIHByZXR0eSBtdWNoIGlkZW50aWNhbC48L3A+CgoJPGgyIGlkPSJkYXRlcyI+RGF0ZXMs IGdvdGNoYXMgYW5kIGlkaW9zeW5jcmFjaWVzPC9oMj4KCgk8cD5JZiB0aGVyZSB3YXMgb25l IGdsb2JhbCB0aW1lIHpvbmUgdGhlIHdvcmxkIHdvdWxkIGJlIHNpbXBsZXIuIFNhZGx5LCB3 ZSBhbGwgbGl2ZSBpbiBkaWZmZXJlbnQgcGxhY2VzIGFuZCB0aGUgSW50ZXJuZXQgQmVhdCBo YXNuJiM4MjE3O3QgcmVhbGx5IHRha2VuIG9mZi4gRXZlbiBtb3JlIHNhZGx5LCBjZXJ0YWlu IHVwcGVyIGVjaGVsb25zIG9mIHBvd2VyIGRlY3JlZSB0aGF0IHR3aWNlIGEgeWVhciBzb21l IGNvdW50cmllcyBtdXN0IGFsdGVyIHRoZWlyIGNsb2NrcyB0byBTYXZlIERheWxpZ2h0ICh3 aGF0ZXZlciB0aGF0IG1lYW5zKS48L3A+CgoJPHA+PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4gZG9lcyBpdHMgYmVzdCB0byBzaGllbGQgeW91IGZyb20gdGhpcyBtYXloZW0gYnkg YWxsb3dpbmcgeW91IHRvIHNwZWNpZnkgeW91ciBsb2NhbGUsIHRpbWUgb2Zmc2V0IGZyb20g PHNwYW4gY2xhc3M9ImNhcHMiPkdNVDwvc3Bhbj4sIGFuZCB3aGVuIDxzcGFuIGNsYXNzPSJj YXBzIj5EU1Q8L3NwYW4+IGFwcGxpZXMgaW4geW91ciB0aW1lIHpvbmUgKG5vdCBmb3JnZXR0 aW5nIHRoZSB0aW1lIHpvbmUgb2YgeW91ciBzZXJ2ZXIgaWYgaXQgaGFwcGVucyB0byBiZSBu b3doZXJlIG5lYXIgeW91KS48L3A+CgoJPHA+QW5kIHRoZXJlaW4gbGllcyB0aGUgcnViLjwv cD4KCgk8cD5Gb3IgYSBjYWxlbmRhciBzeXN0ZW0sIHRoaXMgaXMgc3ViLW9wdGltYWwuIElu IGZhY3QgaXQmIzgyMTc7cyBkb3ducmlnaHQgYW5ub3lpbmcgYmVjYXVzZSB3aGVuIHlvdSBz YXkgdGhhdCBhbiBldmVudCBpcyBnb2luZyB0byBvY2N1ciBhdCA4cG0gaW4gc2l4IG1vbnRo cyYjODIxNzsgdGltZSwgcGVza3kgRGF5bGlnaHQgU2F2aW5ncyBtYXkgdGhlbiBiZSBpbiBl ZmZlY3QgYW5kIHlvdXIgZXZlbnQgd2lsbCBhcHBlYXIgYW4gaG91ciAmIzgyMTY7b2ZmJiM4 MjE3OyAoaXQgbWF5IGxvb2sgd3JvbmcgaW4gdGhlIGFkbWluIGludGVyZmFjZSBhcyB3ZWxs IGFzIGluIHlvdXIgY2FsZW5kYXIsIGRlcGVuZGluZyBvbiB0aGUgc2V0dGluZ3MpLjwvcD4K Cgk8cD5BbHNvLCBpZiB5b3VyIHNlcnZlciBvciB5b3VyIG9mZmljZSBpcyByZWxvY2F0ZWQg YW5kIHlvdSBoYXZlIHRvIGFkanVzdCB0aW1lIHpvbmUsIGFsbCB5b3VyIGJlYXV0aWZ1bGx5 IGNyYWZ0ZWQgZGF0ZXMgd2lsbCBiZSBzaGlmdGVkLiBXZWxsLCB0aGV5JiM4MjE3O3JlIG5v dCBhY3R1YWxseSBjaGFuZ2VkIGluIHRoZSBkYXRhYmFzZSB1bmxlc3MgeW91IGVkaXQgYW4g YXJ0aWNsZSBhbmQgcmUtc2F2ZSBpdCwgYnV0IHRoZXkgPGVtPmFwcGVhcjwvZW0+IHRvIGhh dmUgc2hpZnRlZCBiZWNhdXNlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGlzIHRy eWluZyB0byBzaGllbGQgeW91IGZyb20gdGltZSBidXJlYXVjcmFjeSBpbiBhIHdvcmxkIGdv bmUgbWFkLjwvcD4KCgk8cD5VbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIGxpdHRsZSB3ZSBjYW4g ZG8gYWJvdXQgdGhpcyBhdCB0aGUgbW9tZW50IHVudGlsIHRoZSB3YXkgZGF0ZXMgYXJlIGhh bmRsZWQgaW4gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gaXMgY2hhbmdlZC4gQnV0 IHRoZXJlIGFyZSBzb21lIHNldHRpbmdzIHRoYXQgeW91IGNhbiBwbGF5IHdpdGggdG8gdHJ5 IGFuZCBtYWtlIHNlbnNlIG9mIGl0IGFsbC4gTmFtZWx5IHRoZSA8Y29kZT5nbXQ8L2NvZGU+ IGF0dHJpYnV0ZSB0byB0aGUgY2FsZW5kYXIgcGx1Z2luIGFuZCBhbnkgb2YgPHNwYW4gY2xh c3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgyMTc7cyBkYXRlLWJhc2VkIHRhZ3Mgc3VjaCBhcyA8 Y29kZT4mbHQ7dHhwOnBvc3RlZCAvJmd0OzwvY29kZT4gYW5kIDxjb2RlPiZsdDt0eHA6ZXhw aXJlcyAvJmd0OzwvY29kZT4uIFNvbWV0aW1lcyBmaWRkbGluZyB3aXRoIHRoYXQgYW5kIHRo ZSB0aW1lIHpvbmUvRFNUIGZsYWdzIHdpbGwgaGVscC4gT3RoZXIgdGltZXMgeW91JiM4MjE3 O2xsIGdldCBpbiBhIHJpZ2h0IG9sZCBtZXNzLjwvcD4KCgk8cD5JZiBhbGwgdGhhdCBmYWls cywgdGhlIGNvbmRpdGlvbmFsIHRhZyBtYXkgYmUgYWJsZSB0byBoZWxwIHlvdSBjb21wYXJl IGNlcnRhaW4gZGF0ZXMgYW5kIGFwcGx5IGRpZmZlcmVudCBhdHRyaWJ1dGVzIGRlcGVuZGlu ZyBvbiB0aGUgZGF5IG9mIHRoZSB5ZWFyLiBGYWlsaW5nIHRoYXQsIGp1c3QgdXNlIDxzcGFu IGNsYXNzPSJjYXBzIj5HTVQ8L3NwYW4+IGFuZCByZWZ1c2UgdG8gb2JzZXJ2ZSA8c3BhbiBj bGFzcz0iY2FwcyI+RFNUPC9zcGFuPiA6LSk8L3A+CgoJPGgyIGlkPSJpZmNhbCI+VGFnOiA8 Y29kZT4mbHQ7dHhwOnNtZF9pZl9jYWwmZ3Q7PC9jb2RlPjwvaDI+CgoJPHA+VGhpcyBjb25k aXRpb25hbCB0YWcgYWxsb3dzIHlvdSAmIzgyMTI7IGluc2lkZSB5b3VyIGNvbnRhaW5lci9m b3JtcyAgJiM4MjEyOyB0byB0ZXN0IGNlcnRhaW4gY29uZGl0aW9ucyBvZiB0aGUgY3VycmVu dCBldmVudC9jZWxsLiBGb3IgZW5oYW5jZWQgY29uZGl0aW9uYWwgY2hlY2tpbmcgKHBlcmhh cHMgaW4gY29uanVuY3Rpb24gd2l0aCA8YSBocmVmPSIjY2Fsbm93IiBzdHlsZT0idGV4dC1h bGlnbjpsZWZ0OyI+dHhwOnNtZF9jYWxfbm93IC8mZ3Q7PC9hPiksIGNvbnNpZGVyIHRoZSBz bWRfaWYgcGx1Z2luLjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0iYXR0c2lmY2FsIj5B dHRyaWJ1dGVzPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5mbGFnPC9z cGFuPiA6IHRoZSBjZWxsIG9yIGV2ZW50IGZsYWcocykgeW91IHdhbnQgdG8gdGVzdCwgZWFj aCBzZXBhcmF0ZWQgYnkgYSBjb21tYS4gQ2hvb3NlIGZyb206IDxjb2RlPmV2ZW50PC9jb2Rl PiwgPGNvZGU+c3RhbmRhcmQ8L2NvZGU+LCA8Y29kZT5yZWN1cmZpcnN0PC9jb2RlPiwgPGNv ZGU+cmVjdXI8L2NvZGU+LCA8Y29kZT5tdWx0aWZpcnN0PC9jb2RlPiwgPGNvZGU+bXVsdGls YXN0PC9jb2RlPiwgPGNvZGU+bXVsdGk8L2NvZGU+LCA8Y29kZT5tdWx0aXByZXY8L2NvZGU+ LCA8Y29kZT5jYW5jZWw8L2NvZGU+LCA8Y29kZT5ob2xzPC9jb2RlPiwgPGNvZGU+dG9kYXk8 L2NvZGU+IG9yIHRoZSBzcGVjaWFsIGZsYWcgPGNvZGU+U01EX0FOWTwvY29kZT4gd2hpY2gg d2lsbCB0cmlnZ2VyIGlmIHRoZSBjZWxsIG9yIGV2ZW50IGNvbnRhaW5zIGFueSBvZiB0aGUg YWJvdmUuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNh bGlkPC9zcGFuPiA6IHRoZSBjYWxlbmRhciBJRCB5b3Ugd2lzaCB0byBjaGVjayBmb3IgYSBt YXRjaC4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+eWVh cjwvc3Bhbj4gOiB0aGUgeWVhciB0aGUgY3VycmVudCBjZWxsIGZhbGxzIGluLiBEZWZhdWx0 OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5tb250aDwvc3Bhbj4gOiB0 aGUgbW9udGggbnVtYmVyICgxLTEyKSB0aGF0IHRoZSBjdXJyZW50IGNlbGwgZmFsbHMgaW4u IERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPndlZWs8L3Nw YW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHdlZWsgbnVtYmVyIHRo YXQgdGhlIGN1cnJlbnQgY2VsbCBmYWxscyBpbi4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+ZGF5PC9zcGFuPiA6IHRoZSBkYXkgbnVtYmVyIHRoZSBj dXJyZW50IGNlbGwgZmFsbHMgaW4uIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPmxvZ2ljPC9zcGFuPiA6IHdoZXRoZXIgeW91IHdhbnQgdG8gY2hlY2sg aWYgPGVtPmFsbDwvZW0+IHRlc3RzIHlvdSBub21pbmF0ZWQgYXJlIHRydWUgaW4gdGhlIGN1 cnJlbnQgY2VsbCAoPGNvZGU+bG9naWM9JnF1b3Q7YW5kJnF1b3Q7PC9jb2RlPikgb3IgPGVt PmF0IGxlYXN0IG9uZTwvZW0+IG9mIHRoZSB0ZXN0cyBpcyB0cnVlICg8Y29kZT5sb2dpYz0m cXVvdDtvciZxdW90OzwvY29kZT4pLiBEZWZhdWx0OiA8Y29kZT5hbmQ8L2NvZGU+PC9saT4K CTwvdWw+CgoJPHA+WW91IG1heSBjb21iaW5lIHRoZSB0ZXN0cyBzbywgZm9yIGV4YW1wbGUs IHlvdSBjYW4gY2hlY2sgaWYgdGhlIGNlbGwgaXMgb2YgYSBjZXJ0YWluIHR5cGUgPHNwYW4g Y2xhc3M9ImNhcHMiPkFORDwvc3Bhbj4gaXMgbGF0ZXIgdGhhbiB0aGUgMTV0aCBvZiB0aGUg bW9udGguPC9wPgoKCTxwPlJ1ZGltZW50YXJ5IGNvbXBhcmF0b3JzIGNhbiBiZSBhcHBsaWVk IHRvIHRoZSA8Y29kZT55ZWFyPC9jb2RlPiwgPGNvZGU+bW9udGg8L2NvZGU+IGFuZCA8Y29k ZT5kYXk8L2NvZGU+IGF0dHJpYnV0ZXMuIE5vcm1hbGx5IHRoZSB2YWx1ZSB5b3Ugc3VwcGx5 IHdpbGwgYmUgdGVzdGVkIGZvciBhbiBleGFjdCBtYXRjaCBidXQgaWYgeW91IHByZWZpeCBp dCB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlciBzZXF1ZW5jZXMgdGhlbiB0 aGUgYmVoYXZpb3VyIGNoYW5nZXM6PC9wPgoKCTx1bD4KCQk8bGk+PGNvZGU+Jmd0OzwvY29k ZT4gdGVzdHMgaWYgYXR0cmlidXRlIGlzIDxlbT5ncmVhdGVyIHRoYW48L2VtPiB0aGUgZ2l2 ZW4gdmFsdWUgKGUuZy4gPGNvZGU+eWVhcj0mcXVvdDsmZ3Q7MjAwOCZxdW90OzwvY29kZT4p PC9saT4KCQk8bGk+PGNvZGU+Jmd0Oz08L2NvZGU+IHRlc3RzIGlmIGF0dHJpYnV0ZSBpcyA8 ZW0+Z3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvPC9lbT4gdGhlIGdpdmVuIHZhbHVlIChlLmcu IDxjb2RlPm1vbnRoPSZxdW90OyZndDs9NyZxdW90OzwvY29kZT4pPC9saT4KCQk8bGk+PGNv ZGU+Jmx0OzwvY29kZT4gdGVzdHMgaWYgYXR0cmlidXRlIGlzIDxlbT5sZXNzIHRoYW48L2Vt PiB0aGUgZ2l2ZW4gdmFsdWUgKGUuZy4gPGNvZGU+ZGF5PSZxdW90OyZsdDsxNSZxdW90Ozwv Y29kZT4pPC9saT4KCQk8bGk+PGNvZGU+Jmx0Oz08L2NvZGU+IHRlc3RzIGlmIGF0dHJpYnV0 ZSBpcyA8ZW0+bGVzcyB0aGFuIG9yIGVxdWFsIHRvPC9lbT4gdGhlIGdpdmVuIHZhbHVlIChl LmcuIDxjb2RlPm1vbnRoPSZxdW90OyZsdDs9NSZxdW90OzwvY29kZT4pPC9saT4KCQk8bGk+ PGNvZGU+ITwvY29kZT4gdGVzdHMgaWYgYXR0cmlidXRlIGlzIDxlbT5ub3Q8L2VtPiB0aGUg Z2l2ZW4gdmFsdWUgKGUuZy4gPGNvZGU+ZGF5PSZxdW90OyExNSZxdW90OzwvY29kZT4pPC9s aT4KCTwvdWw+CgoJPGgyIGlkPSJjYWxpbmZvIj5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2Nh bF9pbmZvIC8mZ3Q7PC9jb2RlPjwvaDI+CgoJPHA+SW5zaWRlIHlvdXIgY29udGFpbmVyL2Zv cm1zLCB1c2UgdGhpcyB0YWcgdG8gb3V0cHV0IGNlcnRhaW4gaW5mb3JtYXRpb24gYWJvdXQg dGhlIGN1cnJlbnQgZXZlbnQuPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRzY2Fs aW5mbyI+QXR0cmlidXRlczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ dHlwZTwvc3Bhbj4gOiB0aGUgdHlwZShzKSBvZiBpbmZvcm1hdGlvbiB5b3Ugd2FudCB0byBy ZXR1cm4sIGVhY2ggc2VwYXJhdGVkIGJ5IGEgY29tbWEuIENob29zZSBmcm9tOiA8Y29kZT5m bGFnPC9jb2RlPiwgPGNvZGU+eWVhcjwvY29kZT4sIDxjb2RlPm1vbnRoPC9jb2RlPiwgPGNv ZGU+d2VlazwvY29kZT4sIDxjb2RlPmRheTwvY29kZT4sIDxjb2RlPnNlY3Rpb248L2NvZGU+ LCA8Y29kZT5jYXRlZ29yeTwvY29kZT4sIDxjb2RlPmF1dGhvcjwvY29kZT4sIDxjb2RlPmNh bGlkPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5qb2luPC9zcGFuPiA6 IHRoZSBjaGFyYWN0ZXJzIHlvdSB3YW50IHRvIHVzZSB0byBzZXBhcmF0ZSBlYWNoIGl0ZW0g eW91IGFza2VkIGZvci4gTm90ZSBpdCBpcyB0aGUgY2hhcmFjdGVycyA8ZW0+YmV0d2Vlbjwv ZW0+IGVhY2ggaXRlbSBzbyB0aGUgdmVyeSBmaXJzdCBlbnRyeSB3aWxsIDxzdHJvbmc+bm90 PC9zdHJvbmc+IGhhdmUgdGhlIDxjb2RlPmpvaW48L2NvZGU+IGluIGZyb250IG9mIGl0IChz ZWUgPGNvZGU+am9pbl9wcmVmaXg8L2NvZGU+KS4gRGVmYXVsdDogYSBzcGFjZTwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5qb2luX3ByZWZpeDwvc3Bhbj4gOiB0aGUgc3RyaW5n IHlvdSB3YW50IHRvIHB1dCBpbiBmcm9udCBvZiB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgcmV0 dXJuZWQgbGlzdC4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IHRoaXMgYXR0cmlidXRlIGl0IGRl ZmF1bHRzIHRvIDxjb2RlPlNNRF9BVVRPPC9jb2RlPiB3aGljaCB0cmllcyB0byBiZSBjbGV2 ZXI6Cgk8dWw+CgkJPGxpPmlmIHVzaW5nIDxjb2RlPnR5cGU9JnF1b3Q7ZmxhZyZxdW90Ozwv Y29kZT4gdGhlIGpvaW5fcHJlZml4IGlzIHNldCB0byB0aGUgc2FtZSBhcyA8Y29kZT5qb2lu PC9jb2RlPi4gVGh1cyB3aXRoIDxjb2RlPmpvaW49JnF1b3Q7IGNhbF8mcXVvdDs8L2NvZGU+ IHlvdSBtaWdodCBnZXQgPGNvZGU+IGNhbF9tdWx0aSBjYWxfdG9kYXkgY2FsX2hvbHM8L2Nv ZGU+PC9saT4KCQk8bGk+aWYgdXNpbmcgPGNvZGU+aHRtbD0mcXVvdDsxJnF1b3Q7PC9jb2Rl PiB0aGUgam9pbl9wcmVmaXggaXMgc2V0IHRvIGEgcXVlc3Rpb24gbWFyaywgdGh1czogPGNv ZGU+dHlwZT0mcXVvdDttb250aCx5ZWFyLGNhdGVnb3J5JnF1b3Q7IGh0bWw9JnF1b3Q7MSZx dW90OzwvY29kZT4gbWlnaHQgcmVuZGVyIDxjb2RlPj9tPTEyJmFtcDt5PTIwMDgmYW1wO2M9 Z2lnczwvY29kZT4sIHdoaWNoIGNhbiBiZSBwdXQgc3RyYWlnaHQgb24gdGhlIGVuZCBvZiBh biBhbmNob3I8L2xpPgoJPC91bD48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+aHRt bDwvc3Bhbj4gOiBJZiBzZXQgdG8gPGNvZGU+MTwvY29kZT4sIHJldHVybnMgbm90IG9ubHkg dGhlIHZhbHVlcyB5b3Ugc3BlY2lmaWVkIGJ1dCB0aGVpciA8c3BhbiBjbGFzcz0iY2FwcyI+ VVJMPC9zcGFuPiB2YXJpYWJsZSBuYW1lcyBhcyB3ZWxsLCBnaXZpbmcgeW91IHRoZSBlbnRp cmUgc3RyaW5nIGFzIGEgdmFsaWQgc2V0IG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3Nw YW4+IHBhcmFtZXRlcnMgd2hpY2ggY2FuIGJlIGFkZGVkIHRvIGFuIGFuY2hvci4gSXQgb3Zl cnJpZGVzIHRoZSA8Y29kZT5qb2luPC9jb2RlPiBhdHRyaWJ1dGUgYW5kIHNldHMgaXQgdG8g YW4gYW1wZXJzYW5kLiBEZWZhdWx0OiA8Y29kZT4wPC9jb2RlPi48ZGl2IGNsYXNzPSJicmVh ayI+VGhpcyBhdHRyaWJ1dGUgaXMgdXNlZnVsIGlmIHlvdSBhcmUgYnVpbGRpbmcgeW91ciBv d24gY29udGVudCBpbnNpZGUgZWFjaCBjZWxsIHZpYSBhIDxjb2RlPmZvcm08L2NvZGU+IGFu ZCB3aXNoIHRvIG1haW50YWluIHRoZSBjdXJyZW50IHNlYXJjaCBlbnZpcm9ubWVudC4gSWYg eW91IGFsbG93IHBlb3BsZSB0byBmaWx0ZXIgZXZlbnRzIGJ5IGNhdGVnb3J5IG9yIGF1dGhv ciB5b3UgY2FuIHVzZSB0aGlzIHRvIHJldHVybiB0aGUgJiM4MjE2O2N1cnJlbnQmIzgyMTc7 IHN0YXRlIG9mIGNlcnRhaW4gdmFyaWFibGVzIHNvIHlvdSBjYW4gcGFzcyB0aGVtIHRvIHRo ZSBuZXh0IHBhZ2UgYW5kIG1haW50YWluIHN0YXRlPC9kaXY+PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPmVzY2FwZTwvc3Bhbj4gOiBlc2NhcGUgPHNwYW4gY2xhc3M9ImNhcHMi PkhUTUw8L3NwYW4+IGVudGl0aWVzIHN1Y2ggYXMgPGNvZGU+Jmx0OzwvY29kZT4sIDxjb2Rl PiZndDs8L2NvZGU+IGFuZCA8Y29kZT4mYW1wOzwvY29kZT4gZm9yIHBhZ2UgdmFsaWRhdGlv biBwdXJwb3Nlcy4gU2V0IHRvIDxjb2RlPmVzY2FwZT0mcXVvdDsmcXVvdDs8L2NvZGU+IHRv IHR1cm4gaXQgb2ZmLiBEZWZhdWx0OiA8Y29kZT5odG1sPC9jb2RlPjwvbGk+Cgk8L3VsPgoK CTxoMiBpZD0iY2FsY2xhc3MiPlRhZzogPGNvZGU+Jmx0O3R4cDpzbWRfY2FsX2NsYXNzIC8m Z3Q7PC9jb2RlPjwvaDI+CgoJPHA+SW5zaWRlIHlvdXIgY29udGFpbmVyL2Zvcm1zLCB1c2Ug dGhpcyB0YWcgdG8gYWRkIGEgbGlzdCBvZiBjbGFzc2VzIHRvIHRoZSBjdXJyZW50IGNlbGwv ZXZlbnQuIFZlcnkgdXNlZnVsIGlmIGJ1aWxkaW5nIGNlbGxzIHlvdXJzZWxmIGJlY2F1c2Ug aW5zaWRlIGEgPGEgaHJlZj0iI2NhbGlmIj5jb25kaXRpb25hbDwvYT4gdGFnIHlvdSBjb3Vs ZCBhZGQgcGFydGljdWxhciBjbGFzcyBuYW1lcyBiYXNlZCBvbiBzb21lIHZhbHVlIGluIGEg Y2VsbC48L3A+CgoJPGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0dHNjYWxjbGFzcyI+QXR0cmli dXRlczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bmFtZTwvc3Bhbj4g OiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzbmFtZXMgdG8gYWRkIHRvIHRoZSBj dXJyZW50IGNlbGwvZXZlbnQuIFRoZXNlIGFyZSA8c3Ryb25nPm5vdDwvc3Ryb25nPiBzdWJq ZWN0IHRvIGFueSA8Y29kZT5jbGFzc3ByZWZpeGVzPC9jb2RlPiBzbyB3aWxsIGFsd2F5cyBh cHBlYXIgZXhhY3RseSBhcyB5b3Ugd3JpdGUgdGhlbTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0i Y2Fsbm93Ij5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2NhbF9ub3cgLyZndDs8L2NvZGU+PC9o Mj4KCgk8cD5SZXR1cm4gdGhlIGN1cnJlbnQgZGF0ZS90aW1lLCBmb3JtYXR0ZWQgaG93ZXZl ciB5b3UgcGxlYXNlLiBVc2VmdWwgZm9yIGV4dHJhY3RpbmcgcGFydHMgb2YgdGhlIGN1cnJl bnQgc3lzdGVtIHRpbWVzdGFtcCB0byBjb21wYXJlIHRoaW5ncyB2aWEgb3RoZXIgY29uZGl0 aW9uYWwgcGx1Z2lucyBvciAmIzgyMTI7IGV2ZW50dWFsbHkgJiM4MjEyOyB0aGUgPGNvZGU+ Jmx0O3R4cDpzbWRfaWZfY2FsJmd0OzwvY29kZT4gdGFnLjwvcD4KCgk8aDMgY2xhc3M9ImF0 dHMgIiBpZD0iYXR0c2NhbG5vdyI+QXR0cmlidXRlczwvaDM+CgoJPHVsPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+Zm9ybWF0PC9zcGFuPiA6IHRoZSB3YXkgeW91IHdhbnQgdGhlIGRh dGUvdGltZSByZXByZXNlbnRlZC4gVXNlIGFueSB2YWxpZCA8YSBocmVmPSJodHRwOi8vdWsy LnBocC5uZXQvc3RyZnRpbWUiPnN0cmZ0aW1lKCk8L2E+IHN0cmluZy4gRGVmYXVsdHMgdG8g dGhlIGRhdGUgZm9ybWF0IHlvdSBzZXQgaW4gQmFzaWMgUHJlZnM8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+Z210PC9zcGFuPiA6IHJldHVybiBlaXRoZXIgbG9jYWwgdGltZSAo PGNvZGU+MDwvY29kZT4pIGFjY29yZGluZyB0byB0aGUgdGltZSB6b25lIHNldCBpbiBCYXNp YyBQcmVmcywgb3IgPHNwYW4gY2xhc3M9ImNhcHMiPkdNVDwvc3Bhbj4gdGltZSAoPGNvZGU+ MTwvY29kZT4pLiBEZWZhdWx0OiA8Y29kZT4wPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5sYW5nPC9zcGFuPiA6IGFuIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3Nw YW4+IGxhbmd1YWdlIGNvZGUgdGhhdCBmb3JtYXRzIHRpbWUgc3RyaW5ncyBzdWl0YWJsZSBm b3IgdGhlIHNwZWNpZmllZCBsYW5ndWFnZSAob3IgbG9jYWxlKSBhcyBkZWZpbmVkIGJ5IDxh IGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzYzOSI+PHNwYW4gY2xh c3M9ImNhcHMiPklTTzwvc3Bhbj4gNjM5PC9hPi4gRGVmYXVsdDogdW5zZXQgKGkuZS4gdXNl IHRoZSB2YWx1ZSBhcyBzdGF0ZWQgaW4gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4g cHJlZnMpPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJhcnRldiI+VGFnOiA8Y29kZT4mbHQ7dHhw OnNtZF9hcnRpY2xlX2V2ZW50IC8mZ3Q7PC9jb2RlPjwvaDI+CgoJPHA+V2hlbiB5b3UgY3Jl YXRlIGV2ZW50cywgdGhleSByZWFsbHkgb25seSBleGlzdCBvbmNlIGFzIGEgc2luZ2xlIGFy dGljbGU7IHRoZSByZXBldGl0aW9uIGlzIGEgdHJpY2suIFRodXMgdGhlIGJ1aWx0LWluIGFy dGljbGUgdGFncyBvbmx5IHNob3cgdGhlIHNpbmdsZSwgcmVhbCBhcnRpY2xlcy48L3A+CgoJ PHA+VGhpcyB0YWcgJiM4MjEyOyBzaW1pbGFyIGluIGZ1bmN0aW9uIHRvIDxjb2RlPiZsdDt0 eHA6YXJ0aWNsZV9jdXN0b20gLyZndDs8L2NvZGU+ICYjODIxMjsgYWxsb3dzIHlvdSB0byBz ZWUgcmVjdXJyaW5nIGFydGljbGVzIGFzIGlmIHRoZXkgd2VyZSAmIzgyMTY7cmVhbCYjODIx NzsgYXJ0aWNsZXMgaW4gdGhlIGRhdGFiYXNlLiBJbnNpZGUgdGhlIHRhZyYjODIxNztzIDxj b2RlPmZvcm08L2NvZGU+IG9yIGNvbnRhaW5lciB5b3UgY2FuIHVzZSBhbGwgZXhpc3Rpbmcg YXJ0aWNsZSB0YWdzIHRvIGRpc3BsYXkgYW55IGluZm9ybWF0aW9uIHlvdSBsaWtlIGFib3V0 IGVhY2ggJiM4MjE2O3ZpcnR1YWwmIzgyMTc7IGFydGljbGUuPC9wPgoKCTxoMyBjbGFzcz0i YXR0cyAiIGlkPSJhdHRzYXJ0ZXYiPkF0dHJpYnV0ZXM8L2gzPgoKCTx1bD4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPnN0ZXBmaWVsZDwvc3Bhbj4gOiBzYW1lIGFzIGluIDxhIGhyZWY9 IiN1c2FnZSI+c21kX2NhbGVuZGFyPC9hPiwgdGhlIElEIG9mIHRoZSBmaWVsZCB0aGF0IGNv bnRhaW5zIGV2ZW50IHJlcGV0aXRpb25zLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5za2lwZmllbGQ8L3NwYW4+IDogc2FtZSBhcyBpbiA8YSBocmVm PSIjdXNhZ2UiPnNtZF9jYWxlbmRhcjwvYT4sIHRoZSBJRCBvZiB0aGUgZmllbGQgdGhhdCBj b250YWlucyB0aGUgbGlzdCBvZiBldmVudCBjYW5jZWxsYXRpb24gZGF0ZXMuIERlZmF1bHQ6 IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnR5cGU8L3NwYW4+IDogdGhl IHR5cGVzIG9mIGV2ZW50IHRvIGRpc3BsYXkuIENob29zZSBmcm9tIDxjb2RlPnN0YW5kYXJk PC9jb2RlPiwgPGNvZGU+cmVjdXI8L2NvZGU+IG9yIDxjb2RlPm11bHRpPC9jb2RlPi4gRGVm YXVsdDogPGNvZGU+c3RhbmRhcmQsIHJlY3VyLCBtdWx0aTwvY29kZT48L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+c2VjdGlvbjwvc3Bhbj4gOiByZXN0cmljdCB0aGUgZXZlbnRz IHRvIGEgbGlzdCBvZiBzZWN0aW9ucy4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+Y2F0ZWdvcnk8L3NwYW4+IDogcmVzdHJpY3QgdGhlIGV2ZW50cyB0 byBhIGxpc3Qgb2YgY2F0ZWdvcmllcy4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+YXV0aG9yPC9zcGFuPiA6IHJlc3RyaWN0IHRoZSBldmVudHMgdG8g YSBsaXN0IG9mIGF1dGhvcnMuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPmlkPC9zcGFuPiA6IHJlc3RyaWN0IHRoZSBldmVudHMgdG8gYSBsaXN0IG9m IGFydGljbGUgSURzLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5zdGF0dXM8L3NwYW4+IDogcmVzdHJpY3QgdGhlIGV2ZW50cyB0byB0aGlzIGxpc3Qg b2YgYXJ0aWNsZSBzdGF0dXMuIERlZmF1bHQ6IDxjb2RlPmxpdmU8L2NvZGU+PC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmV4cGlyZWQ8L3NwYW4+IDogZGVmaW5pdGl2ZWx5IGhp ZGUgKDxjb2RlPjA8L2NvZGU+KSBvciBzaG93ICg8Y29kZT4xPC9jb2RlPikgZXhwaXJlZCBl dmVudHMuIExlYXZlIGJsYW5rIHRvIHVzZSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4gQWR2YW5jZWQgUHJlZmVyZW5jZSA8Y29kZT5QdWJsaXNoIGV4cGlyZWQgYXJ0aWNs ZXM8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnRpbWU8L3NwYW4+IDog b25seSBzaG93IGV2ZW50cyBpbiB0aGlzIHRpbWUgZnJhbWUuIENob29zZSBmcm9tIDxjb2Rl PmFueTwvY29kZT4sIDxjb2RlPmZ1dHVyZTwvY29kZT4gb3IgPGNvZGU+cGFzdDwvY29kZT4u IERlZmF1bHQ6IDxjb2RlPmFueTwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+bW9udGg8L3NwYW4+IDogb25seSBzaG93IGV2ZW50cyB0aGF0IG9jY3VyIGluIHRoZSBn aXZlbiA8c3BhbiBjbGFzcz0iY2FwcyI+WVlZWTwvc3Bhbj4tbW0uIERlZmF1bHQ6IHVuc2V0 PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZyb208L3NwYW4+IDogb25seSBzaG93 IGV2ZW50cyBmcm9tIHRoaXMgc3RhcnQgZGF0ZS4gQ2FuIGJlIGFueSB2YWxpZCBkYXRlIGZv cm1hdC4gRGVmYXVsdDogdW5zZXQgKGkuZS4gYWxsIGRhdGVzKTwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj50bzwvc3Bhbj4gOiBvbmx5IHNob3cgZXZlbnRzIHVwIHRvIHRoaXMg ZW5kIGRhdGUuIENhbiBiZSBhbnkgdmFsaWQgZGF0ZSBmb3JtYXQuIERlZmF1bHQ6IHVuc2V0 IChpLmUuIGFsbCBkYXRlcyk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c29ydDwv c3Bhbj4gOiBvcmRlciB0aGUgZXZlbnRzIGJ5IHRoaXMgY29sdW1uLiBUaGUgbW9zdCB1c2Vm dWwgdmFsdWUgaXMgdGhlIGRlZmF1bHQ6IDxjb2RlPlBvc3RlZCBhc2M8L2NvZGU+PC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZvcm08L3NwYW4+IDogcGFzcyBlYWNoIG1hdGNo aW5nIGV2ZW50IHRvIHRoZSBnaXZlbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBm b3JtLiBEZWZhdWx0OiB1bnNldC4gTm90ZSB0aGF0IHVzaW5nIHRoZSBjb250YWluZXIgb3Zl cnJpZGVzIHRoaXMgYXR0cmlidXRlLCBhbmQgaWYgeW91IHNwZWNpZnkgbmVpdGhlciBhIGZv cm0gbm9yIGNvbnRhaW5lciwgeW91IHdpbGwgc2VlIGEgbGlzdCBvZiBhcnRpY2xlIHBvc3Rl ZCBkYXRlczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5vZmZzZXQ8L3NwYW4+IDog dW5saWtlIGFydGljbGVfY3VzdG9tLCBldmVudHMgZnJvbSB0aGUgc21kX2FydGljbGVfZXZl bnQgdGFnIG1heSBiZSBwYWdlZCB1c2luZyA8Y29kZT4mbHQ7dHhwOm9sZGVyIC8mZ3Q7PC9j b2RlPiBhbmQgPGNvZGU+Jmx0O3R4cDpuZXdlciAvJmd0OzwvY29kZT4uIFlvdSBtYXkgc3Bl Y2lmeSBhIGZpeGVkIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgbGlzdCBvZiBldmVu dHMgaWYgeW91IHdpc2guIERlZmF1bHQ6IDxjb2RlPjA8L2NvZGU+PC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPmxpbWl0PC9zcGFuPiA6IG9ubHkgc2hvdyB0aGlzIG1hbnkgZXZl bnRzIG1heGltdW0gPHN0cm9uZz5wZXIgcGFnZTwvc3Ryb25nPiwgaS5lLiB0aGUgbnVtYmVy IG9mIGV2ZW50cyB0byBkaXNwbGF5LCB3aGV0aGVyIHRoZXkgY29tZSBmcm9tIG9uZSAmIzgy MTY7cmVhbCYjODIxNzsgYXJ0aWNsZSBvciBtYW55LiBEZWZhdWx0OiA8Y29kZT4xMDwvY29k ZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZXZlbnRsaW1pdDwvc3Bhbj4gOiBv bmx5IHNob3cgdGhpcyBtYW55IGV2ZW50cyBtYXhpbXVtLCA8c3Ryb25nPnBlciBldmVudDwv c3Ryb25nPi4gU28gaWYgeW91IGhhdmUgYSB3ZWVrbHkgcmVwZWF0ZWQgZXZlbnQgdGhhdCBs YXN0cyBmb3IgZm91ciBtb250aHMgYW5kIHlvdSBzZXQgPGNvZGU+ZXZlbnRsaW1pdD0mcXVv dDs2JnF1b3Q7PC9jb2RlPiB5b3Ugd2lsbCBvbmx5IHNlZSBhIG1heGltdW0gb2YgNiBldmVu dHMgZnJvbSBldmVyeSBhcnRpY2xlIGNvbnRhaW5pbmcgcmVwZXRpdGlvbi4gVGhlIHJhbmdl IChzdGFydCBhbmQgZW5kIGRhdGUpIGlzIGRldGVybWluZWQgYnkgb3RoZXIgcGx1Z2luIGF0 dHJpYnV0ZXMuIERlZmF1bHQ6IDxjb2RlPjEwPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5wYWdlYnk8L3NwYW4+IDogZXNvdGVyaWMgcGFnaW5nIGZlYXR1cmUsIGlk ZW50aWNhbCB0byA8Y29kZT4mbHQ7dHhwOmFydGljbGUgLyZndDs8L2NvZGU+LiBEZWZhdWx0 OiBzYW1lIGFzIDxjb2RlPmxpbWl0PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5wZ29ubHk8L3NwYW4+IDogc2V0IHRvIDxjb2RlPjE8L2NvZGU+IHRvIHBlcmZvcm0g dGhlIHBhZ2luZyBhY3Rpb24gd2l0aG91dCBkaXNwbGF5aW5nIGFueXRoaW5nLiBQcm9iYWJs eSB1c2VsZXNzLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij53cmFwdGFnPC9zcGFuPiA6IHRoZSAoWClIVE1MIHRhZyAod2l0aG91dCBicmFja2V0cykg dG8gd3JhcCB0aGUgbGlzdCBpbi4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+YnJlYWs8L3NwYW4+IDogdGhlIChYKUhUTUwgdGFnIHRvIHNlcGFyYXRl IGVhY2ggaXRlbSB3aXRoLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5jbGFzczwvc3Bhbj4gOiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bh bj4gY2xhc3MgdG8gYXBwbHkgdG8gdGhlIHdyYXB0YWcuIERlZmF1bHQ6IHVuc2V0PC9saT4K CTwvdWw+CgoJPGgyIGNsYXNzPSJleGFtcGxlcyI+RXhhbXBsZXM8L2gyPgoKCTxoMyBpZD0i ZWcxIj5FeGFtcGxlIDE8L2gzPgoKCTxwPlRoZSBiZWF1dHkgb2YgdGhlIHBsdWdpbiBpcyB0 aGF0IHlvdSBoYXZlIHRoZSBlbnRpcmUgYXJzZW5hbCBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+ VFhQPC9zcGFuPiB0YWdzIGF2YWlsYWJsZSB0byB5b3UgaWYgeW91IGNob29zZSB0byB1c2Ug YSA8Y29kZT5mb3JtPC9jb2RlPi4gVGh1cyB5b3UgY2FuIHNldCB0aGUgYXJ0aWNsZSYjODIx NztzIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgdG8gdGhlIHNhbWUgZGF5IGFuZCBzZXQgdGhlIHN0 YXJ0IGFuZCBlbmQgdGltZXMgdG8gaW5kaWNhdGUgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhl IGV2ZW50LiBZb3UgY2FuIHRoZW4gdXNlIHN0YW5kYXJkIDxjb2RlPiZsdDt0eHA6cG9zdGVk IC8mZ3Q7PC9jb2RlPiBvciA8Y29kZT4mbHQ7dHhwOmV4cGlyZXMgLyZndDs8L2NvZGU+IHRh Z3Mgd2l0aCB2YXJpb3VzIDxjb2RlPmZvcm1hdDwvY29kZT4gc3RyaW5ncyB0byByZW5kZXIg dGhlIGV2ZW50JiM4MjE3O3MgY3JpdGVyaWEuPC9wPgoKCTxwPlNpbWlsYXJseSB5b3UgY2Fu IHVzZSA8Y29kZT4mbHQ7dHhwOmV4Y2VycHQgLyZndDs8L2NvZGU+IGFuZCA8Y29kZT4mbHQ7 dHhwOnRpdGxlIC8mZ3Q7PC9jb2RlPiBvciBvZiBjb3Vyc2UgYW55IGN1c3RvbSBmaWVsZHMg dG8gc2hvdyBhcyBtdWNoIG9yIGFzIGxpdHRsZSBkZXRhaWwgYXMgeW91IGxpa2UgaW4gdGhl IGNhbGVuZGFyIGNlbGwuPC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJi bG9jayI+Jmx0O3R4cDpzbWRfY2FsZW5kYXIgc2VjdGlvbj0mcXVvdDtldmVudHMmcXVvdDsm Z3Q7CiZsdDtkaXYmZ3Q7CiAgIEV2ZW50OiAmbHQ7dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6 dGl0bGUgLyZndDsmbHQ7L3R4cDpwZXJtbGluayZndDsKICAgJmx0O2JyIC8mZ3Q7Jmx0O3R4 cDpleGNlcnB0IC8mZ3Q7CiZsdDsvZGl2Jmd0OwombHQ7ZGl2IGNsYXNzPSZxdW90O2V2dGlt ZSZxdW90OyZndDsKICAgU3RhcnQ6ICZsdDt0eHA6cG9zdGVkIGZvcm1hdD0mcXVvdDslSDol TSZxdW90OyAvJmd0OwombHQ7L2RpdiZndDsKJmx0O2RpdiBjbGFzcz0mcXVvdDtldnRpbWUm cXVvdDsmZ3Q7CiAgIEVuZDogJmx0O3R4cDpleHBpcmVzIGZvcm1hdD0mcXVvdDslSDolTSZx dW90OyAvJmd0OwombHQ7L2RpdiZndDsKJmx0Oy90eHA6c21kX2NhbGVuZGFyJmd0Owo8L2Nv ZGU+PC9wcmU+CgoJPGgzIGlkPSJlZzIiPkV4YW1wbGUgMjwvaDM+CgoJPHA+VXNpbmcgdGhl IGNvbmRpdGlvbmFsIHRhZyB5b3UgY2FuIHRha2UgYWN0aW9uIGlmIGNlcnRhaW4gZXZlbnRz IGNvbnRhaW4gcGFydGljdWxhciBmbGFncy4gVGhpcyBleGFtcGxlIGFsc28gc2hvdyBhIGNv bXBsZXRlbHkgdXNlbGVzcyBtYW5uZXIgb2YgZW1wbG95aW5nIDxjb2RlPiZsdDt0eHA6c21k X2NhbF9ub3cgLyZndDs8L2NvZGU+LjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBj bGFzcz0iYmxvY2siPlRpbWUgaXM6ICZsdDt0eHA6c21kX2NhbF9ub3cgZm9ybWF0PSZxdW90 OyVUJnF1b3Q7IC8mZ3Q7CiZsdDt0eHA6c21kX2NhbGVuZGFyIGZvcm09JnF1b3Q7ZXZmb3Jt JnF1b3Q7CiAgICAgc3RlcGZpZWxkPSZxdW90O2N1c3RvbV8zJnF1b3Q7IHNraXBmaWVsZD0m cXVvdDtjdXN0b21fNiZxdW90OwogICAgIHNwYW5mb3JtPSZxdW90O211bHRpcyZxdW90OyAv Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+SW4gZm9ybSA8Y29kZT5ldmZvcm08L2NvZGU+Ojwv cD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21k X2lmX2NhbCBmbGFnPSZxdW90O3JlY3VyJnF1b3Q7Jmd0OwogICZsdDt0eHA6cGVybWxpbmsm Z3Q7KFJFQ1VSKSZsdDsvdHhwOnBlcm1saW5rJmd0OwombHQ7dHhwOmVsc2UgLyZndDsKICAg Jmx0O3R4cDpwZXJtbGluayZndDsmbHQ7dHhwOnRpdGxlIC8mZ3Q7Jmx0Oy90eHA6cGVybWxp bmsmZ3Q7CiAgICZsdDt0eHA6c21kX2lmX2NhbCBmbGFnPSZxdW90O211bHRpZmlyc3QmcXVv dDsmZ3Q7CiAgICAgICZsdDtzcGFuIGNsYXNzPSZxdW90O3JpZ2h0JnF1b3Q7Jmd0OyZhbXA7 bGFxdW87LS0mbHQ7L3NwYW4mZ3Q7CiAgICZsdDsvdHhwOnNtZF9pZl9jYWwmZ3Q7CiAgICZs dDt0eHA6c21kX2lmX2NhbCBmbGFnPSZxdW90O3JlY3VyZmlyc3QmcXVvdDsmZ3Q7CiAgICAg ICZsdDtzcGFuJmd0O09uZSBvZiBtYW55Li4uJmx0Oy9zcGFuJmd0OwogICAmbHQ7L3R4cDpz bWRfaWZfY2FsJmd0OwombHQ7L3R4cDpzbWRfaWZfY2FsJmd0Owo8L2NvZGU+PC9wcmU+CgoJ PHA+QW5kIGluIGZvcm0gPGNvZGU+bXVsdGlzPC9jb2RlPjo8L3A+Cgo8cHJlIGNsYXNzPSJi bG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9pZl9jYWwgZmxhZz0mcXVv dDttdWx0aSwgbXVsdGlwcmV2JnF1b3Q7CiAgICAgbG9naWM9JnF1b3Q7b3ImcXVvdDsmZ3Q7 CiAgICZsdDt0eHA6cGVybWxpbmsmZ3Q7LS0mYW1wO3JhcXVvOy0tJmx0Oy90eHA6cGVybWxp bmsmZ3Q7CiZsdDsvdHhwOnNtZF9pZl9jYWwmZ3Q7CiZsdDt0eHA6c21kX2lmX2NhbCBmbGFn PSZxdW90O211bHRpbGFzdCZxdW90OyZndDsKICAgJmx0O3R4cDpwZXJtbGluayZndDsKICAg ICAgJmx0O3NwYW4gY2xhc3M9JnF1b3Q7bGVmdCZxdW90OyZndDstLSZhbXA7cmFxdW87Jmx0 Oy9zcGFuJmd0OyBFTkQgJmx0O3R4cDp0aXRsZSAvJmd0OwogICAmbHQ7L3R4cDpwZXJtbGlu ayZndDsKJmx0Oy90eHA6c21kX2lmX2NhbCZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPk5vdGlj ZSB0aGF0IDxjb2RlPm11bHRpZmlyc3Q8L2NvZGU+IGlzIHRlc3RlZCBpbnNpZGUgdGhlIHNh bWUgZm9ybSBhcyBzdGFuZGFyZCBldmVudHMuIFRoaXMgaXMgYmVjYXVzZSBvbmx5IDxlbT5j b250aW51YXRpb24gc3Bhbm5lZCBjZWxsczwvZW0+IGFyZSBwYXNzZWQgdG8gdGhlIDxjb2Rl PnNwYW5mb3JtPC9jb2RlPjsgdGhlIGZpcnN0IGV2ZW50IG9mIGEgc3Bhbm5lZCBncm91cCBp cyBqdXN0IGxpa2UgYW55IHN0YW5kYXJkIGV2ZW50LiBTaW1pbGFybHksIGlmIHlvdSBoYWQg YmVlbiB1c2luZyA8Y29kZT5yZWN1cmZvcm08L2NvZGU+IHRoZSBmaXJzdCBldmVudCBvZiB0 aGUgcmVjdXJyaW5nIHNldCB3b3VsZCBiZSBwcm9jZXNzZWQgaW4gdGhlIHVzdWFsIGZvcm0v Y29udGFpbmVyIGFuZCBldmVyeSBzdWJzZXF1ZW50IGV2ZW50IHdvdWxkIGJlIHBhc3NlZCB0 byB0aGUgZGVkaWNhdGVkIGZvcm0uPC9wPgoKCTxoMyBpZD0iZWczIj5FeGFtcGxlIDM8L2gz PgoKCTxwPllvdSBjb3VsZCB1c2UgdGhlIGNhbGVuZGFyIHRhZ3MgdG8gb3V0cHV0IHZhcmlv dXMgcGllY2VzIG9mIGZsYWcgaW5mb3JtYXRpb24gdG8gYnVpbGQgeW91ciBvd24gY2xhc3Mg bmFtZXMuIFRoaXMgZXhhbXBsZSBhbHNvIGRlbW9uc3RyYXRlcyB0aGUgPGNvZGU+aHRtbDwv Y29kZT4gYXR0cmlidXRlIG9mIDxjb2RlPiZsdDt0eHA6c21kX2NhbF9pbmZvIC8mZ3Q7PC9j b2RlPiB0byBidWlsZCB1cCBhIHF1ZXJ5IHN0cmluZyB0aGF0IGlzIHBhc3NlZCBhbG9uZyB3 aXRoIGFuIGV2ZW50JiM4MjE3O3MgPGNvZGU+Y2F0ZWdvcnkxPC9jb2RlPiB3aGVuIGEgdmlz aXRvciBjbGlja3MgdGhlIGFuY2hvci48L3A+CgoJPHA+VGhpcyBhbGxvd3MgeW91ciBzaXRl IHZpc2l0b3JzIHRvIGZpbHRlciBldmVudHMgYnkgY2F0ZWdvcnkgd2hpbGUgcmV0YWluaW5n IHRoZSBhYmlsaXR5IHRvIHNob3cgdGhlIGNhbGVuZGFyIGZvciB0aGUgY3VycmVudCBtb250 aC95ZWFyIGFuZCBzZWN0aW9uIHRoZXkgYXJlIHZpZXdpbmcgaW5zdGVhZCBvZiBkcm9wcGlu ZyBiYWNrIHRvIHRoZSBjdXJyZW50IG1vbnRoL3llYXIgbGlrZSBvdGhlciBjYWxlbmRhciBz eXN0ZW1zIG9mdGVuIGRvLjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0i YmxvY2siPiZsdDt0eHA6c21kX2NhbGVuZGFyIGlzb3dlZWtzPSZxdW90O1dFRUsjJnF1b3Q7 CiAgICAgeWVhcndpZHRoPSZxdW90OzAsMiZxdW90OyBzZWxlY3Q9JnF1b3Q7eWVhciwgbW9u dGgmcXVvdDsKICAgICBzdGVwZmllbGQ9JnF1b3Q7Y3VzdG9tXzEmcXVvdDsgc2tpcGZpZWxk PSZxdW90O2N1c3RvbV8yJnF1b3Q7CiAgICAgc2hvd3NraXBwZWQ9JnF1b3Q7MSZxdW90OyBl eHBpcmVkPSZxdW90OzEmcXVvdDsmZ3Q7CiAgICZsdDtzcGFuIGNsYXNzPSZxdW90OyZsdDt0 eHA6c21kX2NhbF9pbmZvIGpvaW49JnF1b3Q7IGNhbF8mcXVvdDsgLyZndDsmcXVvdDsmZ3Q7 CiAgICAgICZsdDt0eHA6cGVybWxpbmsmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvdHhw OnBlcm1saW5rJmd0OwogICAgICAmbHQ7YSBocmVmPSZxdW90Oz9jPSZsdDt0eHA6Y2F0ZWdv cnkxCiAgICAgICAgIC8mZ3Q7JmFtcDsmbHQ7dHhwOnNtZF9jYWxfaW5mbyB0eXBlPSZxdW90 O3NlY3Rpb24sIHllYXIsCiAgICAgICAgIG1vbnRoLCBjYWxpZCZxdW90OyBodG1sPSZxdW90 OzEmcXVvdDsgam9pbl9wcmVmaXg9JnF1b3Q7JnF1b3Q7CiAgICAgICAgIC8mZ3Q7JnF1b3Q7 Jmd0OyZsdDt0eHA6Y2F0ZWdvcnkxIHRpdGxlPSZxdW90OzEmcXVvdDsgLyZndDsmbHQ7L2Em Z3Q7CiAgICZsdDsvc3BhbiZndDsKJmx0Oy90eHA6c21kX2NhbGVuZGFyJmd0Owo8L2NvZGU+ PC9wcmU+CgoJPHA+V2hhdCBpcyBhbHNvIHVzZWZ1bCBhYm91dCB0aGUgPGNvZGU+Jmx0O3R4 cDpzbWRfY2FsX2luZm8gLyZndDs8L2NvZGU+IHRhZyBpcyB0aGF0IGlmIGEgcGFydGljdWxh ciB2YWx1ZSBpcyBub3Qgc2V0IGl0IHdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBvdXRw dXQuPC9wPgoKCTxoMyBpZD0iZWc0Ij5FeGFtcGxlIDQ8L2gzPgoKPHByZSBjbGFzcz0iYmxv Y2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O2gyJmd0O1VwY29taW5nIEV2ZW50cyZsdDsv aDImZ3Q7CiZsdDt0eHA6c21kX2FydGljbGVfZXZlbnQgc3RlcGZpZWxkPSZxdW90O2N1c3Rv bV8xJnF1b3Q7CiAgICAgd3JhcHRhZz0mcXVvdDtkbCZxdW90OyB0aW1lPSZxdW90O2Z1dHVy ZSZxdW90OyBldmVudGxpbWl0PSZxdW90OzUmcXVvdDsmZ3Q7CiAgICZsdDt0eHA6aWZfZGlm ZmVyZW50Jmd0OwogICAgICZsdDtkdCZndDsmbHQ7dHhwOnBvc3RlZCBmb3JtYXQ9JnF1b3Q7 JUIgJVkmcXVvdDsgLyZndDsmbHQ7L2R0Jmd0OwogICAmbHQ7L3R4cDppZl9kaWZmZXJlbnQm Z3Q7CiAgICZsdDtkZCZndDsKICAgICAgJmx0O3R4cDpwZXJtbGluayZndDsmbHQ7dHhwOnRp dGxlLyZndDsmbHQ7L3R4cDpwZXJtbGluayZndDsKICAgICAgJmx0O3R4cDpwb3N0ZWQgLyZn dDsKICAgJmx0Oy9kZCZndDsKJmx0Oy90eHA6c21kX2FydGljbGVfZXZlbnQmZ3Q7CjwvY29k ZT48L3ByZT4KCgk8cD5UaGF0IGxpc3RzIHRoZSBuZXh0IDUgdXBjb21pbmcgJiM4MjEyOyBy ZWN1cnJpbmcgJiM4MjEyOyBldmVudHMsIHBsdXMgYW55IHN0YW5kYXJkIGFuZCBzcGFubmVk IGV2ZW50cywgZm9ybWF0dGluZyB0aGVtIGFzIGEgZGVmaW5pdGlvbiBsaXN0LiBJZiB5b3Ug YWRkIHBhZ2luYXRpb24gdGFncyB5b3UgY2FuIGZsaXAgdGhyb3VnaCBhbGwgdGhlIGV2ZW50 czsgdGhleSB3aWxsIGJlIGRpc3BsYXllZCAxMCBhdCBhIHRpbWUgb24gZWFjaCBwYWdlIChp ZiB5b3Ugd2FudCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIHBhZ2UgeW91IGFyZSBvbiBhcyB5 b3UgZmxpcCB0aHJvdWdoIGEgY2FsZW5kYXIgdGhhdCBpcyBpbiBhIHNpZGViYXIsIGFkZCA8 Y29kZT5wZzwvY29kZT4gdG8gdGhlIDxjb2RlPm1haW50YWluPC9jb2RlPiBhdHRyaWJ1dGUg aW4geW91ciBjYWxlbmRhcikuPC9wPgoKCTxwPk5vdGUgdGhlIGh5cGVybGlua2VkIHRpdGxl IHNob3duIGhlcmUgd2lsbCByZXR1cm4gdG8gdGhlICYjODIxNjtyZWFsJiM4MjE3OyBhcnRp Y2xlIHdoZW4gY2xpY2tlZC4gSWYgeW91IHdhbnRlZCB0byBhbGxvdyBwZW9wbGUgdG8gYm9v ayBhbiBldmVudCBvbiB5b3VyIGluZGl2aWR1YWwgYXJ0aWNsZSwgdHJ5IHRoaXM6PC9wPgoK PHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDppZl9pbmRp dmlkdWFsX2FydGljbGUmZ3Q7CiAmbHQ7dHhwOmFydGljbGUgbGltaXQ9JnF1b3Q7MSZxdW90 OyZndDsKICAmbHQ7aDMmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvaDMmZ3Q7CiAgJmx0 O3R4cDpib2R5IC8mZ3Q7CiAgJmx0O3AmZ3Q7UGxlYXNlIGNob29zZSBhIGRhdGUgdG8gYm9v azombHQ7L3AmZ3Q7CiAgJmx0O3NlbGVjdCZndDsKICAmbHQ7dHhwOnNtZF9hcnRpY2xlX2V2 ZW50IHN0ZXBmaWVsZD0mcXVvdDtjdXN0b21fMSZxdW90OwogICAgdHlwZT0mcXVvdDtyZWN1 ciZxdW90OyBpZD0mIzM5OyZsdDt0eHA6YXJ0aWNsZV9pZCAvJmd0OyYjMzk7Jmd0OwogICAg Jmx0O29wdGlvbgogICAgIHZhbHVlPSYjMzk7Jmx0O3R4cDpwb3N0ZWQgZm9ybWF0PSZxdW90 OyVHLSVtLSVkJnF1b3Q7LyZndDsmIzM5OyZndDsKICAgICAgJmx0O3R4cDpwb3N0ZWQgZm9y bWF0PSZxdW90OyVtICVkLCAkRyZxdW90OyAvJmd0OwogICAgJmx0Oy9vcHRpb24mZ3Q7CiAg Jmx0Oy90eHA6c21kX2FydGljbGVfZXZlbnQmZ3Q7CiAgJmx0Oy9zZWxlY3QmZ3Q7CiAmbHQ7 L3R4cDphcnRpY2xlJmd0OwombHQ7L3R4cDppZl9pbmRpdmlkdWFsX2FydGljbGUmZ3Q7Cjwv Y29kZT48L3ByZT4KCgk8cD5XaXRoIHNvbWUgY3VubmluZyB5b3UgY291bGQgZXZlbiBhZGQg dGhlICYjODIxNjt2aXJ0dWFsJiM4MjE3OyBkYXRlIHRoYXQgdGhleSBjaG9zZSBpbiB5b3Vy IG9yaWdpbmFsIGFydGljbGVfZXZlbnQgbGlzdCBhbmQgcGFzcyBpdCBhcyBhIDxzcGFuIGNs YXNzPSJjYXBzIj5VUkw8L3NwYW4+IHZhcmlhYmxlIHRvIHlvdXIgaW5kaXZpZHVhbCBhcnRp Y2xlIHdoZXJlIHlvdSBjb3VsZCByZWFkIHRoZSB2YWx1ZSBhbmQgcHJlLXNlbGVjdCB0aGUg ZGF0ZSBmb3IgdGhlIHZpc3Rvci48L3A+CgoJPGgyIGNsYXNzPSJjaGFuZ2Vsb2ciPkNoYW5n ZWxvZzwvaDI+CgoJPHVsPgoJCTxsaT4yMSBEZWMgMDggfCAwLjEgfCBJbml0aWFsIHJlbGVh c2UgKHNwb25zb3JzIG9ubHkpPC9saT4KCQk8bGk+MjIgRGVjIDA4IHwgMC4yIHwgRml4ZWQg YSBmZXcgVzNDIHZhbGlkYXRpb24gaXNzdWVzIGFuZCBhZGRlZCBtb3JlIGRhdGEgdmFsaWRp dHkgY2hlY2tzIDsgYXR0ZW1wdGVkIHRvIGFkZHJlc3MgZGF0ZS90aW1lem9uZSBwcm9ibGVt cyAoYW5kIG1vc3RseSBmYWlsZWQsIHNvIHdyb3RlIGFib3V0IGl0IGluc3RlYWQpIDsgZW5o YW5jZWQgPGNvZGU+c21kX2lmX2NhbDwvY29kZT4gdGFnIHRvIGNoZWNrIGZvciBkYXRlcyBh bmQgPGNvZGU+Y2FsaWQ8L2NvZGU+IDsgYWRkZWQgPGNvZGU+ZXNjYXBlPC9jb2RlPiBhdHRy aWJ1dGUgdG8gc21kX2NhbF9pbmZvIHRhZzwvbGk+CgkJPGxpPjIzIERlYyAwOCB8IDAuMjEg fCBDaGFuZ2VkIDxjb2RlPmlzb3dlZWtzPC9jb2RlPiBzbyBhbnkgZ2l2ZW4gdGV4dCBiZWNv bWVzIHRoZSBjb2x1bW4gaGVhZGluZyA7IGFkZGVkIDxjb2RlPndlZWs8L2NvZGU+IGF0dHJp YnV0ZSB0byBhbGwgcmVsZXZhbnQgdGFncyA7IGFkZGVkIDxjb2RlPmRheTwvY29kZT4gYXR0 cmlidXRlIHRvIDxjb2RlPnNtZF9jYWxfaW5mbzwvY29kZT4gOyBmaXhlZCA8Y29kZT5tb250 aDwvY29kZT4gYW5kIDxjb2RlPnllYXI8L2NvZGU+IGF0dHJpYnV0ZXMgc28gY2FsZW5kYXIg bmF2aWdhdGlvbiBvdmVycmlkZXMgdGhlbTwvbGk+CgkJPGxpPjI2IERlYyAwOCB8IDAuMjIg fCBFbmhhbmNlZCA8Y29kZT5uYXZjbGFzczwvY29kZT4gOyBhZGRlZCA8Y29kZT5saW5rcG9z dGVkPC9jb2RlPiAoYm90aCB0aGFua3MgbXJkYWxlKTwvbGk+CgkJPGxpPjI4IERlYyAwOCB8 IDAuMjMgfCBDb3JyZWN0ZWQgdGltZXpvbmUgb2Zmc2V0IGZhdXggcGFzIDsgYWRkZWQgZmly c3QvbGFzdCB3ZWVrZGF5IHJlY3VycmVuY2UgYW5kIDxjb2RlPnJlY3VyZm9ybTwvY29kZT4g KGFsbCB0aGFua3MgbXJkYWxlKSA7IGZpeGVkIG1pbmljYWwgJiM4MjE2O3RvZGF5JiM4MjE3 OyBiZWluZyB3cm9uZ2x5IHNldDwvbGk+CgkJPGxpPjAxIEphbiAwOSB8IDAuMyB8IEFkZGVk IDxjb2RlPmNlbGxmb3JtPC9jb2RlPiwgPGNvZGU+bmF2aWQ8L2NvZGU+LCA8Y29kZT5uYXZh cnJvdzwvY29kZT4sIGFuZCA8Y29kZT5tYWludGFpbjwvY29kZT4gOyBhZGRlZCA8Y29kZT4m bHQ7dHhwOnNtZF9hcnRpY2xlX2V2ZW50IC8mZ3Q7PC9jb2RlPiAodGhhbmtzIG1yZGFsZSkg YW5kIDxjb2RlPiZsdDt0eHA6c21kX2NhbF9jbGFzcyAvJmd0OzwvY29kZT4gOyBhZGRlZCB0 aGUgPGNvZGU+c3RhbmRhcmQ8L2NvZGU+IGFuZCA8Y29kZT5yZWN1cmZpcnN0PC9jb2RlPiBl dmVudCBmbGFncyA7IG1hZGUgY2VsbC9ldmVudCBmbGFnIGRpc3RpbmN0aW9uIGJldHRlciAo ZS5nLiA8Y29kZT5ldmVudDwvY29kZT4gYW5kIDxjb2RlPmhvbHM8L2NvZGU+IGZsYWdzIG5v dyBvY2N1ciA8ZW0+b25seTwvZW0+IGF0IHRoZSBjZWxsIGxldmVsKSA7IGFkZGVkIGFiaWxp dHkgdG8gc3BlY2lmeSBhIDxjb2RlPmRheWZvcm1hdDwvY29kZT4gYXJyYXksIGFkZGVkIGEg d2VlayBzZWxlY3QgbGlzdCBhbmQgZW5oYW5jZWQgdGhlIDxjb2RlPmlzb3dlZWtzPC9jb2Rl PiBhdHRyaWJ1dGUgKHRoYW5rcyB1bGkpIDsgZml4ZWQgc21kX2lmX2NhbCYjODIxNztzIDxj b2RlPmZsYWc8L2NvZGU+IGJ1bWJsaW5nLCBhbmQgYWRkZWQgPGNvZGU+U01EX0FOWTwvY29k ZT4gdGVzdCA7IGZpeGVkIHNtZF9jYWxfaW5mbyA8Y29kZT5hdXRob3I8L2NvZGU+IHdhcm5p bmcgYW5kIGFkZGVkIDxjb2RlPmpvaW5fcHJlZml4PC9jb2RlPiA7IGZpeGVkIGRhbmdsaW5n IGFydGljbGUgYWZ0ZXIgcGx1Z2luIHRlcm1pbmF0ZXM8L2xpPgoJPC91bD4KCgk8cD48L2Rp dj48L3A+CjwhLS0gLS0tIEJFR0lOIFBMVUdJTiBDU1MgLS0tIC0tPgo8c3R5bGUgdHlwZT0i dGV4dC9jc3MiPgojc21kX2hlbHAgeyBsaW5lLWhlaWdodDoxLjUgO30KI3NtZF9oZWxwIGNv ZGUgeyBmb250LXdlaWdodDpib2xkOyBmb250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3Iiwg Y291cmllciwgbW9ub3NwYWNlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkNDO30KI3NtZF9o ZWxwIGNvZGUuYmxvY2sgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVk ICM5OTk7IGJhY2tncm91bmQtY29sb3I6ICNmMGU2OGM7IGRpc3BsYXk6YmxvY2s7IG1hcmdp bjoxMHB4IDEwcHggMjBweDsgcGFkZGluZzoxMHB4OyB9CiNzbWRfaGVscCBhOmxpbmssICNz bWRfaGVscCBhOnZpc2l0ZWQgeyBjb2xvcjogIzAwYzsgdGV4dC1kZWNvcmF0aW9uOiBub25l OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30K I3NtZF9oZWxwIGE6aG92ZXIsICNzbWRfaGVscCBhOmFjdGl2ZSB7IGNvbG9yOiBibHVlOyB0 ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBibHVlOyBw YWRkaW5nLWJvdHRvbToxcHg7fQojc21kX2hlbHAgaDEgeyBjb2xvcjogIzM2OTsgZm9udDog MjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRl cjsgfQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBh ZGRpbmc6MTBweCAwIDA7IGNvbG9yOiAjMzY5OyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMt c2VyaWY7IH0KI3NtZF9oZWxwIGgzIHsgY29sb3I6ICMwNzk7IGZvbnQ6IGJvbGQgMTJweCBB cmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAg MDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5l O30KI3NtZF9oZWxwIGg0IHsgZm9udDogYm9sZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlmOyBs ZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwIDt0ZXh0LXRyYW5zZm9ybTog dXBwZXJjYXNlOyB9CiNzbWRfaGVscCAuYXRubSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9y OiMzM2Q7IH0KI3NtZF9oZWxwIC5tYW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4 IGRvdHRlZCAjOTk5OyB9CiNzbWRfaGVscCB0YWJsZSB7d2lkdGg6OTAlOyB0ZXh0LWFsaWdu OmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVtO30KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAg dGgge2JvcmRlcjoxcHggc29saWQgIzk5OTsgcGFkZGluZzouNWVtIDA7fQojc21kX2hlbHAg dWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAucmVxdWlyZWQge2Nv bG9yOnJlZDt9CiNzbWRfaGVscCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQoj c21kX2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAtLS0g RU5EIFBMVUdJTiBDU1MgLS0tIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiJlNjU1YWE4ZDU5MDVl ZWUxODE5MzU1MjIwZjcwZTM2MCI7fQ==