# Name: smd_calendar v0.1 # 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 b24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjM6IjAuMSI7czoxMToiZGVzY3JpcHRpb24iO3M6 NjI6IkNhbGVuZGFyIC8gZXZlbnQgLyBzY2hlZHVsZSBzeXN0ZW0gd2l0aCBldmVudHMgYXMg VFhQIGFydGljbGVzIjtzOjQ6ImNvZGUiO3M6MzI3MDE6Ii8vIEJhc2VkIGhlYXZpbHkgb24g bWRwX2NhbGVuZGFyIC0gdGhhbmtzIQ0KaWYoICRkYXRlID0gZ3BzKCdkYXRlJykgKSB7DQoJ JF9HRVRbJ21vbnRoJ10gPSAkZGF0ZTsNCn0NCg0KZnVuY3Rpb24gc21kX2NhbGVuZGFyKCRh dHRzLCAkdGhpbmc9JycpIHsNCglnbG9iYWwgJHByZXRleHQsICR2YXJpYWJsZSwgJHByZWZz LCAkc21kX2NhbF9mbGFnLCAkc21kX2NhbF9pZDsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXko DQoJCSd0aW1lJyA9PiAnYW55JywgLy8gcGFzdCwgZnV0dXJlLCBhbnkNCgkJJ3NpemUnID0+ ICdsYXJnZScsIC8vIHNtYWxsIG9yIGxhcmdlIChjYWxlbmRhcikNCgkJJ2V4cGlyZWQnID0+ ICcnLCAvLyAwPW5vLCAxPXllcyBwdWJsaXNoIGV4cGlyZWQgZXZlbnRzLCBlbXB0eT11c2Ug cHJlZnMNCgkJJ2NhdGVnb3J5JyA9PiAkcHJldGV4dFsnYyddLA0KCQknc2VjdGlvbicgPT4g JHByZXRleHRbJ3MnXSwNCgkJJ2F1dGhvcicgPT4gJHByZXRleHRbJ2F1dGhvciddLA0KCQkn c3RhdHVzJyA9PiAnbGl2ZScsDQoJCSdzdGF0aWMnID0+ICcnLA0KCQknZm9ybScgPT4gJycs DQoJCSdzcGFuZm9ybScgPT4gJ1NNRF9TQU1FJywNCgkJJ3N0ZXBmaWVsZCcgPT4gJycsDQoJ CSdza2lwZmllbGQnID0+ICcnLA0KCQknc2hvd3NraXBwZWQnID0+ICcwJywNCgkJJ3Nob3dz cGFubmVkJyA9PiAnMScsDQoJCSdob2xpZGF5cycgPT4gJycsDQoJCSdob2xpZGF5ZmxhZ3Mn ID0+ICdldmVudCcsIC8vIFBlcm1pdCB0aGVzZSBldmVudHMgdG8gImxhbmQiIG9uIGEgaG9s aWRheSAoZXZlbnQsIHJlY3VyLCBtdWx0aSkNCgkJJ2NsYXNzbGV2ZWxzJyA9PiAnY2VsbCwg ZXZlbnQnLCAvLyBjZWxsLCBldmVudCwgY2VsbHBsdXMgKGNvbWJpbmVzIGV2ZW50IGFuZCBj ZWxsIGludG8gY2VsbCBsZXZlbCBjbGFzc2VzKQ0KCQknY2xhc3NwcmVmaXhlcycgPT4gJ3Nt ZF9jYWxfLCBzbWRfY2FsX2V2XycsIC8vIDFzdD1jZWxsLWxldmVsIHBmeCwgMm5kPWV2ZW50 LWxldmVsIHBmeCAob3B0aW9uYWwpDQoJCSdjbGFzcycgPT4gJycsIC8vIFRhYmxlIGNsYXNz DQoJCSdyb3djbGFzcycgPT4gJycsDQoJCSdjZWxsY2xhc3MnID0+ICcnLA0KCQknZW1wdHlj bGFzcycgPT4gJ2VtcHR5JywNCgkJJ2lzb3dlZWtjbGFzcycgPT4gJ3dlZWsnLA0KCQknbmF2 Y2xhc3MnID0+ICduYXYnLA0KCQknZXZlbnRjbGFzc2VzJyA9PiAnY2F0ZWdvcnknLA0KCQkn ZXZlbnR3cmFwdGFnJyA9PiAnc3BhbicsDQoJCSdzZWxlY3QnID0+ICcnLCAvLyBtb250aCBh bmQvb3IgeWVhciAodG8gZGlzcGxheSBkcm9wZG93bnMpDQoJCSdzZWxlY3RidG4nID0+ICcn LCAvLyBlbXB0eSA9IGF1dG9zZWxlY3QgKG9uY2hhbmdlKSwgb3IgdGV4dCB0byBnbyBvbiB0 aGUgc3VibWl0IGJ1dHRvbg0KCQknbXljbGFzcycgPT4gJycsIC8vIG1vbnRoLXllYXIgaGVh ZGVyIGNsYXNzDQoJCSdteXdyYXB0YWcnID0+ICcnLCAvLyBtb250aC15ZWFyIGhlYWRlciB3 cmFwdGFnDQoJCSdpZCcgPT4gJycsIC8vIFRhYmxlIElEICg9Y2FsaWQpDQoJCSdkYXknID0+ ICcnLCAvL1RPIFJFTU9WRT8/DQoJCSdtb250aCcgPT4gJycsDQoJCSd5ZWFyJyA9PiAnJywN CgkJJ3llYXJ3aWR0aCcgPT4gJzAsMCcsIC8vIG51bWJlciBvZiB5ZWFycyBlaXRoZXIgc2lk ZSBvZiB0aGUgZmlyc3QvbGFzdCBhcnRpY2xlIHRvIHBlcm1pdA0KCQknaXNvd2Vla3MnID0+ ICcwJywgLy8gMT1zaG93IElTTyB3ZWVrcywgMD1kb24ndA0KCQknZGF5Zm9ybWF0JyA9PiAn QUJCUicsIC8vIEFCQlIgPSAlYSwgRlVMTCA9ICVBLCBvciBjdXN0b20gc3RyZnRpbWUgc3Ry aW5nDQoJCSdtb250aGZvcm1hdCcgPT4gJ0ZVTEwnLCAvLyBBQkJSID0gJWIsIEZVTEwgPSAl Qiwgb3IgY3VzdG9tIHN0cmZ0aW1lIHN0cmluZw0KCQknZmlyc3RkYXknID0+IDAsIC8vIDFz dCBkYXkgb2Ygd2VlayAwPVN1bmRheSwgNj1TYXR1cmRheSAoZm9yY2VkIHRvIE1vbmRheSBp ZiBpc293ZWVrcz0xKQ0KCQknZ210JyA9PiAnJywNCgkJJ2xhbmcnID0+ICcnLA0KCQknZGVi dWcnID0+IDAsDQoJKSwgJGF0dHMpKTsNCg0KCSRmdXR1cmUgPSAoICR0aW1lICE9ICJwYXN0 IiApID8gdHJ1ZSA6IGZhbHNlOyAvLyBEZXRlcm1pbmUgaGVhZGluZyBzdHlsZQ0KCSRzdGF0 dXMgPSAoJHN0YXR1cykgPyAkc3RhdHVzIDogJ2xpdmUnOw0KCSRmaXJzdGRheSA9ICgkaXNv d2Vla3MpID8gMSA6ICRmaXJzdGRheTsNCgkkc3BhbmZvcm0gPSAoJHNwYW5mb3JtID09ICJT TURfU0FNRSIpID8gJGZvcm0gOiAkc3BhbmZvcm07DQoNCgkvLyBTZXQgdXAgdGhlIGNsYXNz IHByZWZpeGVzDQoJJGNsZXZzID0gZG9fbGlzdCgkY2xhc3NsZXZlbHMpOw0KCSRjbHMgPSBk b19saXN0KCRjbGFzc3ByZWZpeGVzKTsNCgkkY2xhc3NwcmVmaXggPSAkZXZjbGFzc3ByZWZp eCA9ICRjbHNbMF07DQoJaWYgKGNvdW50KCRjbHMpID4gMSl7DQoJCSRldmNsYXNzcHJlZml4 ID0gJGNsc1sxXTsNCgl9DQoNCgkvLyBGaWx0ZXJzDQoJJGZvcHRzID0gYXJyYXkoKTsNCgkk Y2F0U1FMID0gJHNlY1NRTCA9ICRhdXRoU1FMID0gJyc7DQoJaWYoJGNhdGVnb3J5KSB7DQoJ CSRmb3B0c1tdID0gYXJyYXkoJ2MnID0+ICRjYXRlZ29yeSk7DQoJCSRjYXRTUUwgPSBkb1F1 b3RlKGpvaW4oIicsJyIsIGRvX2xpc3QoJGNhdGVnb3J5KSkpOw0KCQkkY2F0U1FMID0gIiBB TkQgKCBDYXRlZ29yeTEgSU4gKCIuJGNhdFNRTC4iKSBPUiBDYXRlZ29yeTIgSU4gKCIuJGNh dFNRTC4iKSApICI7DQoJfQ0KCWlmKCRzZWN0aW9uKSB7DQoJCSRmb3B0c1tdID0gYXJyYXko J3MnID0+ICRzZWN0aW9uKTsNCgkJJHNlY1NRTCA9IGRvUXVvdGUoam9pbigiJywnIiwgZG9f bGlzdCgkc2VjdGlvbikpKTsNCgkJJHNlY1NRTCA9ICIgQU5EIFNlY3Rpb24gSU4gKCIuJHNl Y1NRTC4iKSAiOw0KCX0NCglpZigkYXV0aG9yKSB7DQoJCSRmb3B0c1tdID0gYXJyYXkoJ2F1 dGhvcicgPT4gaHRtbGVudGl0aWVzKGdwcygnYXV0aG9yJykpKTsNCgkJJGF1dGhTUUwgPSBk b1F1b3RlKGpvaW4oIicsJyIsIGRvX2xpc3QoJGF1dGhvcikpKTsNCgkJJGF1dGhTUUwgPSAi IEFORCBBdXRob3JJRCBJTiAoIi4kYXV0aFNRTC4iKSAiOw0KCX0NCgkkc3RhdHVzID0gZG9f bGlzdCgkc3RhdHVzKTsNCgkkc3RhdGkgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCRzdGF0dXMg YXMgJHN0YXQpIHsNCgkJaWYgKGVtcHR5KCRzdGF0KSkgew0KCQkJY29udGludWU7DQoJCX0g ZWxzZSBpZiAoaXNfbnVtZXJpYygkc3RhdCkpIHsNCgkJCSRzdGF0aVtdID0gJHN0YXQ7DQoJ CX0gZWxzZSB7DQoJCQkkc3RhdGlbXSA9IGdldFN0YXR1c051bSgkc3RhdCk7DQoJCX0NCgl9 DQoJJHN0YXRpID0gIiBTdGF0dXMgSU4gKCIuZG9RdW90ZShqb2luKCInLCciLCAkc3RhdGkp KS4iKSI7DQoNCgkkZXhwaXJlZCA9ICgkZXhwaXJlZCkgPyAkZXhwaXJlZCA6ICRwcmVmc1sn cHVibGlzaF9leHBpcmVkX2FydGljbGVzJ107DQoJJGV4cGlyZWQgPSAoKCRleHBpcmVkKSA/ ICcnIDogJyBBTkQgKG5vdygpIDw9IEV4cGlyZXMgT1IgRXhwaXJlcyA9ICcuTlVMTERBVEVU SU1FLicpJyk7DQoJJGV2ZW50Y2xhc3NlcyA9IGRvX2xpc3QoJGV2ZW50Y2xhc3Nlcyk7DQoJ JGhvbGlkYXlmbGFncyA9IGRvX2xpc3QoJGhvbGlkYXlmbGFncyk7DQoNCgkvLyBXb3JrIG91 dCB0aGUgZmlyc3QgYW5kIGxhc3QgcG9zdHMgdG8gZGV0ZXJtaW5lIHRoZSB5ZWFyIHJhbmdl DQoJJGVhcmxpZXN0ID0gc2FmZV9yb3coJ3VuaXhfdGltZXN0YW1wKFBvc3RlZCkgQVMgdVBv c3RlZCcsICd0ZXh0cGF0dGVybicsICRzdGF0aS4oKCRjYXRlZ29yeSkgPyAkY2F0U1FMIDog JycpLigoJHNlY3Rpb24pID8gJHNlY1NRTCA6ICcnKS4oKCRhdXRob3IpID8gJGF1dGhTUUwg OiAnJykuJyBPUkRFUiBCWSBQb3N0ZWQgQVNDIExJTUlUIDAsIDEnLCAkZGVidWcpOw0KCSRs YXRlc3QgPSBzYWZlX3JvdygndW5peF90aW1lc3RhbXAoTGFzdE1vZCkgQVMgdUxhc3RNb2Qn LCAndGV4dHBhdHRlcm4nLCAkc3RhdGkuKCgkY2F0ZWdvcnkpID8gJGNhdFNRTCA6ICcnKS4o KCRzZWN0aW9uKSA/ICRzZWNTUUwgOiAnJykuKCgkYXV0aG9yKSA/ICRhdXRoU1FMIDogJycp LicgQU5EIFBvc3RlZCA8IG5vdygpIE9SREVSIEJZIExhc3RNb2QgREVTQyBMSU1JVCAwLCAx JywgJGRlYnVnKTsNCgkkeWVhcndpZHRoID0gZG9fbGlzdCgkeWVhcndpZHRoKTsNCglpZiAo Y291bnQoJHllYXJ3aWR0aCkgPT0gMSkgJHllYXJ3aWR0aFsxXSA9ICR5ZWFyd2lkdGhbMF07 DQoJJGVhcmxpZXN0ID0gZGF0ZSgiWSIsIHN0cnRvdGltZSgiLSIuJHllYXJ3aWR0aFswXS4i IHllYXIiLCAoIChlbXB0eSgkZWFybGllc3QpKSA/IHRpbWUoKSA6ICRlYXJsaWVzdFsndVBv c3RlZCddKSApICk7DQoJJGxhdGVzdCA9IGRhdGUoIlkiLCBzdHJ0b3RpbWUoIisiLiR5ZWFy d2lkdGhbMV0uIiB5ZWFyIiwgKCAoZW1wdHkoJGxhdGVzdCkpID8gdGltZSgpIDogJGxhdGVz dFsndUxhc3RNb2QnXSkgKSApOw0KDQoJLy8gQ2hlY2sgdGhlIFVSTCBmb3IgY3VycmVudCBk YXRlIGFuZCBjYWxlbmRhciB0YXJnZXQgaW5mbw0KCSRpbmNvbWluZ19jYWxpZCA9IGdwcygn Y2FsaWQnKTsNCgkkaW5jb21pbmdfeWVhciA9IChncHMoJ3knKSBhbmQgaXNfbnVtZXJpYyhn cHMoJ3knKSkpID8gKGludClncHMoJ3knKSA6ICcnOw0KCSRpbmNvbWluZ19tb250aCA9IChn cHMoJ20nKSBhbmQgaXNfbnVtZXJpYyhncHMoJ20nKSkpID8gKGludClncHMoJ20nKSA6ICcn Ow0KCSRpbmNvbWluZ19kYXkgPSAoZ3BzKCdkJykgYW5kIGlzX251bWVyaWMoZ3BzKCdkJykp KSA/IChpbnQpZ3BzKCdkJykgOiAnJzsNCg0KCWlmKCRzdGF0aWMpIHsgLy8gaWYgd2UncmUg c3RhdGljIHcvbyBhbnkgc3VwcGxpZWQgdmFycywgdXNlIHRoZSBjdXJyZW50IGRhdGUNCgkJ aWYoISR5ZWFyKSB7ICR5ZWFyID0gc2FmZV9zdHJmdGltZSgnJVknKTsgfQ0KCQlpZighJG1v bnRoKSB7ICRtb250aCA9IHNhZmVfc3RyZnRpbWUoJyVtJyk7IH0NCgkJaWYoISRkYXkpIHsg JGRheSA9IHNhZmVfc3RyZnRpbWUoJyVkJyk7IH0NCgl9IGVsc2UgeyAvLyBvdGhlcndpc2Ug dXNlIGN1cnJlbnQgZGF0ZSBvbmx5IGlmIHRoZXJlJ3Mgbm90aGluZyBlbHNlDQoJCWlmKCAk aWQgPT0gJGluY29taW5nX2NhbGlkICkgeyAvLyB1c2UgaW5jb21pbmcNCgkJCWlmKCEkeWVh cikgeyAkeWVhciA9ICgkaW5jb21pbmdfeWVhcikgPyAkaW5jb21pbmdfeWVhciA6IHNhZmVf c3RyZnRpbWUoJyVZJyk7IH0NCgkJCWlmKCEkbW9udGgpIHsgJG1vbnRoID0gKCRpbmNvbWlu Z19tb250aCkgPyAkaW5jb21pbmdfbW9udGggOiBzYWZlX3N0cmZ0aW1lKCclbScpOyB9DQoJ CQlpZighJGRheSkgeyAkZGF5ID0gKCRpbmNvbWluZ19kYXkpID8gJGluY29taW5nX2RheSA6 IHNhZmVfc3RyZnRpbWUoJyVkJyk7IH0NCgkJfSBlbHNlIHsgLy8gdXNlIGN1cnJlbnQNCgkJ CWlmKCEkeWVhcikgeyAkeWVhciA9IHNhZmVfc3RyZnRpbWUoJyVZJyk7IH0NCgkJCWlmKCEk bW9udGgpIHsgJG1vbnRoID0gc2FmZV9zdHJmdGltZSgnJW0nKTsgfQ0KCQkJaWYoISRkYXkp IHsgJGRheSA9IHNhZmVfc3RyZnRpbWUoJyVkJyk7IH0NCgkJfQ0KCX0NCgkkc21kX2NhbF9p ZCA9ICgkaW5jb21pbmdfY2FsaWQpID8gJGluY29taW5nX2NhbGlkIDogJGlkOw0KDQoJLy8g VGhlIHRpbWVzIGluIHRoZSBEQiBhcmUgc3RvcmVkIHVzaW5nIHRoZSBzZXJ2ZXIncyBsb2Nh bCB0aW1lLCBzbyB3ZSBkb24ndA0KCS8vIHdhbnQgdG8gYWRqdXN0IGFueXRoaW5nIChzaW5j ZSBta3RpbWUgdXNlcyB0aGUgc2VydmVyJ3MgbG9jYWwgdGltZSkuDQoJLy9UT0RPOiBXb3Jy eSBhYm91dCBnbXQgLyBkc3QNCgkkdHNfZmlyc3QgPSBta3RpbWUoMCwgMCwgMCwgJG1vbnRo LCAxLCAkeWVhcik7DQoJJHRzX2xhc3QgPSBta3RpbWUoMjMsIDU5LCA1OSwgJG1vbnRoLCBk YXRlKCd0JywkdHNfZmlyc3QpLCAkeWVhcik7DQoNCgkkZXh0cmFzcWwgPSAkY2F0U1FMIC4g JHNlY1NRTCAuICRhdXRoU1FMOw0KCXN3aXRjaCgkdGltZSkgew0KCQljYXNlICJhbnkiIDog LyogRG9uJ3QgY2FyZSBhYm91dCBkYXRlICovIGJyZWFrOw0KCQljYXNlICJmdXR1cmUiIDog JGV4dHJhc3FsIC49ICIgQU5EIFBvc3RlZCA+IENVUkRBVEUoKSI7IGJyZWFrOw0KCQlkZWZh dWx0IDogJGV4dHJhc3FsIC49ICIgQU5EIFBvc3RlZCA8IENVUkRBVEUoKSI7IGJyZWFrOyAv LyBUaGUgcGFzdA0KCX0NCg0KCS8vIEhvbGlkYXlzIGFyZSBnbG9iYWwgJ2V4Y2x1c2lvbnMn LCBlaXRoZXIgZGVmaW5lZCBkaXJlY3RseSBvciBpbiBhIDx0eHA6dmFyaWFibGUgLz4NCgkk aG9saWRheXMgPSBkb19saXN0KCRob2xpZGF5cyk7DQoJJHR4cGhvbHMgPSBkb19saXN0KCRo b2xpZGF5c1swXSwgIjoiKTsNCglpZiAoJHR4cGhvbHNbMF0gPT0gInR4cHZhciIpIHsNCgkJ JGhvbGlkYXlzID0gZG9fbGlzdCgkdmFyaWFibGVbJHR4cGhvbHNbMV1dKTsNCgl9DQoJLy8g Rm9yY2UgZWFjaCBob2xpZGF5IHRvIGEga25vd24gZm9ybWF0LiBIb2xpZGF5cyB3aXRob3V0 IHllYXJzIHVzZSBjdXJyZW50IHllYXINCglmb3JlYWNoICgkaG9saWRheXMgYXMgJGtleSA9 PiAkdmFsKSB7DQoJCWlmIChlbXB0eSgkdmFsKSkgY29udGludWU7DQoJCSRudW1wYXJ0cyA9 IHByZWdfbWF0Y2goJy9eKFtcZFx3XSspLj8oW1xkXHddKykuPyhbXGRcd10rKT8kLycsICR2 YWwsICRwYXJ0cyk7DQoNCgkJaWYgKCRudW1wYXJ0cykgew0KCQkJaWYgKGNvdW50KCRwYXJ0 cykgPT0gMykgew0KCQkJCSRwYXJ0c1szXSA9ICR5ZWFyOw0KICAgICAgICAgfQ0KCQkJJHZh bCA9IHN0cl9wYWQoJHBhcnRzWzFdLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuJy0nLnN0cl9w YWQoJHBhcnRzWzJdLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuJy0nLiRwYXJ0c1szXTsNCgkJ fQ0KCQkkaG9saWRheXNbJGtleV0gPSBkYXRlKCJkLW0tWSIsIHN0cnRvdGltZSgkdmFsKSk7 DQoJfQ0KDQoJaWYgKCRkZWJ1ZyA+IDAgJiYgJGhvbGlkYXlzKSB7DQoJCWVjaG8gIisrIEhP TElEQVlTICsrICI7DQoJCWRtcCgkaG9saWRheXMpOw0KCX0NCg0KCS8vIEdldCBhbGwgbWF0 Y2hpbmcgYXJ0aWNsZXMgaW4gKGFuZCBiZWZvcmUpIHRoaXMgbW9udGgNCgkkZXZlbnRzID0g YXJyYXkoKTsNCgkkc3FsMiA9ICRzdGF0aSAuICIgSEFWSU5HIHVQb3N0ZWQgPD0gIi4kdHNf bGFzdCAuICRleHBpcmVkIC4gJGV4dHJhc3FsIC4iIE9SREVSIEJZIFBvc3RlZCBBU0MiOw0K CSRncmFiQ29scyA9ICcqLCB1bml4X3RpbWVzdGFtcChQb3N0ZWQpIGFzIHVQb3N0ZWQsIHVu aXhfdGltZXN0YW1wKExhc3RNb2QpIGFzIHVMYXN0TW9kLCB1bml4X3RpbWVzdGFtcChFeHBp cmVzKSBhcyB1RXhwaXJlcyc7DQoJJGV2bGlzdCA9IHNhZmVfcm93cygkZ3JhYkNvbHMsICd0 ZXh0cGF0dGVybicsICRzcWwyLCAkZGVidWcpOw0KDQoJLy8gSWYgYW55IGV2ZW50cyByZWN1 ciBhbmQgZmFsbCB3aXRoaW4gdGhlIGN1cnJlbnQgbW9udGgsIGFkZCB0aG9zZSBhcyB3ZWxs DQoJLy8gSWYgYW55IGRhdGVzIGFyZSB0byBiZSBleGNsdWRlZCwgdGhlIGVudHJ5IGlzIHNr aXBwZWQgVU5MRVNTIHNob3dza2lwcGVkIGluZGljYXRlcyBvdGhlcndpc2UNCglmb3JlYWNo ICgkZXZsaXN0IGFzICRyb3cpIHsNCgkJJGlkeCA9IDA7IC8vIEluIGNhc2UgdGhlIDFzdCBk YXkgb2YgdGhlIG1vbnRoIGlzIGEgY29udGludWF0aW9uIG9mIGFuIGV2ZW50IGZyb20gdGhl IGVuZCBvZiB0aGUgcHJldmlvdXMgbW9udGgNCgkJJHN0YXJ0ID0gJHJvd1sndVBvc3RlZCdd Ow0KCQkkcmVhbF9lbmQgPSAkcm93Wyd1RXhwaXJlcyddOw0KCQkkZW5kID0gKCRyZWFsX2Vu ZCAhPSAwICYmICRyZWFsX2VuZCA8ICR0c19sYXN0KSA/ICRyZWFsX2VuZCA6ICR0c19sYXN0 Ow0KCQkkc21kX2NhbF9mbGFnID0gYXJyYXkoKTsNCg0KCQlpZiAoJGRlYnVnID4gMikgew0K CQkJZWNobyAnKysgRVZFTlQgKysnOw0KCQkJZG1wKGRhdGUoJ2QtbS1ZJywgJHN0YXJ0KSAu JyA6ICcuIGRhdGUoJ2QtbS1ZJywgJGVuZCkpOw0KCQkJZG1wKCRyb3cpOw0KCQl9DQoNCgkJ JG11bHRpID0gKCRyb3dbJ3VFeHBpcmVzJ10gPiAkcm93Wyd1UG9zdGVkJ10gJiYgJHJvd1sn dUV4cGlyZXMnXSA+ICR0c19maXJzdCkgPyB0cnVlIDogZmFsc2U7DQoJCSRyZWN1ciA9IChl bXB0eSgkcm93WyRzdGVwZmllbGRdKSkgPyBmYWxzZSA6IHRydWU7DQoJCSRob2xfaGl0ID0g aW5fYXJyYXkoZGF0ZSgiZC1tLVkiLCAkc3RhcnQpLCAkaG9saWRheXMpOw0KCQkkZXZjbGFz c2VzID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAoJGV2ZW50Y2xhc3NlcyBhcyAkZXZjbHMpIHsN CgkJCXN3aXRjaCAoJGV2Y2xzKSB7DQoJCQkJY2FzZSAiIjoNCgkJCQkJYnJlYWs7DQoJCQkJ Y2FzZSAiZ2NhdCI6DQoJCQkJCWlmICgkcHJldGV4dFsnYyddKSB7DQoJCQkJCQkkZXZjbGFz c2VzW10gPSAkZXZjbGFzc3ByZWZpeC4kcHJldGV4dFsnYyddOw0KCQkJCQl9DQoJCQkJCWJy ZWFrOw0KCQkJCWNhc2UgImNhdGVnb3J5IjoNCgkJCQkJaWYgKCRyb3dbJ0NhdGVnb3J5MSdd KSB7DQoJCQkJCQkkZXZjbGFzc2VzW10gPSAkZXZjbGFzc3ByZWZpeC4kcm93WydDYXRlZ29y eTEnXTsNCgkJCQkJfQ0KCQkJCQlpZiAoJHJvd1snQ2F0ZWdvcnkyJ10pIHsNCgkJCQkJCSRl dmNsYXNzZXNbXSA9ICRldmNsYXNzcHJlZml4LiRyb3dbJ0NhdGVnb3J5MiddOw0KCQkJCQl9 DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgInNlY3Rpb24iOg0KCQkJCQlpZiAoJHByZXRleHRb J3MnXSkgew0KCQkJCQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y2xhc3NwcmVmaXguJHByZXRleHRb J3MnXTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICJhdXRob3IiOg0KCQkJCQlp ZiAoJHByZXRleHRbJ2F1dGhvciddKSB7DQoJCQkJCQkkZXZjbGFzc2VzW10gPSAkZXZjbGFz c3ByZWZpeC4kcHJldGV4dFsnYXV0aG9yJ107DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJ ZGVmYXVsdDoNCgkJCQkJaWYgKCRyb3dbJGV2Y2xzXSkgew0KCQkJCQkJJGV2Y2xhc3Nlc1td ID0gJGV2Y2xhc3NwcmVmaXguJHJvd1skZXZjbHNdOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0K CQkJfQ0KCQl9DQoJCSRldmNsYXNzZXMgPSAnICcuIGpvaW4oJyAnLCAkZXZjbGFzc2VzKTsN CgkJJGlnbm9yZSA9IGFycmF5KCk7DQoNCgkJaWYgKCRkZWJ1ZyA+IDEpIHsNCgkJCWVjaG8g JysrIEVWRU5UIENMQVNTRVMgKysnOw0KCQkJZG1wKCRldmNsYXNzZXMpOw0KCQl9DQoNCgkJ Ly8gRXZlbnRzIHRoYXQgc3RhcnQgdGhpcyBtb250aA0KCQlpZiAoJHN0YXJ0IDwgJGVuZCAm JiAkc3RhcnQgPiAkdHNfZmlyc3QpIHsNCgkJCXBvcHVsYXRlQXJ0aWNsZURhdGEoJHJvdyk7 DQoJCQkvLyBzdGFydCBvZiBhIG11bHRpIHRoYXQgbWF5IG9yIG1heSBub3QgYmUgY2FuY2Vs bGVkIGR1ZSB0byBob2xpZGF5cw0KCQkJJGZsYWcgPSAoJHNob3dzcGFubmVkICYmICRtdWx0 aSAmJiAhJHJlY3VyKSA/ICdtdWx0aWZpcnN0JyAuICgoICRob2xfaGl0ICYmICFpbl9hcnJh eSgnbXVsdGknLCRob2xpZGF5ZmxhZ3MpICkgPyAnIGNhbmNlbCBob2xzJyA6ICcnICkgOiAn JzsNCgkJCS8vIGEgc3RhbmRhcmQgZXZlbnQgdGhhdCBtYXkgb3IgbWF5IG5vdCBiZSBjYW5j ZWxsZWQgZHVlIHRvIGhvbGlkYXlzDQoJCQkkZmxhZyA9ICgkZmxhZykgPyAkZmxhZyA6ICgo ICRob2xfaGl0ICYmICFpbl9hcnJheSgnZXZlbnQnLCRob2xpZGF5ZmxhZ3MpICkgPyAnZXZl bnQgY2FuY2VsIGhvbHMnIDogJ2V2ZW50JyApOw0KCQkJJHNtZF9jYWxfZmxhZyA9ICRmbGFn ID0gZXhwbG9kZSgnICcsICRmbGFnKTsNCgkJCWZvcmVhY2ggKCRmbGFnIGFzICRpZHggPT4g JGl0ZW0pIHsNCgkJCQkkZmxhZ1skaWR4XSA9ICRjbGFzc3ByZWZpeC4kaXRlbTsNCgkJCX0N CgkJCSRmbGFnID0gam9pbiAoJyAnLCAkZmxhZyk7DQoNCgkJCSRpZHggPSAoaW50KXNhZmVf c3RyZnRpbWUoJyVkJywgJHN0YXJ0LCAkZ210LCAkbGFuZyk7DQoJCQkkb3AgPSAoJHRoaW5n KSA/IHBhcnNlKCR0aGluZykgOiAoKCRmb3JtKSA/IHBhcnNlX2Zvcm0oJGZvcm0pIDogKCgk c2l6ZT09InNtYWxsIikgPyAnJyA6IGhyZWYoJHJvd1snVGl0bGUnXSwgcGVybWxpbmt1cmwo JHJvdyksICcgdGl0bGU9IicuJHJvd1snVGl0bGUnXS4nIicpKSApOw0KCQkJJGV2ZW50c1sk aWR4XVtdID0gYXJyYXkoJ2V2JyA9PiAkb3AsICd0eXBlJyA9PiAoKCRmbGFnKSA/ICRmbGFn IDogJycpLiRldmNsYXNzZXMpOw0KCQkJJHNtZF9jYWxfZmxhZyA9IGFycmF5KCk7DQoJCX0N Cg0KCQkvLyBHZW5lcmF0ZSBhIHNraXAgYXJyYXkgZm9yIHRoaXMgZXZlbnQNCgkJaWYgKCRz a2lwZmllbGQgJiYgJHJvd1skc2tpcGZpZWxkXSAhPSAnJykgew0KCQkJJGlnbm9yZSA9IGRv X2xpc3QoJHJvd1skc2tpcGZpZWxkXSk7DQoJCQlmb3JlYWNoICgkaWdub3JlIGFzICRrZXkg PT4gJHZhbCkgew0KCQkJCSRpZ25vcmVbJGtleV0gPSBkYXRlKCJkLW0tWSIsIHN0cnRvdGlt ZSgkdmFsKSk7IC8vIEZvcmNlIGVhY2ggZGF0ZSB0byBhIGtub3duIGZvcm1hdA0KCQkJfQ0K CQl9DQoJCS8vIENhbGN1bGF0ZSB0aGUgZGF0ZSBvZmZzZXRzIGFuZCBjaGVjayByZWN1cnJp bmcgZXZlbnRzIHRoYXQgZmFsbCB3aXRoaW4gdGhlIG1vbnRoIG9mIGludGVyZXN0DQoJCWlm ICgkc3RlcGZpZWxkICYmICRyb3dbJHN0ZXBmaWVsZF0gIT0gJycpIHsNCgkJCSRmcmVxID0g ZG9fbGlzdCgkcm93WyRzdGVwZmllbGRdKTsNCgkJCWZvcmVhY2ggKCRmcmVxIGFzICRpbnRl cnZhbCkgew0KCQkJCSR0c19jdXJyID0gJHN0YXJ0Ow0KCQkJCXdoaWxlICgkdHNfY3VyciA8 ICRlbmQpIHsNCgkJCQkJaWYgKCgkdHNfY3VyciA9IHN0cnRvdGltZSgkaW50ZXJ2YWwsICR0 c19jdXJyKSkgPT09IGZhbHNlKSB7DQoJCQkJCQlicmVhazsNCgkJCQkJfSBlbHNlIHsNCgkJ CQkJCWlmICgkdHNfY3VyciA8ICRlbmQgJiYgJHRzX2N1cnIgPiAkdHNfZmlyc3QpIHsNCgkJ CQkJCQkvLyBBIHJlY3VycmluZyBldmVudC4gQ2hlY2sgaXQgaXNuJ3QgYSBob2xpZGF5IG9y IHRvIGJlIGlnbm9yZWQNCgkJCQkJCQlwb3B1bGF0ZUFydGljbGVEYXRhKCRyb3cpOw0KCQkJ CQkJCSRvcCA9ICcnOw0KCQkJCQkJCSRpZHggPSAoaW50KXNhZmVfc3RyZnRpbWUoJyVkJywg JHRzX2N1cnIsICRnbXQsICRsYW5nKTsNCgkJCQkJCQkkc21kX2NhbF9mbGFnW10gPSAncmVj dXInOw0KCQkJCQkJCSRzaG93X21lID0gIWluX2FycmF5KGRhdGUoImQtbS1ZIiwgJHRzX2N1 cnIpLCAkaWdub3JlKTsNCgkJCQkJCQkkaG9sX2hpdCA9IGluX2FycmF5KGRhdGUoImQtbS1Z IiwgJHRzX2N1cnIpLCAkaG9saWRheXMpOw0KCQkJCQkJCSRzaG93X2hvbCA9ICgkaG9sX2hp dCAmJiAhaW5fYXJyYXkoJ3JlY3VyJywkaG9saWRheWZsYWdzKSApID8gZmFsc2UgOiB0cnVl Ow0KCQkJCQkJCWlmICggISRzaG93X21lIHx8ICEkc2hvd19ob2wgKSB7DQoJCQkJCQkJCSRz bWRfY2FsX2ZsYWdbXSA9ICdjYW5jZWwnOw0KCQkJCQkJCX0NCgkJCQkJCQlpZiAoJGhvbF9o aXQpIHsNCgkJCQkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ2hvbHMnOw0KCQkJCQkJCX0NCgkJ CQkJCQkvLyBDcmVhdGUgdGhlIGV2ZW50cyB0aGF0IGFwcGVhciBpbiB0aGUgY2VsbCBidXQg b25seSBpZiB0aGV5J3ZlIG5vdCBhcHBlYXJlZCBiZWZvcmUsIG9yIGFyZSB0byBiZSBpZ25v cmVkDQoJCQkJCQkJaWYgKCgkc2hvd19tZSAmJiAkc2hvd19ob2wpIHx8ICRzaG93c2tpcHBl ZCkgew0KCQkJCQkJCQkkb3AgPSAoJHRoaW5nKSA/IHBhcnNlKCR0aGluZykgOiAoKCRmb3Jt KSA/IHBhcnNlX2Zvcm0oJGZvcm0pIDogKCgkc2l6ZT09InNtYWxsIikgPyAnJyA6IGhyZWYo JHJvd1snVGl0bGUnXSwgcGVybWxpbmt1cmwoJHJvdyksICcgdGl0bGU9IicuJHJvd1snVGl0 bGUnXS4nIicpKSApOw0KCQkJCQkJCX0NCgkJCQkJCQkkdXNlZCA9IGFycmF5KCk7DQoJCQkJ CQkJaWYgKGlzc2V0KCRldmVudHNbJGlkeF0pICYmICRldmVudHNbJGlkeF0gIT0gTlVMTCkg ew0KCQkJCQkJCQlmb3JlYWNoICgkZXZlbnRzWyRpZHhdIGFzICRldikgew0KCQkJCQkJCQkJ JHVzZWRbXSA9ICRldlsnZXYnXTsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCQlpZiAo aXNzZXQoJGV2ZW50c1skaWR4XSkgJiYgJGV2ZW50c1skaWR4XSA9PSBOVUxMIHx8ICFpbl9h cnJheSgkb3AsICR1c2VkKSkgew0KCQkJCQkJCQkkZXZlbnRzWyRpZHhdW10gPSBhcnJheSgn ZXYnID0+ICRvcCwgJ3R5cGUnID0+ICRjbGFzc3ByZWZpeC4ncmVjdXInLiAoKCRzaG93X21l ICYmICRzaG93X2hvbCkgPyAnJyA6ICcgJy4kY2xhc3NwcmVmaXguJ2NhbmNlbCcpLiRldmNs YXNzZXMpOw0KCQkJCQkJCX0NCgkJCQkJCQkkc21kX2NhbF9mbGFnID0gYXJyYXkoKTsNCgkJ CQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSBlbHNlIGlmICgkc2hvd3NwYW5uZWQg JiYgJG11bHRpKSB7DQoJCQkvLyBOb24tcmVjdXJyaW5nIGV2ZW50cyBtYXkgc3BhbiBtb3Jl IHRoYW4gb25lIGRhdGUgYnV0IHRoZXkgbXVzdCBzdGlsbCByZXNwZWN0IGlnbm9yZWQgZGF0 ZXMgYW5kIGhvbGlkYXlzDQoJCQlwb3B1bGF0ZUFydGljbGVEYXRhKCRyb3cpOw0KCQkJJGxh c3RkYXkgPSAoaW50KXNhZmVfc3RyZnRpbWUoJyVkJywgJGVuZCwgJGdtdCwgJGxhbmcpOw0K CQkJJHJlYWxfbGFzdGRheSA9IChpbnQpc2FmZV9zdHJmdGltZSgnJWQnLCAkcmVhbF9lbmQs ICRnbXQsICRsYW5nKTsNCgkJCXdoaWxlICgrKyRpZHggPD0gJGxhc3RkYXkpIHsNCgkJCQkk b3AgPSAnJzsNCgkJCQkkbXVsdGlmbGFnID0gKCRpZHg9PSRyZWFsX2xhc3RkYXkpID8gJ211 bHRpbGFzdCcgOiAoKCRpZHg9PTEpID8gJ211bHRpcHJldicgOiAnbXVsdGknKTsNCgkJCQkk c21kX2NhbF9mbGFnW10gPSAkbXVsdGlmbGFnOw0KCQkJCSR0aGlzZGF0ZSA9IG1rdGltZSgw LCAwLCAwLCAkbW9udGgsICRpZHgsICR5ZWFyKTsNCgkJCQkkc2hvd19tZSA9ICFpbl9hcnJh eShkYXRlKCJkLW0tWSIsICR0aGlzZGF0ZSksICRpZ25vcmUpOw0KCQkJCSRob2xfaGl0ID0g aW5fYXJyYXkoZGF0ZSgiZC1tLVkiLCAkdGhpc2RhdGUpLCAkaG9saWRheXMpOw0KCQkJCSRz aG93X2hvbCA9ICgkaG9sX2hpdCAmJiAhaW5fYXJyYXkoJ211bHRpJywkaG9saWRheWZsYWdz KSApID8gZmFsc2UgOiB0cnVlOw0KCQkJCWlmICggISRzaG93X21lIHx8ICEkc2hvd19ob2wg KSB7DQoJCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdjYW5jZWwnOw0KCQkJCX0NCgkJCQlpZiAo JGhvbF9oaXQpIHsNCgkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ2hvbHMnOw0KCQkJCX0NCgkJ CQlpZiAoICgkc2hvd19tZSAmJiAkc2hvd19ob2wpIHx8ICRzaG93c2tpcHBlZCkgew0KCQkJ CQkkb3AgPSAoJHNwYW5mb3JtKSA/IHBhcnNlX2Zvcm0oJHNwYW5mb3JtKSA6ICgoJHRoaW5n KSA/IHBhcnNlKCR0aGluZykgOiAoKCRzaXplPT0ic21hbGwiKSA/ICcnIDogaHJlZignJnJh cnI7JywgcGVybWxpbmt1cmwoJHJvdyksICcgdGl0bGU9IicuJHJvd1snVGl0bGUnXS4nIicp KSApOw0KCQkJCX0NCgkJCQkkZXZlbnRzWyRpZHhdW10gPSBhcnJheSgnZXYnID0+ICRvcCwg J3R5cGUnID0+ICRjbGFzc3ByZWZpeC4kbXVsdGlmbGFnLiAoKCRzaG93X21lICYmICRzaG93 X2hvbCkgPyAnJyA6ICcgJy4kY2xhc3NwcmVmaXguJ2NhbmNlbCcpLiRldmNsYXNzZXMpOw0K CQkJCSRzbWRfY2FsX2ZsYWcgPSBhcnJheSgpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLy8gR2Vu ZXJhdGUgdGhlIGNhbGVuZGFyDQoJaWYoICRzaXplID09ICJzbWFsbCIgKSB7DQoJCSRjYWxl bmRhciA9IG5ldyBTTURfU21hbGxfQ2FsZW5kYXIoJHllYXIsICRtb250aCwgJGRheSwgJGV2 ZW50cywgJHNlY3Rpb24sICRjYXRlZ29yeSk7DQoJfSBlbHNlIHsNCgkJJGNhbGVuZGFyID0g bmV3IFNNRF9DYWxlbmRhcigkeWVhciwgJG1vbnRoLCAkZGF5LCAkZXZlbnRzKTsNCgl9DQoJ JGNhbGVuZGFyLT5zZXRDbGFzc0xldmVscygkY2xldnMpOw0KCSRjYWxlbmRhci0+c2V0Q2xh c3NQcmVmaXgoJGNsYXNzcHJlZml4KTsNCgkkY2FsZW5kYXItPnNldEV2ZW50UHJlZml4KCRl dmNsYXNzcHJlZml4KTsNCgkkY2FsZW5kYXItPnNldEV2ZW50V3JhcHRhZygkZXZlbnR3cmFw dGFnKTsNCgkkY2FsZW5kYXItPnNldE1ZV3JhcHRhZygkbXl3cmFwdGFnKTsNCgkkY2FsZW5k YXItPnNldFRhYmxlSUQoJGlkKTsNCgkkY2FsZW5kYXItPnNldFRhYmxlQ2xhc3MoJGNsYXNz KTsNCgkkY2FsZW5kYXItPnNldFJvd0NsYXNzKCRyb3djbGFzcyk7DQoJJGNhbGVuZGFyLT5z ZXRDZWxsQ2xhc3MoJGNlbGxjbGFzcyk7DQoJJGNhbGVuZGFyLT5zZXRFbXB0eUNsYXNzKCRl bXB0eWNsYXNzKTsNCgkkY2FsZW5kYXItPnNldElTT1dlZWtDbGFzcygkaXNvd2Vla2NsYXNz KTsNCgkkY2FsZW5kYXItPnNldE5hdkNsYXNzKCRuYXZjbGFzcyk7DQoJJGNhbGVuZGFyLT5z ZXRNWUNsYXNzKCRteWNsYXNzKTsNCgkkY2FsZW5kYXItPnNldE5hbWVGb3JtYXQoJGRheWZv cm1hdCwgImQiKTsNCgkkY2FsZW5kYXItPnNldE5hbWVGb3JtYXQoJG1vbnRoZm9ybWF0LCAi bSIpOw0KCSRjYWxlbmRhci0+c2V0U2hvd0lTT1dlZWsoJGlzb3dlZWtzKTsNCgkkY2FsZW5k YXItPnNldEVZZWFyKCRlYXJsaWVzdCk7DQoJJGNhbGVuZGFyLT5zZXRMWWVhcigkbGF0ZXN0 KTsNCgkkY2FsZW5kYXItPnNldEZpbHRlck9wdHMoJGZvcHRzKTsNCgkkY2FsZW5kYXItPnNl dEhvbGlkYXlzKCRob2xpZGF5cyk7DQoJJGNhbGVuZGFyLT5zZXRTZWxlY3RvcnMoZG9fbGlz dCgkc2VsZWN0KSwgJHNlbGVjdGJ0bik7DQoJJGNhbGVuZGFyLT5zZXRGaXJzdERheU9mV2Vl aygkZmlyc3RkYXkpOw0KDQoJcmV0dXJuICRjYWxlbmRhci0+ZGlzcGxheSgkc3RhdGljLCAk ZnV0dXJlKTsNCn0NCg0KY2xhc3MgU01EX0NhbGVuZGFyIGV4dGVuZHMgU01EX1Jhd19DYWxl bmRhciB7DQoJLy8gT3ZlcnJpZGUgQ29uc3RydWN0b3INCgkvLyBQZXJtaXRzIGV2ZW50cyB0 byBzaG93IHBlciBkYXkvd2Vlaw0KCWZ1bmN0aW9uIFNNRF9DYWxlbmRhcigkeWVhciwkbW9u dGgsJGRheSwkZXZlbnRzKSB7DQoJCSR0aGlzLT5ldmVudHMgPSAkZXZlbnRzOw0KCQkkdGhp cy0+U01EX1Jhd19DYWxlbmRhcigkeWVhciwkbW9udGgsJGRheSk7DQoJfQ0KDQoJLy8gT3Zl cnJpZGUgZHNwRGF5Q2VsbCB0byBkaXNwbGF5IHN0dWZmIHJpZ2h0DQoJZnVuY3Rpb24gZHNw RGF5Q2VsbCgkdGhlZGF5KSB7DQoJCSRjZWxsY2xhc3MgPSAkdGhpcy0+Z2V0Q2VsbENsYXNz KCk7DQoJCSRoYXNhcnRpY2xlID0gaXNzZXQoJHRoaXMtPmV2ZW50c1skdGhlZGF5XSk7DQoJ CSR0ZGNsYXNzID0gJGNlbGxjbGFzcyAuICgoJGhhc2FydGljbGUpID8gJyAnLiR0aGlzLT5j bGFzc3ByZWZpeC4nZXZlbnQnIDogJycpDQoJCQkJLiAoKGluX2FycmF5KCBkYXRlKCdkLW0t WScsIG1rdGltZSggMCwgMCwgMCwgJHRoaXMtPmdldE1vbnRoKCksICR0aGVkYXksICR0aGlz LT5nZXRZZWFyKCkpICksICR0aGlzLT5ob2xpZGF5cykpID8gJyAnLiR0aGlzLT5jbGFzc3By ZWZpeC4naG9scycgOiAnJyk7DQoJCSRydW5uaW5nY2xhc3MgPSAoaW5fYXJyYXkoImNlbGwi LCAkdGhpcy0+Y2xhc3NsZXZlbHMpIHx8IGluX2FycmF5KCJjZWxscGx1cyIsICR0aGlzLT5j bGFzc2xldmVscykpID8gZXhwbG9kZSgnICcsICR0ZGNsYXNzKSA6IGFycmF5KCk7DQoJCWlm KCR0aGlzLT55ZWFyID09IGRhdGUoJ1knLHRpbWUoKSt0el9vZmZzZXQoKSApIGFuZCAkdGhp cy0+bW9udGggPT0gZGF0ZSgnbicsdGltZSgpK3R6X29mZnNldCgpICkgYW5kICR0aGVkYXkg PT0gZGF0ZSgnaicsdGltZSgpK3R6X29mZnNldCgpKSApIHsNCgkJCSRydW5uaW5nY2xhc3Nb XSA9ICR0aGlzLT5jbGFzc3ByZWZpeC4ndG9kYXknOw0KCQl9DQoNCgkJJG91dFtdID0gaGVk KCR0aGVkYXksNCk7DQoJCWlmKCBpc3NldCgkdGhpcy0+ZXZlbnRzWyR0aGVkYXldKSApIHsN CgkJCSRkYXlzX2V2ZW50cyA9ICR0aGlzLT5ldmVudHNbJHRoZWRheV07DQoJCQlmb3JlYWNo KCRkYXlzX2V2ZW50cyBhcyAkZXYpIHsNCgkJCQkkZXZjbGFzcyA9IHRyaW0oJGV2Wyd0eXBl J10pOw0KCQkJCWlmIChpbl9hcnJheSgiY2VsbHBsdXMiLCAkdGhpcy0+Y2xhc3NsZXZlbHMp KSB7DQoJCQkJCWZvcmVhY2ggKGV4cGxvZGUoJyAnLCAkZXZjbGFzcykgYXMgJGV2Yykgew0K CQkJCQkJJHJ1bm5pbmdjbGFzc1tdPSAkZXZjOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCSRvdXRb XSA9ICgkdGhpcy0+ZXZ3cmFwdGFnKSA/IHRhZygkZXZbJ2V2J10sICR0aGlzLT5ldndyYXB0 YWcsICgoJGV2Y2xhc3MgJiYgaW5fYXJyYXkoImV2ZW50IiwgJHRoaXMtPmNsYXNzbGV2ZWxz KSkgPyAnIGNsYXNzPSInLiRldmNsYXNzLiciJyA6ICcnKSkgOiAkZXZbJ2V2J107DQoJCQl9 DQoJCX0NCgkJJHJ1bm5pbmdjbGFzcyA9IGFycmF5X3VuaXF1ZSgkcnVubmluZ2NsYXNzKTsN Cg0KCQkvLyBBbWFsZ2FtYXRlIHRoZSBldmVudC1sZXZlbCBjbGFzc2VzIGFuZCBjZWxsLWxl dmVsIGNsYXNzZXMsIGlmIHJlcXVpcmVkDQoJCXJldHVybiBkb1RhZyhqb2luKCcnLCRvdXQp LCd0ZCcsam9pbignICcsJHJ1bm5pbmdjbGFzcykpOw0KCX0NCg0KCWZ1bmN0aW9uIGRpc3Bs YXkoJHN0YXRpYz1mYWxzZSwgJGZ1dHVyZT1mYWxzZSkgew0KCQkkaWQgPSAoJHRoaXMtPnRh YmxlSUQpID8gJyBpZD0iJy4kdGhpcy0+dGFibGVJRC4nIicgOiAnJzsNCgkJJGNbXSA9ICR0 aGlzLT5kc3BIZWFkZXIoJHN0YXRpYywgJGZ1dHVyZSk7DQoJCSRjW10gPSAkdGhpcy0+ZHNw RGF5TmFtZXMoKTsNCgkJJGNbXSA9ICR0aGlzLT5kc3BEYXlDZWxscygpOw0KDQoJCXJldHVy biBkb1RhZyhqb2luKCcnLCRjKSwndGFibGUnLCR0aGlzLT50YWJsZWNsYXNzLCRpZCk7DQoJ fQ0KDQoJZnVuY3Rpb24gZHNwSGVhZGVyKCRzdGF0aWMsICRmdXR1cmUpIHsNCgkJJGN1cnJ5 ciA9ICR0aGlzLT5nZXRZZWFyKCk7DQoJCSRjdXJybW8gPSAkdGhpcy0+Z2V0TW9udGgoKTsN CgkJJG5hdmNsYXNzID0gJHRoaXMtPmdldE5hdkNsYXNzKCk7DQoJCSRuYXZjbGFzcyA9ICgk bmF2Y2xhc3MpID8gJyBjbGFzcz0iJy4kbmF2Y2xhc3MuJyInIDogJyc7DQoJCSRmaWx0ZXJz ID0gYXJyYXkoKTsNCgkJJGZpbHRlckhpZCA9IGFycmF5KCk7DQoJCWlmICghJHN0YXRpYykg ew0KCQkJZm9yZWFjaCgkdGhpcy0+Zm9wdHMgYXMgJGZpbHRlcikgew0KCQkJCWZvcmVhY2go JGZpbHRlciBhcyAka2V5ID0+ICR2YWwpIHsNCgkJCQkJJGZpbHRlcnNbXSA9ICRrZXkuJz0n LiR2YWw7DQoJCQkJCSRmaWx0ZXJIaWRbXSA9IGhJbnB1dCgka2V5LCAkdmFsKTsNCgkJCQl9 DQoJCQl9DQoJCX0NCgkJJGZpbHRlclVSTCA9IGpvaW4oYSwgJGZpbHRlcnMpOw0KDQoJCS8v IE1vbnRoIHNlbGVjdCBsaXN0DQoJCWlmICgkdGhpcy0+dXNlU2VsZWN0b3IoJ21vbnRoJykg JiYgISRzdGF0aWMpIHsNCgkJCWZvciAoICRpZHggPSAxOyAkaWR4IDw9IDEyOyAkaWR4Kysg KSB7DQoJCQkJJHRhZ2F0dHMgPSAnIHZhbHVlPSInLiRpZHguJyInOw0KCQkJCWlmICggJGlk eCA9PSAkY3Vycm1vICkgJHRhZ2F0dHMgLj0gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzsNCgkJ CQkkb3B0aW9udGFnc1tdID0gZG9UYWcoc3RyZnRpbWUoJHRoaXMtPm10aE5hbWVGbXQsIG1r dGltZSgwLDAsMCwkaWR4KSksICdvcHRpb24nLCAnJywgJHRhZ2F0dHMpOw0KCQkJfQ0KCQkJ JHNlbGVjdG9yW10gPSBkb1RhZyhqb2luKG4sICRvcHRpb250YWdzKSwgJ3NlbGVjdCcsICgo JHRoaXMtPm15d3JhcHRhZykgPyAnJyA6ICR0aGlzLT5teWNsYXNzKSwgJyBuYW1lPSJtIics ICcnKQ0KICAgCQkJCS4gKCgkdGhpcy0+dXNlU2VsZWN0b3IoJ3llYXInKSkgPyAnJyA6IGhJ bnB1dCgneScsICRjdXJyeXIpKTsNCgkJCSRvcHRpb250YWdzID0gYXJyYXkoKTsgLy8gQmxh bmsgb3V0DQoJCX0gZWxzZSB7DQoJCQkkc2VsZWN0b3JbXSA9IGRvVGFnKCR0aGlzLT5nZXRN b250aE5hbWUoKSwgJ3NwYW4nLCAoKCR0aGlzLT5teXdyYXB0YWcpID8gJycgOiAkdGhpcy0+ bXljbGFzcykpOw0KCQl9DQoNCgkJLy8gWWVhciBzZWxlY3QgbGlzdA0KCQkkeTAgPSAkdGhp cy0+Z2V0RVllYXIoKTsNCgkJJHkxID0gJHRoaXMtPmdldExZZWFyKCk7DQoNCgkJaWYgKCR0 aGlzLT51c2VTZWxlY3RvcigneWVhcicpICYmICgkeTAgIT0gJHkxKSAmJiAhJHN0YXRpYykg ew0KCQkJZm9yICggJGlkeCA9ICR5MDsgJGlkeCA8PSAkeTE7ICRpZHgrKyApIHsNCgkJCQkk dGFnYXR0cyA9ICcgdmFsdWU9IicuJGlkeC4nIic7DQoJCQkJaWYgKCAkaWR4ID09ICRjdXJy eXIgKSAkdGFnYXR0cyAuPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOw0KCQkJCSRvcHRpb250 YWdzW10gPSBkb1RhZygkaWR4LCAnb3B0aW9uJywgJycsICR0YWdhdHRzKTsNCgkJCX0NCgkJ CSRzZWxlY3RvcltdID0gZG9UYWcoam9pbihuLCAkb3B0aW9udGFncyksICdzZWxlY3QnLCAo KCR0aGlzLT5teXdyYXB0YWcpID8gJycgOiAkdGhpcy0+bXljbGFzcyksICcgbmFtZT0ieSIn LCAnJykNCgkJCQkJLiAoKCR0aGlzLT51c2VTZWxlY3RvcignbW9udGgnKSkgPyAnJyA6IGhJ bnB1dCgnbScsICRjdXJybW8pKTsNCgkJfSBlbHNlIHsNCgkJCSRzZWxlY3RvcltdID0gZG9U YWcoJHRoaXMtPmdldFllYXIoKSwgJ3NwYW4nLCAoKCR0aGlzLT5teXdyYXB0YWcpID8gJycg OiAkdGhpcy0+bXljbGFzcykpOw0KCQl9DQoJCSRleHRyYXMgPSAnJzsNCgkJaWYgKCEkc3Rh dGljICYmICggJHRoaXMtPnVzZVNlbGVjdG9yKCdtb250aCcpIHx8ICR0aGlzLT51c2VTZWxl Y3RvcigneWVhcicpICkpIHsNCgkJCWlmICgkdGhpcy0+c2VsYnRuKSB7DQoJCQkJJGV4dHJh cyAuPSBkb1RhZygnJywgJ2lucHV0JywgJ3NtZF9jYWxfaW5wdXQnLCAnIHR5cGU9InN1Ym1p dCIgdmFsdWU9IicuJHRoaXMtPnNlbGJ0bi4nIicpOw0KCQkJfQ0KCQkJaWYgKCR0aGlzLT50 YWJsZUlEKSB7DQoJCQkJJGV4dHJhcyAuPSBoSW5wdXQoJ2NhbGlkJywkdGhpcy0+dGFibGVJ RCk7DQoJCQl9DQoJCQkkZXh0cmFzIC49IGpvaW4oJycsICRmaWx0ZXJIaWQpOw0KCQl9DQoN CgkJJHNlbGVjdG9yID0gJzxmb3JtJy4oKCR0aGlzLT5zZWxidG4pID8gJycgOiAnIG9uY2hh bmdlPSJzdWJtaXQoKSInKS4nIGFjdGlvbj0iJy4kX1NFUlZFUlsnUEhQX1NFTEYnXS4nIiBt ZXRob2Q9ImdldCIgaWQ9InNtZF9jYWxkYXRlIj4nLmRvVGFnKGpvaW4oc3AsICRzZWxlY3Rv cikuJGV4dHJhcywgJHRoaXMtPm15d3JhcHRhZywgJHRoaXMtPm15Y2xhc3MpLic8L2Zvcm0+ JzsNCg0KCQkkbmF2X2JhY2tfbGluayA9ICR0aGlzLT5uYXZpZ2F0aW9uKCR0aGlzLT55ZWFy LCAkdGhpcy0+bW9udGgsICctJywgJGZpbHRlclVSTCk7DQoJCSRuYXZfZndkX2xpbmsgID0g JHRoaXMtPm5hdmlnYXRpb24oJHRoaXMtPnllYXIsICR0aGlzLT5tb250aCwgJysnLCAkZmls dGVyVVJMKTsNCg0KCQkkbmF2X2JhY2sgPSAoISRzdGF0aWMgJiYgJG5hdl9iYWNrX2xpbmsp ID8gJzxhIGhyZWY9IicuJG5hdl9iYWNrX2xpbmsuJyInLiRuYXZjbGFzcy4nPiYjNjA7PC9h PicgOiAnJm5ic3A7JzsNCi8vCQkkbmF2X2Z3ZCAgPSAoKCEkc3RhdGljICYmICRmdXR1cmUg JiYgJG5hdl9md2RfbGluaykgb3IgKCR0aGlzLT5tb250aCAhPSBkYXRlKCduJyx0aW1lKCkp KSkgPyAnPGEgaHJlZj0iJy4kbmF2X2Z3ZF9saW5rLiciJy4kbmF2Y2xhc3MuJz4mIzYyOzwv YT4nIDogJyZuYnNwOyc7IC8vICpzaHJ1ZyogYnJlYWtzIGlmIHN0YXRpYyBzZXQgYW5kIG1v bnRoIDwgdGhpcyBtb250aCB1c2VkDQoJCSRuYXZfZndkICA9ICghJHN0YXRpYyAmJiAkZnV0 dXJlICYmICRuYXZfZndkX2xpbmspID8gJzxhIGhyZWY9IicuJG5hdl9md2RfbGluay4nIicu JG5hdmNsYXNzLic+JiM2Mjs8L2E+JyA6ICcmbmJzcDsnOw0KDQoJCSRjW10gPSBkb1RhZygk bmF2X2JhY2ssJ3RoJyk7DQoJCSRjW10gPSAnPHRoIGNvbHNwYW49IicuKCgkdGhpcy0+c2hv d0lTT1dlZWspID8gNiA6IDUpLiciPicuJHNlbGVjdG9yLic8L3RoPic7DQoJCSRjW10gPSBk b1RhZygkbmF2X2Z3ZCwndGgnKTsNCg0KCQlyZXR1cm4gZG9UYWcoam9pbignJywkYyksJ3Ry Jyk7DQoJfQ0KDQoJZnVuY3Rpb24gbmF2aWdhdGlvbigkeWVhciwkbW9udGgsJGRpcmVjdGlv biwkZmx0KSB7DQoJCWdsb2JhbCAkcGVybWxpbmtfbW9kZTsNCg0KCQlpZigkZGlyZWN0aW9u ID09ICctJykgew0KCQkJaWYoJG1vbnRoIC0gMSA8IDEpIHsNCgkJCQkkbW9udGggPSAxMjsN CgkJCQkkeWVhciAtPSAxOw0KCQkJfSBlbHNlIHsNCgkJCQkkbW9udGggLT0gMTsNCgkJCX0N CgkJfSBlbHNlIHsNCgkJCWlmKCRtb250aCArIDEgPiAxMikgew0KCQkJCSRtb250aCA9IDE7 DQoJCQkJJHllYXIgKz0gMTsNCgkJCX0gZWxzZSB7DQoJCQkJJG1vbnRoICs9IDE7DQoJCQl9 DQoJCX0NCg0KCQkvLyBBYm9ydCBpZiB3ZSdyZSBhYm91dCB0byBnbyBvdXQgb2YgcmFuZ2UN CgkJaWYgKCR5ZWFyIDwgJHRoaXMtPmdldEVZZWFyKCkgfHwgJHllYXIgPiAkdGhpcy0+Z2V0 TFllYXIoKSkgew0KCQkJcmV0dXJuICcnOw0KCQl9DQoNCgkJJGlkID0gKCR0aGlzLT50YWJs ZUlEKSA/IGEuJ2NhbGlkPScuJHRoaXMtPnRhYmxlSUQgOiAnJzsgLy8gQWxsb3cgc3BlY2lm aWMgY2FsZW5kYXIgbmF2aWdhdGlvbiwgaW4gY2FzZSB0aGVyZSdzIG1vcmUgdGhhbiBvbmUg cGVyIHBhZ2UNCgkJaWYoJHBlcm1saW5rX21vZGUgIT0gJ21lc3N5Jykgew0KCQkJcmV0dXJu ICI/bT0kbW9udGgiLmEuInk9JHllYXIiLiRpZC5hLiRmbHQ7DQoJCX0gZWxzZSB7IC8vIGZv ciBtZXNzeSBVUkwncyB3ZSBuZWVkIHRvIGJ1aWxkIHRoZSBlbnRpcmUgcmVxdWVzdCBzdHJp bmcgZmlyc3QsIHRoZW4gdGFjayBvbiB0aGUgcmVzdA0KCQkJJG91dCA9IG1ha2VPdXQoJ2lk JywncycsJ2MnLCdxJywncGcnLCdwJywnbW9udGgnKTsNCgkJCSRyID0gJz8nOw0KCQkJZm9y ZWFjaCgkb3V0IGFzICRrZXkgPT4gJHZhbCApIHsNCgkJCQkkciAuPSAoJHZhbCkgPyAiJGtl eT0kdmFsIi5hIDogJyc7DQoJCQl9DQoJCQlyZXR1cm4gJHIuIm09JG1vbnRoIi5hLiJ5PSR5 ZWFyIi4kaWQuYS4kZmx0Ow0KCQl9DQoJfQ0KfQ0KDQoNCg0KDQoNCg0KDQoNCg0KDQpjbGFz cyBTTURfU21hbGxfQ2FsZW5kYXIgZXh0ZW5kcyBTTURfQ2FsZW5kYXIgew0KCXZhciAkc2Vj dGlvbiA9ICcnOw0KCXZhciAkY2F0ZWdvcnkgPSAnJzsNCglmdW5jdGlvbiBTTURfU21hbGxf Q2FsZW5kYXIoJHllYXIsJG1vbnRoLCRkYXksJGV2ZW50cywkc2VjdGlvbiwkY2F0ZWdvcnkp IHsNCgkJJHRoaXMtPnNlY3Rpb24gPSAkc2VjdGlvbjsNCgkJJHRoaXMtPmNhdGVnb3J5ID0g JGNhdGVnb3J5Ow0KCQkkdGhpcy0+U01EX0NhbGVuZGFyKCR5ZWFyLCRtb250aCwkZGF5LCRl dmVudHMpOw0KCX0NCg0KCWZ1bmN0aW9uIGRzcERheUNlbGwoJHRoZWRheSkgew0KCQlnbG9i YWwgJHBlcm1saW5rX21vZGU7DQoNCgkJJGNlbGxjbGFzcyA9ICR0aGlzLT5nZXRDZWxsQ2xh c3MoKS4nICc7DQoJCSRoYXNhcnRpY2xlID0gaXNzZXQoJHRoaXMtPmV2ZW50c1skdGhlZGF5 XSk7DQoJCSRjbGFzc1tdID0gJGNlbGxjbGFzcyAuICgoJGhhc2FydGljbGUpID8gJHRoaXMt PmNsYXNzcHJlZml4LidldmVudCcgOiAnJyk7DQoJCWlmICgoaW5fYXJyYXkoIGRhdGUoJ2Qt bS1ZJywgbWt0aW1lKCAwLCAwLCAwLCAkdGhpcy0+Z2V0TW9udGgoKSwgJHRoZWRheSwgJHRo aXMtPmdldFllYXIoKSkgKSwgJHRoaXMtPmhvbGlkYXlzKSkgKSB7DQoJCQkkY2xhc3NbXSA9 ICR0aGlzLT5jbGFzc3ByZWZpeC4naG9scyc7DQoJCX0NCgkJaWYoJHRoaXMtPm1vbnRoID09 IGRhdGUoJ24nLHRpbWUoKSt0el9vZmZzZXQoKSApIGFuZCAkdGhlZGF5ID09IGRhdGUoJ2on LHRpbWUoKSt0el9vZmZzZXQoKSkgKSB7DQoJCQkkY2xhc3NbXSA9ICR0aGlzLT5jbGFzc3By ZWZpeC4ndG9kYXknOw0KCQl9DQoNCgkJaWYoIGlzc2V0KCR0aGlzLT5ldmVudHNbJHRoZWRh eV0pICkgew0KCQkJJGRheXNfZXZlbnRzID0gJHRoaXMtPmV2ZW50c1skdGhlZGF5XTsNCgkJ CWZvcmVhY2goJGRheXNfZXZlbnRzIGFzICRldikgew0KCQkJCSRldmNsYXNzID0gdHJpbSgk ZXZbJ3R5cGUnXSk7DQoJCQkJZm9yZWFjaCAoZXhwbG9kZSgnICcsICRldmNsYXNzKSBhcyAk ZXZjKSB7DQoJCQkJCSRjbGFzc1tdPSAkZXZjOw0KCQkJCX0NCg0KCQkJCSRvdXRbXSA9ICgk dGhpcy0+ZXZ3cmFwdGFnKSA/IHRhZygkZXZbJ2V2J10sICR0aGlzLT5ldndyYXB0YWcsICgo JGV2Y2xhc3MpID8gJyBjbGFzcz0iJy4kZXZjbGFzcy4nIicgOiAnJykpIDogJGV2Wydldidd Ow0KCQkJfQ0KDQoJCQlpZiggJHBlcm1saW5rX21vZGUgIT0gJ3llYXJfbW9udGhfZGF5X3Rp dGxlJyApIHsNCgkJCQkkaHJlZiA9ICcgaHJlZj0iJy5odS4nP2RhdGU9Jy4kdGhpcy0+eWVh ci4nLScuJHRoaXMtPmRvdWJsZWRpZ2l0KCR0aGlzLT5tb250aCkuJy0nLiR0aGlzLT5kb3Vi bGVkaWdpdCgkdGhlZGF5KTsNCgkJCQlpZigkdGhpcy0+c2VjdGlvbikgeyAkaHJlZiA9ICRo cmVmLmEuJ3M9Jy4kdGhpcy0+c2VjdGlvbjsgfQ0KCQkJCWlmKCR0aGlzLT5jYXRlZ29yeSkg eyAkaHJlZiA9ICRocmVmLmEuJ2M9Jy4kdGhpcy0+Y2F0ZWdvcnk7IH0NCgkJCQkkaHJlZiAu PSAnIic7DQoJCQl9IGVsc2Ugew0KCQkJCSRzZWN0aW9uID0gKCR0aGlzLT5zZWN0aW9uKSA/ ICR0aGlzLT5zZWN0aW9uLicvJyA6ICcnOw0KCQkJCSRocmVmID0gJyBocmVmPSInLmh1LiRz ZWN0aW9uLiR0aGlzLT55ZWFyLicvJy4kdGhpcy0+ZG91YmxlZGlnaXQoJHRoaXMtPm1vbnRo KS4nLycuJHRoaXMtPmRvdWJsZWRpZ2l0KCR0aGVkYXkpLiciJzsNCgkJCX0NCg0KLy8JCQkk dGl0bGUgPSAnIHRpdGxlPSInLnNhZmVfc3RyZnRpbWUoJyV4JyxnbW1rdGltZSgwLDAsMCwk dGhpcy0+bW9udGgsJHRoZWRheSsxLCR0aGlzLT55ZWFyKSkuJyInOyAvLyBubyBpZGVhIHdo eSAkdGhlZGF5KzEsIGJ1dCBvdGhlcndpc2UgaXQgd29uJ3Qgd29yaw0KDQoJCQkkY1tdID0g ZG9UYWcoJHRoZWRheS5qb2luKCcnLCRvdXQpLCdhJywnJywkaHJlZik7DQoJCX0gZWxzZSB7 DQoJCQkkY1tdID0gJHRoZWRheTsNCgkJfQ0KDQoJCXJldHVybiBkb1RhZyhqb2luKCcnLCRj KSwndGQnLGpvaW4oJyAnLCRjbGFzcykpOw0KCX0NCg0KCWZ1bmN0aW9uIGRvdWJsZWRpZ2l0 KCRuKSB7DQoJCWlmKCRuIDwgMTApIHsgJG4gPSAnMCcuKGludCkkbjsgfQ0KCQlyZXR1cm4g JG47DQoJfQ0KDQp9DQoNCi8qKg0KKiBCYXNpYyBDYWxlbmRhciBkYXRhIGFuZCBkaXNwbGF5 DQoqIGh0dHA6Ly93d3cub3NjYXJtLm9yZy9zdGF0aWMvcGcvY2FsZW5kYXJDbGFzcy8NCiog QGF1dGhvciBPc2NhciBNZXJpZGENCiogQGNyZWF0ZWQgSmFuIDE4IDIwMDQNCiogQHBhY2th Z2UgIGdvQ29yZUxpYg0KKi8NCmNsYXNzIFNNRF9SYXdfQ2FsZW5kYXIgew0KdmFyICR5ZWFy Ow0KdmFyICRleXI7DQp2YXIgJGx5cjsNCnZhciAkbW9udGg7DQp2YXIgJGRheTsNCnZhciAk ZGF5TmFtZUZtdDsNCnZhciAkbXRoTmFtZUZtdDsNCnZhciAkc3RhcnREYXk7DQp2YXIgJHNl bGVjdG9yczsNCnZhciAkc2VsYnRuOw0KdmFyICRzaG93SVNPV2VlazsNCnZhciAkZW5kRGF5 Ow0KdmFyICRmaXJzdERheU9mV2VlayA9IDA7DQp2YXIgJHN0YXJ0T2Zmc2V0ID0gMDsNCnZh ciAkY2xhc3NsZXZlbHM7DQp2YXIgJGNsYXNzcHJlZml4Ow0KdmFyICRldmNsYXNzcHJlZml4 Ow0KdmFyICRldndyYXB0YWc7DQp2YXIgJG15d3JhcHRhZzsNCnZhciAkcm93Y2xhc3M7DQp2 YXIgJGNlbGxjbGFzczsNCnZhciAkZW1wdHljbGFzczsNCnZhciAkaXNvY2xhc3M7DQp2YXIg JG5hdmNsYXNzOw0KdmFyICRteWNsYXNzOw0KdmFyICRmb3B0czsNCnZhciAkaG9saWRheXM7 DQovKioNCiogQ29uc3RydWN0b3INCioNCiogQHBhcmFtIGludGVnZXIsIHllYXINCiogQHBh cmFtIGludGVnZXIsIG1vbnRoDQoqIEBwYXJhbSBpbnRlZ2VyLCBkYXkNCiogQHJldHVybiBv YmplY3QNCiogQHB1YmxpYw0KKi8NCmZ1bmN0aW9uIFNNRF9SYXdfQ2FsZW5kYXIgKCAkeXIs ICRtbywgJGR5PScxJykgew0KCSR0aGlzLT5zZXRZZWFyKCR5cik7DQoJJHRoaXMtPnNldE1v bnRoKCRtbyk7DQoJJHRoaXMtPnNldERheSgkZHkpOw0KCSR0aGlzLT5zZXRDbGFzc1ByZWZp eCgnc21kX2NhbF8nKTsNCg0KCSR0aGlzLT5zdGFydFRpbWUgPSBzdHJ0b3RpbWUoICIkeXIt JG1vLTAxIDAwOjAwIiApOw0KCSR0aGlzLT5zdGFydERheQk9IGRhdGUoICdEJywgJHRoaXMt PnN0YXJ0VGltZSApOw0KCSR0aGlzLT53ZWVrRGF5CT0gZGF0ZSggJ3cnLCAkdGhpcy0+c3Rh cnRUaW1lICk7DQoJJHRoaXMtPmVuZFRpbWUgICA9IHN0cnRvdGltZSggIiR5ci0kbW8tIi4k dGhpcy0+ZW5kRGF5LiIgMjM6NTkiICk7DQoJJHRoaXMtPmVuZERheSA9IGRhdGUoICd0Jywg JHRoaXMtPnN0YXJ0VGltZSApOw0KDQoJJHRoaXMtPnNldE5hbWVGb3JtYXQoJyVhJywgJ2Qn KTsNCgkkdGhpcy0+c2V0TmFtZUZvcm1hdCgnJUInLCAnbScpOw0KCSR0aGlzLT5zZXRGaXJz dERheU9mV2VlaygwKTsNCgkkdGhpcy0+c2V0U2hvd0lTT1dlZWsoMCk7DQoJJHRoaXMtPnNl dFRhYmxlSUQoJycpOw0KCSR0aGlzLT5zZXRUYWJsZUNsYXNzKCcnKTsNCn0NCi8vID09PT0g ZW5kIENhbGVuZGFyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KZnVuY3Rpb24gZ2V0U3RhcnRUaW1lKCkgeyByZXR1cm4gJHRoaXMtPnN0YXJ0 VGltZTsgfQ0KZnVuY3Rpb24gZ2V0V2Vla0RheSgpIHsgcmV0dXJuICR0aGlzLT53ZWVrRGF5 OyB9DQpmdW5jdGlvbiBnZXRFbmRUaW1lKCkgeyByZXR1cm4gJHRoaXMtPmVuZFRpbWU7IH0N CmZ1bmN0aW9uIGdldFllYXIoKSB7IHJldHVybiAkdGhpcy0+eWVhcjsgfQ0KZnVuY3Rpb24g Z2V0RVllYXIoKSB7IHJldHVybiAkdGhpcy0+ZXlyOyB9DQpmdW5jdGlvbiBnZXRMWWVhcigp IHsgcmV0dXJuICR0aGlzLT5seXI7IH0NCmZ1bmN0aW9uIGdldE1vbnRoKCkgeyByZXR1cm4g JHRoaXMtPm1vbnRoOyB9DQpmdW5jdGlvbiBnZXREYXkoKSB7IHJldHVybiAkdGhpcy0+ZGF5 OyB9DQpmdW5jdGlvbiBnZXRSb3dDbGFzcygpIHsgcmV0dXJuICR0aGlzLT5yb3djbGFzczsg fQ0KZnVuY3Rpb24gZ2V0Q2VsbENsYXNzKCkgeyByZXR1cm4gJHRoaXMtPmNlbGxjbGFzczsg fQ0KZnVuY3Rpb24gZ2V0RW1wdHlDbGFzcygpIHsgcmV0dXJuICR0aGlzLT5lbXB0eWNsYXNz OyB9DQpmdW5jdGlvbiBnZXRJU09XZWVrQ2xhc3MoKSB7IHJldHVybiAkdGhpcy0+aXNvY2xh c3M7IH0NCmZ1bmN0aW9uIGdldE5hdkNsYXNzKCkgeyByZXR1cm4gJHRoaXMtPm5hdmNsYXNz OyB9DQpmdW5jdGlvbiBnZXRNb250aE5hbWUoKSB7IHJldHVybiBzdHJmdGltZSggJHRoaXMt Pm10aE5hbWVGbXQsICR0aGlzLT5zdGFydFRpbWUgKTsgfQ0KZnVuY3Rpb24gc2V0VGFibGVJ RCgkaWQpIHsgJHRoaXMtPnRhYmxlSUQgPSAkaWQ7IH0NCmZ1bmN0aW9uIHNldFllYXIoJHll YXIpeyAkdGhpcy0+eWVhciA9ICR5ZWFyOyB9DQpmdW5jdGlvbiBzZXRFWWVhcigkeWVhcil7 ICR0aGlzLT5leXIgPSAkeWVhcjsgfQ0KZnVuY3Rpb24gc2V0TFllYXIoJHllYXIpeyAkdGhp cy0+bHlyID0gJHllYXI7IH0NCmZ1bmN0aW9uIHNldE1vbnRoKCRtb250aCkgeyAkdGhpcy0+ bW9udGggPSAoaW50KSRtb250aDsgfQ0KZnVuY3Rpb24gc2V0RGF5KCRkYXkpeyAkdGhpcy0+ ZGF5ID0gJGRheTsgfQ0KZnVuY3Rpb24gc2V0U2hvd0lTT1dlZWsoJHZhbCkgeyAkdGhpcy0+ c2hvd0lTT1dlZWsgPSAkdmFsOyB9DQpmdW5jdGlvbiBzZXRDbGFzc0xldmVscygkY2xzKXsg JHRoaXMtPmNsYXNzbGV2ZWxzID0gJGNsczsgfQ0KZnVuY3Rpb24gc2V0Q2xhc3NQcmVmaXgo JGNscyl7ICR0aGlzLT5jbGFzc3ByZWZpeCA9ICRjbHM7IH0NCmZ1bmN0aW9uIHNldEV2ZW50 UHJlZml4KCRjbHMpeyAkdGhpcy0+ZXZjbGFzc3ByZWZpeCA9ICRjbHM7IH0NCmZ1bmN0aW9u IHNldEV2ZW50V3JhcHRhZygkd3JhcCl7ICR0aGlzLT5ldndyYXB0YWcgPSAkd3JhcDsgfQ0K ZnVuY3Rpb24gc2V0TVlXcmFwdGFnKCR3cmFwKXsgJHRoaXMtPm15d3JhcHRhZyA9ICR3cmFw OyB9DQpmdW5jdGlvbiBzZXRUYWJsZUNsYXNzKCRjbHMpIHsgJHRoaXMtPnRhYmxlY2xhc3Mg PSAoJGNscykgPyAkdGhpcy0+Y2xhc3NwcmVmaXguJGNscyA6ICcnOyB9DQpmdW5jdGlvbiBz ZXRSb3dDbGFzcygkY2xzKXsgJHRoaXMtPnJvd2NsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNs YXNzcHJlZml4LiRjbHMgOiAnJzsgfQ0KZnVuY3Rpb24gc2V0Q2VsbENsYXNzKCRjbHMpeyAk dGhpcy0+Y2VsbGNsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNsYXNzcHJlZml4LiRjbHMgOiAn JzsgfQ0KZnVuY3Rpb24gc2V0RW1wdHlDbGFzcygkY2xzKXsgJHRoaXMtPmVtcHR5Y2xhc3Mg PSAoJGNscykgPyAkdGhpcy0+Y2xhc3NwcmVmaXguJGNscyA6ICcnOyB9DQpmdW5jdGlvbiBz ZXRJU09XZWVrQ2xhc3MoJGNscyl7ICR0aGlzLT5pc29jbGFzcyA9ICgkY2xzKSA/ICR0aGlz LT5jbGFzc3ByZWZpeC4kY2xzIDogJyc7IH0NCmZ1bmN0aW9uIHNldE5hdkNsYXNzKCRjbHMp eyAkdGhpcy0+bmF2Y2xhc3MgPSAoJGNscykgPyAkdGhpcy0+Y2xhc3NwcmVmaXguJGNscyA6 ICcnOyB9DQpmdW5jdGlvbiBzZXRNWUNsYXNzKCRjbHMpeyAkdGhpcy0+bXljbGFzcyA9ICgk Y2xzKSA/ICR0aGlzLT5jbGFzc3ByZWZpeC4kY2xzIDogJyc7IH0NCmZ1bmN0aW9uIHNldEZp bHRlck9wdHMoJGYpIHsgJHRoaXMtPmZvcHRzID0gJGY7IH0NCmZ1bmN0aW9uIHNldEhvbGlk YXlzKCRob2xzKSB7ICR0aGlzLT5ob2xpZGF5cyA9ICRob2xzOyB9DQpmdW5jdGlvbiBzZXRT ZWxlY3RvcnMoJHNlbCwgJGJ0bikgeyAkdGhpcy0+c2VsZWN0b3JzID0gJHNlbDsgJHRoaXMt PnNlbGJ0biA9ICRidG47IH0NCmZ1bmN0aW9uIHVzZVNlbGVjdG9yKCR2YWwpIHsgcmV0dXJu IGluX2FycmF5KCR2YWwsICR0aGlzLT5zZWxlY3RvcnMpOyB9DQpmdW5jdGlvbiBzZXRGaXJz dERheU9mV2VlaygkZCkgew0KCSR0aGlzLT5maXJzdERheU9mV2VlayA9ICgoaW50KSRkIDw9 IDYgYW5kIChpbnQpJGQgPj0gMCkgPyAoaW50KSRkIDogMDsNCg0KCSR0aGlzLT5zdGFydE9m ZnNldCA9IGRhdGUoICd3JywgJHRoaXMtPnN0YXJ0VGltZSApLSR0aGlzLT5maXJzdERheU9m V2VlazsNCglpZiAoICR0aGlzLT5zdGFydE9mZnNldCA8IDAgKSB7DQoJCSR0aGlzLT5zdGFy dE9mZnNldCA9IDcgLSBhYnMoJHRoaXMtPnN0YXJ0T2Zmc2V0KTsNCgl9DQp9DQovKioNCiog ZnJtOiBhbnkgdmFsaWQgUEhQIHN0cmZ0aW1lKCkgc3RyaW5nIG9yIEFCQlIvRlVMTA0KKiB0 eXA6IGQgdG8gc2V0IGRheSwgbSB0byBzZXQgbW9udGggZm9ybWF0DQoqLw0KZnVuY3Rpb24g c2V0TmFtZUZvcm1hdCgkZnJtLCAkdHlwPSJkIikgew0KCXN3aXRjaCAoJGZybSkgew0KCQlj YXNlICJGVUxMIjoNCgkJCSRmbXQgPSAoJHR5cCA9PSAiZCIpID8gIiVBIiA6ICIlQiI7DQoJ CQlicmVhazsNCgkJY2FzZSAiQUJCUiI6DQoJCQkkZm10ID0gKCR0eXAgPT0gImQiKSA/ICIl YSIgOiAiJWIiOw0KCQkJYnJlYWs7DQoJCWRlZmF1bHQ6DQoJCQkkZm10ID0gJGZybTsNCgkJ CWJyZWFrOw0KCX0NCg0KCWlmICgkdHlwID09ICJkIikgew0KCQkkdGhpcy0+ZGF5TmFtZUZt dCA9ICRmbXQ7DQoJfSBlbHNlIHsNCgkJJHRoaXMtPm10aE5hbWVGbXQgPSAkZm10Ow0KCX0N Cn0NCi8qKg0KKiBSZXR1cm5zIG1hcmt1cCBmb3IgZGlzcGxheWluZyB0aGUgY2FsZW5kYXIu DQoqIEByZXR1cm4NCiogQHB1YmxpYw0KKi8NCmZ1bmN0aW9uIGRpc3BsYXkgKCApIHsNCgkk aWQgPSAoJHRoaXMtPnRhYmxlSUQpID8gJyBpZD0iJy4kdGhpcy0+dGFibGVJRC4nIicgOiAn JzsNCgkkY1tdID0gJzx0YWJsZScuJGlkLic+JzsNCgkkY1tdID0gJHRoaXMtPmRzcERheU5h bWVzKCk7DQoJJGNbXSA9ICR0aGlzLT5kc3BEYXlDZWxscygpOw0KCSRjW10gPSAnPC90YWJs ZT4nOw0KDQoJcmV0dXJuIGpvaW4oJycsJGMpOw0KfQ0KLy8gPT09PSBlbmQgZGlzcGxheSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi8qKg0K KiBEaXNwbGF5cyB0aGUgcm93IG9mIGRheSBuYW1lcy4NCiogQHJldHVybiBzdHJpbmcNCiog QHByaXZhdGUNCiovDQpmdW5jdGlvbiBkc3BEYXlOYW1lcyAoICkgew0KCS8vIFRoaXMgaXMg ZG9uZSB0byBtYWtlIHN1cmUgU3VuZGF5IGlzIGFsd2F5cyB0aGUgZmlyc3QgZGF5IG9mIG91 ciBhcnJheQ0KCS8vIFVuaXggdGltZSBnZXRzIGEgbGl0dGxlIGZ1bmt5IGF0IHRoZSBiZWdp bm5pbmcgZGVwZW5kaW5nIHVwb24geW91ciB0aW1lem9uZS4NCgkkc2VydmVyb2Zmc2V0ID0g Z21ta3RpbWUoMCwwLDApIC0gbWt0aW1lKDAsMCwwKTsNCgkkc3RhcnQgPSAoJHNlcnZlcm9m ZnNldCA8IDApID8gNCA6IDM7DQoJJGVuZCA9ICRzdGFydCArIDc7DQoJZm9yKCRpPSRzdGFy dDsgJGk8JGVuZDsgJGkrKykgew0KCQkkbmFtZXNbXSA9IHVjZmlyc3Qoc2FmZV9zdHJmdGlt ZSgkdGhpcy0+ZGF5TmFtZUZtdCwgODY0MDAqJGkgLSB0el9vZmZzZXQoKSApKTsNCgl9DQoN CgkkY1tdID0gJzx0cj4nOw0KDQoJJGkgPSAkdGhpcy0+Zmlyc3REYXlPZldlZWs7DQoJJGog PSAwOyAvLyBjb3VudCBudW1iZXIgb2YgZGF5cyBkaXNwbGF5ZWQNCgkkZW5kID0gZmFsc2U7 DQoNCglpZiAoJHRoaXMtPnNob3dJU09XZWVrKSB7DQoJCSRjW10gPSAiPHRoPldlZWsgIzwv dGg+IjsgLy8gVE9ETzogTUxQDQoJfQ0KCWZvcigkaiA9IDA7ICRqPD02OyAkaisrLCAkaSsr KSB7DQoJCWlmKCRpID09IDcpIHsgJGkgPSAwOyB9DQoJCSRjW10gPSAnPHRoPicuJG5hbWVz WyRpXS4iPC90aD4iOw0KCX0NCg0KCSRjW10gPSAnPC90cj4nOw0KCXJldHVybiBqb2luKCcn LCRjKTsNCn0NCi8vID09PT0gZW5kIGRzcERheU5hbWVzID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLyoqDQoqIERpc3BsYXlzIGFsbCBkYXkg Y2VsbHMgZm9yIHRoZSBtb250aA0KKg0KKiBAcmV0dXJuIHN0cmluZw0KKiBAcHJpdmF0ZQ0K Ki8NCmZ1bmN0aW9uIGRzcERheUNlbGxzICggKSB7DQoJJGkgPSAwOyAvLyBjZWxsIGNvdW50 ZXINCgkkZW1wdHlDbGFzcyA9ICR0aGlzLT5nZXRFbXB0eUNsYXNzKCk7DQoJJGlzb0NsYXNz ID0gJHRoaXMtPmdldElTT1dlZWtDbGFzcygpOw0KCSRyb3dDbGFzcyA9ICR0aGlzLT5nZXRS b3dDbGFzcygpOw0KCSRyb3dDbGFzcyA9ICgkcm93Q2xhc3MpID8gJyBjbGFzcz0iJy4kcm93 Q2xhc3MuJyInIDogJyc7DQoNCgkkY1tdID0gJzx0cicuJHJvd0NsYXNzLic+JzsNCg0KCWlm ICgkdGhpcy0+c2hvd0lTT1dlZWspIHsNCgkJJGNbXSA9ICc8dGQgY2xhc3M9IicuJGlzb0Ns YXNzLiciPicuZGF0ZSggJ1cnLCAkdGhpcy0+c3RhcnRUaW1lICkuJzwvdGQ+JzsNCgl9DQoJ Ly8gZmlyc3QgZGlzcGxheSBlbXB0eSBjZWxscyBiYXNlZCBvbiB3aGF0IHdlZWtkYXkgdGhl IG1vbnRoIHN0YXJ0cyBpbg0KCWZvciggJGo9MDsgJGo8JHRoaXMtPnN0YXJ0T2Zmc2V0OyAk aisrICkJew0KCQkkaSsrOw0KDQoJCSRjW10gPSAnPHRkIGNsYXNzPSInLiRlbXB0eUNsYXNz LiciPiZuYnNwOzwvdGQ+JzsNCgl9IC8vIGVuZCBvZmZzZXQgY2VsbHMNCg0KCS8vIHdyaXRl IG91dCB0aGUgcmVzdCBvZiB0aGUgZGF5cywgYXQgZWFjaCBzdW5kYXksIHN0YXJ0IGEgbmV3 IHJvdy4NCglmb3IoICRkPTE7ICRkPD0kdGhpcy0+ZW5kRGF5OyAkZCsrICkgew0KCQkkaSsr Ow0KCQkkY1tdID0gJHRoaXMtPmRzcERheUNlbGwoICRkICk7DQoJCWlmICggJGklNyA9PSAw ICkgeyAkY1tdID0gJzwvdHI+JzsgfQ0KCQlpZiAoICRkPCR0aGlzLT5lbmREYXkgJiYgJGkl NyA9PSAwICkgew0KCQkJJGNbXSA9ICc8dHInLiRyb3dDbGFzcy4nPic7DQoJCQlpZiAoJHRo aXMtPnNob3dJU09XZWVrKSB7DQoJCQkJJGNbXSA9ICc8dGQgY2xhc3M9IicuJGlzb0NsYXNz LiciPicuZGF0ZSggJ1cnLCBzdHJ0b3RpbWUoICR0aGlzLT5nZXRZZWFyKCkuIi0iLiR0aGlz LT5nZXRNb250aCgpLiItIi4oaW50KSgkZCArIDEpIC4iIDAwOjAwIiApKS4nPC90ZD4nOw0K CQkJfQ0KCQl9DQoJfQ0KCS8vIGZpbGwgaW4gdGhlIGZpbmFsIHJvdw0KCSRsZWZ0ID0gNyAt ICggJGklNyApOw0KCWlmICggJGxlZnQgPCA3KQl7DQoJCWZvciAoICRqPTA7ICRqPCRsZWZ0 OyAkaisrICkJew0KCQkgICRjW10gPSAnPHRkIGNsYXNzPSInLiRlbXB0eUNsYXNzLiciPiZu YnNwOzwvdGQ+JzsNCgkJfQ0KCQkkY1tdID0gIlxuXHQ8L3RyPiI7DQoJfQ0KCXJldHVybiBq b2luKCcnLCRjKTsNCn0NCi8vID09PT0gZW5kIGRzcERheUNlbGxzID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLyoqDQoqIG91dHB1dHMgdGhl IGNvbnRlbnRzIGZvciBhIGdpdmVuIGRheQ0KKg0KKiBAcGFyYW0gaW50ZWdlciwgZGF5DQoq IEBhYnN0cmFjdA0KKi8NCmZ1bmN0aW9uIGRzcERheUNlbGwgKCAkZGF5ICkgew0KCXJldHVy biAnPHRkPicuJGRheS4nPC90ZD4nOw0KfQ0KLy8gPT09PSBlbmQgZGF5Q2VsbCA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCn0gLy8gZW5kIGNs YXNzDQoNCi8vIFBlcmZvcm0gb25lIG9mIDIgdHlwZXMgb2YgdGVzdDogYW4gZXZlbnQtYmFz ZWQgdGVzdCwgb3IgYW4gaW5mby1iYXNlZCB0ZXN0DQpmdW5jdGlvbiBzbWRfaWZfY2FsKCRh dHRzLCAkdGhpbmcpIHsNCglnbG9iYWwgJHNtZF9jYWxfZmxhZzsNCg0KCWV4dHJhY3QobEF0 dHMoYXJyYXkoDQoJCSdmbGFnJyA9PiAnJywgLy8gZXZlbnQsIHJlY3VyLCBtdWx0aShwcmV2 LGZpcnN0LGxhc3QpLCBjYW5jZWwsIGhvbHMNCgkJJ2NhbGlkJyA9PiAnJywNCgkJJ3llYXIn ID0+ICcnLA0KCQknbW9udGgnID0+ICcnLA0KCQknZGF5JyA9PiAnJywNCgkJJ2xvZ2ljJyA9 PiAnYW5kJywNCgkpLCAkYXR0cykpOw0KDQoJJGZsYWcgPSBkb19saXN0KCRmbGFnKTsNCgkk Y3RyID0gMDsNCg0KCWlmICgkc21kX2NhbF9mbGFnICYmICRmbGFnKSB7DQoJCSRudW0gPSBj b3VudCgkZmxhZyk7DQoJCWZvcmVhY2ggKCRmbGFnIGFzICR3aGF0bm90KSB7DQoJCQlpZiAo ZW1wdHkoJHdoYXRub3QpKSBjb250aW51ZTsNCgkJCSRjdHIgKz0gKGluX2FycmF5KCR3aGF0 bm90LCAkc21kX2NhbF9mbGFnKSkgPyAxIDogMDsNCgkJfQ0KCX0gZWxzZSB7DQoJCS8vIENv bWluZyBzb29uDQoNCgl9DQoNCgkkcmVzdWx0ID0gKCgkY3RyID09PSAkbnVtICYmICRsb2dp YyA9PSAiYW5kIikgfHwgJGN0ciA+IDAgJiYgJGxvZ2ljID09ICJvciIpID8gdHJ1ZSA6IGZh bHNlOw0KCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhpbmcsICRyZXN1bHQpKTsNCn0NCg0K ZnVuY3Rpb24gc21kX2NhbF9pbmZvKCRhdHRzKSB7DQoJZ2xvYmFsICRwcmV0ZXh0LCAkc21k X2NhbF9mbGFnLCAkc21kX2NhbF9pZDsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSd0 eXBlJyA9PiAnZmxhZycsIC8vIGZsYWcsIG1vbnRoLCB5ZWFyLCBkYXRlLCBjYWxpZA0KCQkn am9pbicgPT4gJyAnLA0KCQknaHRtbCcgPT4gMCwNCgkpLCAkYXR0cykpOw0KDQoJJGpvaW4g PSAoJGh0bWwpID8gYSA6ICRqb2luOyAvLyBodG1sIG1vZGUgZm9yY2VzIGFtcGVyc2FuZCBq b2luDQoJJHR5cGUgPSBkb19saXN0KCR0eXBlKTsNCgkkcmV0ID0gYXJyYXkoKTsNCglmb3Jl YWNoICgkdHlwZSBhcyAkaXRlbSkgew0KCQlzd2l0Y2ggKCRpdGVtKSB7DQoJCQljYXNlICJm bGFnIjoNCgkJCQkkcmV0W10gPSBqb2luKCRqb2luLCAkc21kX2NhbF9mbGFnKTsNCgkJCQli cmVhazsNCgkJCWNhc2UgIm1vbnRoIjoNCgkJCQlpZiAoZ3BzKCdtJykpIHsNCgkJCQkJJHJl dFtdID0gKCgkaHRtbCkgPyAnbT0nIDogJycpIC4gZ3BzKCdtJyk7DQoJCQkJfQ0KCQkJCWJy ZWFrOw0KCQkJY2FzZSAieWVhciI6DQoJCQkJaWYgKGdwcygneScpKSB7DQoJCQkJCSRyZXRb XSA9ICgoJGh0bWwpID8gJ3k9JyA6ICcnKSAuIGdwcygneScpOw0KCQkJCX0NCgkJCQlicmVh azsNCgkJCWNhc2UgInNlY3Rpb24iOg0KCQkJCWlmICgkcHJldGV4dFsncyddKSB7DQoJCQkJ CSRyZXRbXSA9ICgoJGh0bWwpID8gJ3M9JyA6ICcnKSAuICRwcmV0ZXh0WydzJ107DQoJCQkJ fQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAiY2F0ZWdvcnkiOg0KCQkJCWlmICgkcHJldGV4dFsn YyddKSB7DQoJCQkJCSRyZXRbXSA9ICgoJGh0bWwpID8gJ2M9JyA6ICcnKSAuICRwcmV0ZXh0 WydjJ107DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAiYXV0aG9yIjoNCgkJCQkkY3Vy cmF1dGhvciA9IGF1dGhvcihhcnJheSgpKTsNCgkJCQlpZiAoJGN1cnJhdXRob3IpIHsNCgkJ CQkJJHJldFtdID0gKCgkaHRtbCkgPyAnYXV0aG9yPScgOiAnJykgLiAkY3VycmF1dGhvcjsN CgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlICJjYWxpZCI6DQoJCQkJaWYgKCRzbWRfY2Fs X2lkKSB7DQoJCQkJCSRyZXRbXSA9ICgoJGh0bWwpID8gJ2NhbGlkPScgOiAnJykgLiAkc21k X2NhbF9pZDsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCX0NCgl9DQoJcmV0dXJuIGpvaW4oJGpv aW4sICRyZXQpOw0KfQ0KDQpmdW5jdGlvbiBzbWRfY2FsX25vdygkYXR0cykgew0KCWdsb2Jh bCAkZGF0ZWZvcm1hdDsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSdmb3JtYXQnID0+ ICRkYXRlZm9ybWF0LA0KCQknZ210JyA9PiAnJywNCgkJJ2xhbmcnID0+ICcnLA0KCSksICRh dHRzKSk7DQoNCglyZXR1cm4gc2FmZV9zdHJmdGltZSgkZm9ybWF0LCB0aW1lKCksICRnbXQs ICRsYW5nKTsNCn0iO3M6NDoidHlwZSI7czoxOiIwIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6 NDoiaGVscCI7czozMzg4NjoiCTxwPjxkaXYgaWQ9InNtZF9oZWxwIj48L3A+CgoJPGgxIGlk PSJ0b3AiPnNtZF9jYWxlbmRhcjwvaDE+CgoJPHA+UmVuZGVyIGEgY2FsZW5kYXIgd2l0aCBv bmUgb3IgbW9yZSBhcnRpY2xlcyBhcyBldmVudHMgb24gZWFjaCBkYXkuIFVzZWZ1bCBmb3Ig Z2lnIGd1aWRlcywgJiM4MjIwO3doYXQmIzgyMTc7cyBvbiYjODIyMTsgb3Igc2NoZWR1bGlu Zy48L3A+CgoJPGgyIGlkPSJmZWF0dXJlcyI+RmVhdHVyZXM8L2gyPgoKCTx1bD4KCQk8bGk+ RnVsbC1zaXplIG9yIG1pbmkgY2FsZW5kYXIgYnkgbW9udGggd2l0aCBvcHRpb25hbCA8c3Bh biBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVrIGRpc3BsYXk8L2xpPgoJCTxsaT5OYXZp Z2F0aW9uOiBuZXh0L3ByZXYgbW9udGggb3Igb3B0aW9uYWwgZHJvcGRvd24gb2YgbW9udGgg LyB5ZWFyLiBQZXJtaXR0ZWQgeWVhciByYW5nZSBjYW4gYmUgZGV0ZXJtaW5lZCBieSBmaXJz dC9sYXN0IGFydGljbGUgb3IgZXh0ZW5kZWQgYnkgKy8tIE4geWVhcnMgaW4gZWl0aGVyIGRp cmVjdGlvbjwvbGk+CgkJPGxpPk9uZSBhcnRpY2xlID0gb25lIGV2ZW50LCBuYXRpdmUgdG8g PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gd2l0aCB0aGUgUG9zdGVkIGRhdGUgYmVp bmcgdGhlIGRhdGUgaXQgYXBwZWFycyBpbiB0aGUgY2FsZW5kYXI8L2xpPgoJCTxsaT5GaWx0 ZXIgZXZlbnRzIGJ5IGNhdGVnb3J5IC8gc2VjdGlvbiAvIGF1dGhvciAvIHN0YXR1cyAvIHRp bWUgb3IgZXhwaXJ5PC9saT4KCQk8bGk+Tm9taW5hdGUgYSBjdXN0b20gZmllbGQgdG8gc3Bl Y2lmeSBldmVudCBmcmVxdWVuY3kgKDEgd2VlayBvciAxMCBkYXlzIG9yIDMgbW9udGhzLCBl dGMpLiBNdWx0aXBsZSBmcmVxdWVuY2llcyBjYW4gYmUgZ2l2ZW48L2xpPgoJCTxsaT5Ob21p bmF0ZSBhIGN1c3RvbSBmaWVsZCBmb3IgZXhjbHVzaW9ucyAoYSBsaXN0IG9mIGRhdGVzIG9u IHdoaWNoIHRoYXQgZXZlbnQgaXMgY2FuY2VsbGVkKS4gT3B0aW9uIHRvIGVpdGhlciBzaG93 IGNhbmNlbGxlZCBldmVudHMgb24gdGhhdCBkYXkgc28geW91IGNhbiBzdHlsZSB0aGVtIGRp ZmZlcmVudGx5LCBvciByZW1vdmUgdGhlbSBjb21wbGV0ZWx5PC9saT4KCQk8bGk+U2hvdyBz cGFubmVkIGV2ZW50cyAob25lcyB0aGF0IGxhc3QgbW9yZSB0aGFuIGEgZGF5KSBiYXNlZCBv biB0aGUgYXJ0aWNsZeKAmXMgZXhwaXJ5LiBBbnkgZXZlbnQgdGhhdCBkb2VzIDxzcGFuIGNs YXNzPSJjYXBzIj5OT1Q8L3NwYW4+IHJlY3VyIGFuZCBoYXMgYSBmdXR1cmUgZXhwaXJ5IGNh biBiZSB0cmVhdGVkIHRoaXMgd2F5PC9saT4KCQk8bGk+RnV0dXJlLCBleHBpcmVkIG9yIHN0 aWNreSBldmVudHMgbWF5IGJlIGRpc3BsYXllZCBpZiB5b3Ugd2lzaDwvbGk+CgkJPGxpPlNw ZWNpZnkgaG9saWRheXMgb24gYSBwZXIgY2FsZW5kYXIgYmFzaXMgKGVpdGhlciByZWN1cnJp bmcgZXZlbnRzICYjODIxMjsgd2l0aG91dCB5ZWFyICYjODIxMjsgb3Igc3BlY2lmaWMgaG9s aWRheXMpLiBEZWZpbmUgdGhlIGxpc3QgZWl0aGVyIGRpcmVjdGx5IGluIHRoZSBwbHVnaW4g YXR0cmlidXRlIG9yIGluIGEgPGNvZGU+Jmx0O3R4cDp2YXJpYWJsZSAvJmd0OzwvY29kZT4g b2YgeW91ciBjaG9pY2UgYW5kIGRlY2lkZSB3aGljaCB0eXBlcyBvZiBldmVudCBhcmUgdG8g YmUgY2FuY2VsbGVkIGR1ZSB0byBob2xpZGF5czwvbGk+CgkJPGxpPkVhY2ggZXZlbnQgY2Fu IGJlIHBhc3NlZCB0byBhIGZvcm0vY29udGFpbmVyIHNvIHlvdSBjYW4gYnVpbGQgaXQgeW91 ciB3YXksIG9yIHVzZSB0aGUgYnVpbHQtaW4gaHlwZXJsaW5rZWQgdGl0bGUuIFNwYW5uZWQg ZXZlbnRzIGNhbiBiZSBzZW50IHRvIGEgc2VwYXJhdGUgZm9ybSBpZiB5b3Ugd2lzaDwvbGk+ CgkJPGxpPkNvbmRpdGlvbmFsIHRlc3RzIGZvciBldmVudCBmbGFncyAocmVjdXJyaW5nLCBz cGFubmVkLCBjYW5jZWxsZWQsIGhvbGlkYXlzKSBzbyB5b3UgY2FuIGJ1aWxkIHlvdXIgb3du IGxvZ2ljIGluIHlvdXIgZm9ybS9jb250YWluZXI8L2xpPgoJCTxsaT5DbGFzcyBzb3VwOiB0 YWJsZS0sIHJvdy0sIGNlbGwtLCBhbmQgZXZlbnQtbGV2ZWwgY2xhc3NlcyBmb3IgaW5kaWNh dGluZyBkaWZmZXJlbnQgc2NlbmFyaW9zIChzcGFubmVkIGV2ZW50LCByZWN1cnJpbmcgZXZl bnQsIGNhbmNlbGxlZCBldmVudCwgZXRjKTsgY3VzdG9tIGNsYXNzZXMgY2FuIGJlIHNwZWNp ZmllZCBiYXNlZCBvbiBhbiBldmVudDwvbGk+CgkJPGxpPlRhZyB0byBvdXRwdXQgdmFyaW91 cyBldmVudCBvciBjYWxlbmRhciBjaGFyYWN0ZXJpc3RpY3MgKGUuZy4gdGhlIG1vbnRoLCB5 ZWFyLCBjYWxlbmRhciBpZCwgc2VjdGlvbiBhbmQgc28gb24pPC9saT4KCQk8bGk+VGFnIHRv IG91dHB1dCB0aGUgY3VycmVudCBkYXRlL3RpbWUgKGZvcm1hdHRlZCBob3cgeW91IGxpa2Up PC9saT4KCTwvdWw+CgoJPGgyIGlkPSJhdXRob3IiPkF1dGhvcjwvaDI+CgoJPHA+PGEgaHJl Zj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbW1lbnRGb3JtIj5TdGVmIERhd3NvbjwvYT4u IEpvaW50bHkgZnVuZGVkIGJ5IGdlbmVyb3VzIGRvbmF0b3JzOiBtcmRhbGUsIHdvb2YsIGFu ZCBqYWtvYi4gQmFzZWQgaGVhdmlseSBvbiBtZHBfY2FsZW5kYXIuIEFsbCBwcm9wcyB0byB0 aGUgb3JpZ2luYWwgYXV0aG9yIG9mIHRoZSBwbHVnaW4sIGFuZCBvZiBjb3Vyc2UgdGhlIGNs YXNzIHVwb24gd2hpY2ggdGhlIGNhbGVuZGFyIGlzIGJhc2VkLjwvcD4KCgk8aDIgaWQ9Imlu c3RhbGwiPkluc3RhbGxhdGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cD5Eb3dubG9h ZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5v cmcvcGx1Z2lucy8xMDUyL3NtZF9jYWxlbmRhciI+dGV4dHBhdHRlcm4ub3JnPC9hPiwgb3Ig dGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUgcGFnZTwv YT4sIHBhc3RlIHRoZSBjb2RlIGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3Nw YW4+IEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxlIHRoZSBw bHVnaW4uIFZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29t L3ZpZXd0b3BpYy5waHA/aWQ9MjkyMDAiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5m byBvciB0byByZXBvcnQgb24gdGhlIHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNlIG9mIHRoZSBwbHVn aW4uPC9wPgoKCTxwPlRvIHVuaW5zdGFsbCwgc2ltcGx5IGRlbGV0ZSBmcm9tIHRoZSBBZG1p biAtJmd0OyBQbHVnaW5zIHBhZ2UuPC9wPgoKCTxoMiBpZD0ibmFtaW5nIj5OYW1pbmcgY29u dmVudGlvbjwvaDI+CgoJPHA+QmVmb3JlIGJlZ2lubmluZyB0aGVyZSYjODIxNztzIGEgbGl0 dGxlIGJpdCBvZiBub21lbmNsYXR1cmUgdG8gZ2V0IG91dCBvZiB0aGUgd2F5OjwvcD4KCgk8 dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jZWxsPC9zcGFuPiA6IGEgc3BlY2lmaWMg ZGF5IG9uIHRoZSBjYWxlbmRhciBpbiBhIHBhcnRpY3VsYXIgbW9udGgveWVhcjwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5ldmVudDwvc3Bhbj4gOiBhbiBhcnRpY2xlLiBJdCYj ODIxNztzIGJlc3QgdG8gbm9taW5hdGUgYSBkZWRpY2F0ZWQgc2VjdGlvbiBmb3IgZXZlbnRz IHNvIGl0IGtlZXBzIHRoaW5ncyBuZWF0ZXIgb24geW91ciBjYWxlbmRhciBidXQgeW91IGNh biB1c2UgZXZlbnRzIGZyb20gbW9yZSB0aGFuIG9uZSBzZWN0aW9uIGlmIHlvdSB3aXNoLiBB bnkgYXJ0aWNsZSB3cml0dGVuIGluIHRoZSBnaXZlbiBzZWN0aW9uKHMpIHdpbGwgYXBwZWFy IG9uIHRoZSBjYWxlbmRhciBhcyBsb25nIGFzIGl0cyBleHBpcnkgaGFzbiYjODIxNzt0IGJl ZW4gbWV0LiBNb3JlIHRoYW4gb25lIGV2ZW50IG1heSBhcHBlYXIgaW4gZWFjaCBjZWxsPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmV2ZW50IGZsYWc8L3NwYW4+IDogZWFjaCBl dmVudCBjYW4gZWl0aGVyIGJlIGEgc3RhbmRhcmQgPGNvZGU+ZXZlbnQ8L2NvZGU+LCBpdCBj YW4gPGNvZGU+cmVjdXI8L2NvZGU+LCBpdCBjYW4gc3BhbiBtb3JlIHRoYW4gb25lIGRheSAo PGNvZGU+bXVsdGk8L2NvZGU+KSBpdCBjYW4gYmUgcmVtb3ZlZCAoPGNvZGU+Y2FuY2VsPC9j b2RlPikgb3IgaXQgbWF5IG9jY3VyIG9uIGEgaG9saWRheSAoPGNvZGU+aG9sczwvY29kZT4p PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNhbGlkPC9zcGFuPiA6IHlvdSBtYXkg cHV0IG1vcmUgdGhhbiBvbmUgY2FsZW5kYXIgb24gYSBwYWdlLiBJZiBzbywgZWFjaCBvbmUg bXVzdCBiZSB1bmlxdWVseSByZWZlcmVuY2VkIHdpdGggdGhpcyBjYWxlbmRhciBJRDwvbGk+ Cgk8L3VsPgoKCTxoMiBpZD0idXNhZ2UiPlVzYWdlOiA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxl bmRhciAvJmd0OzwvY29kZT48L2gyPgoKCTxwPlB1dCB0aGUgPGNvZGU+Jmx0O3R4cDpzbWRf Y2FsZW5kYXIgLyZndDs8L2NvZGU+IHRhZyB3aGVyZXZlciB5b3Ugd2FudCB5b3VyIGNhbGVu ZGFyIHRvIGFwcGVhci4gVXNlIGFueSBvZiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgdG8g Y29udHJvbCBpdHMgb3V0cHV0IGRpc3BsYXkgYW5kIHVzZSB0aGUgPGEgaHJlZj0iI2F0dHN0 eWxlcyI+c3R5bGUgYXR0cmlidXRlczwvYT4gdG8gZGV0ZXJtaW5lIGhvdyB0byBhcHBseSBz dHlsZXMgdG8gdGhlIHZhcmlvdXMgZXZlbnRzIGFuZCBjZWxscy48L3A+CgoJPGgzIGNsYXNz PSJhdHRzICIgaWQ9ImF0dHJpYnV0ZXMiPk1haW4gYXR0cmlidXRlczwvaDM+CgoJPHVsPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2l6ZTwvc3Bhbj4gOiBjYWxlbmRhciBzaXplLCA8 Y29kZT5sYXJnZTwvY29kZT4gb3IgPGNvZGU+c21hbGw8L2NvZGU+LiBUaGUgc21hbGwgaXMg bW9yZSBnZWFyZWQgdG93YXJkcyBhIG1pbmljYWwsIGFsdGhvdWdoIGZ1bmN0aW9uYWxseSB0 aGVyZSA8YSBocmVmPSIjc2l6ZWRpZmYiPmlzbiYjODIxNzt0IG11Y2ggYmV0d2VlbiB0aGVt PC9hPi4gRGVmYXVsdDogPGNvZGU+bGFyZ2U8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPnRpbWU8L3NwYW4+IDogc2hvdyA8Y29kZT5wYXN0PC9jb2RlPiwgPGNvZGU+ ZnV0dXJlPC9jb2RlPiwgb3IgPGNvZGU+YW55PC9jb2RlPiBldmVudC4gRGVmYXVsdDogPGNv ZGU+YW55PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5leHBpcmVkPC9z cGFuPiA6IGRlZmluaXRpdmVseSBoaWRlICg8Y29kZT4wPC9jb2RlPikgb3Igc2hvdyAoPGNv ZGU+MTwvY29kZT4pIGV4cGlyZWQgZXZlbnRzLiBMZWF2ZSBibGFuayB0byB1c2UgdGhlIDxz cGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IEFkdmFuY2VkIFByZWZlcmVuY2UgPGNvZGU+ UHVibGlzaCBleHBpcmVkIGFydGljbGVzPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5maXJzdGRheTwvc3Bhbj4gOiB0aGUgMXN0IGRheSBvZiB0aGUgd2VlayB0byBz aG93IGluIHRoZSBjYWxlbmRhci4gMD1TdW5kYXksIDE9TW9uZGF5IGFuZCBzbyBvbiBkb3du IHRvIDY9U2F0dXJkYXkuIERlZmF1bHQ6IDxjb2RlPjA8L2NvZGU+PC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPmRheWZvcm1hdDwvc3Bhbj4gOiB0aGUgd2F5IGluIHdoaWNoIHRo ZSBkYXkgbmFtZXMgYXJlIHJlbmRlcmVkLiBDaG9vc2UgZnJvbSBlaXRoZXIgPGNvZGU+QUJC UjwvY29kZT4gKHRoZSBkZWZhdWx0KSB0byBzaG93IHRoZSBkYXlzIGFzIE1vbiwgVHVlLCBX ZWQsIGV0YyBvciA8Y29kZT5GVUxMPC9jb2RlPiB0byByZW5kZXIgdGhlaXIgZnVsbCBuYW1l cy4gQWx0ZXJuYXRpdmVseSwgc3VwcGx5IGFueSB2YWxpZCA8YSBocmVmPSJodHRwOi8vdWsy LnBocC5uZXQvc3RyZnRpbWUiPnN0cmZ0aW1lKCk8L2E+IGNvZGVzIHRvIHVzZSB0aGF0IGlu c3RlYWQuIExvY2FsZS1zcGVjaWZpYyBuYW1lcyBhcmUgcmV0dXJuZWQ8L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+bW9udGhmb3JtYXQ8L3NwYW4+IDogdGhlIHdheSBpbiB3aGlj aCB0aGUgbW9udGggbmFtZXMgYXJlIHJlbmRlcmVkLiBDaG9vc2UgZnJvbSBlaXRoZXIgPGNv ZGU+RlVMTDwvY29kZT4gKHRoZSBkZWZhdWx0KSB0byBzaG93IHRoZSBmdWxsIG1vbnRoIG5h bWVzIG9yIDxjb2RlPkFCQlI8L2NvZGU+IHRvIHJlbmRlciB0aGVpciBhYmJyZXZpYXRlZCBu YW1lcy4gQWx0ZXJuYXRpdmVseSwgc3VwcGx5IGFueSB2YWxpZCA8YSBocmVmPSJodHRwOi8v dWsyLnBocC5uZXQvc3RyZnRpbWUiPnN0cmZ0aW1lKCk8L2E+IGNvZGVzIHRvIHVzZSB0aGF0 IGluc3RlYWQuIExvY2FsZS1zcGVjaWZpYyBuYW1lcyBhcmUgcmV0dXJuZWQ8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+c2VsZWN0PC9zcGFuPiA6IHVzZSBhIHNlbGVjdCBkcm9w ZG93biBmb3IgcmFwaWQgYWNjZXNzIHRvIG1vbnRocyBvciB5ZWFycyBpbnN0ZWFkIG9mIHJl bmRlcmluZyBqdXN0IHRoZSBuYW1lcy4gRGVmYXVsdDogdW5zZXQsIGJ1dCB5b3UgbWF5IG1h a2UgYSAoY29tbWEtc2VwYXJhdGVkKSBsaXN0IGZyb20gZWl0aGVyIDxjb2RlPm1vbnRoPC9j b2RlPiBvciA8Y29kZT55ZWFyPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5zZWxlY3RidG48L3NwYW4+IDogYnkgZGVmYXVsdCwgdGhlIHNlbGVjdCBkcm9wZG93bnMg d2lsbCBhdXRvLXN1Ym1pdCB3aGVuIHRoZXkgYXJlIGNoYW5nZWQuIElmIHlvdSBwcmVmZXIg YSBkZWRpY2F0ZWQgc3VibWl0IGJ1dHRvbiwgZ2l2ZSB0aGUgdGV4dCB5b3Ugd2lzaCB0byBh cHBlYXIgb24gdGhlIGJ1dHRvbiBoZXJlLiBUaGUgYnV0dG9uIGhhcyBhIGZpeGVkIGNsYXNz IG9mIDxjb2RlPnNtZF9jYWxfaW5wdXQ8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPmlzb3dlZWtzPC9zcGFuPiA6IHNob3cgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5J U088L3NwYW4+IHdlZWsgbnVtYmVycyBhcyBhIGNvbHVtbiBhdCB0aGUgc3RhcnQgb2YgdGhl IGNhbGVuZGFyLiBJZiBzZXQgKDxjb2RlPjE8L2NvZGU+KSwgdGhlIDxjb2RlPmZpcnN0ZGF5 PC9jb2RlPiB3aWxsIGJlIGZvcmVkIHRvIHN0YXJ0IG9uIGEgTW9uZGF5IGFzIGdvdmVybmVk IGJ5IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiBzcGVjaWZpY2F0aW9uLiBE ZWZhdWx0OiA8Y29kZT4wPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5z dGF0dXM8L3NwYW4+IDogZXZlbnRzIGluIHRoaXMgbGlzdCBvZiBzdGF0dXMgYXJlIHB1Ymxp c2hlZC4gRGVmYXVsdDogPGNvZGU+bGl2ZTwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+Y2F0ZWdvcnk8L3NwYW4+IDogZmlsdGVyIGV2ZW50cyBieSB0aGlzIGxpc3Qg b2YgY2F0ZWdvcmllcy4gRGVmYXVsdCBpcyB0aGUgY3VycmVudCBnbG9iYWwgY2F0ZWdvcnkg KGlmIHNldCwgZW1wdHkgb3RoZXJ3aXNlKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5zZWN0aW9uPC9zcGFuPiA6IGZpbHRlciBldmVudHMgYnkgdGhpcyBsaXN0IG9mIHNlY3Rp b25zLiBEZWZhdWx0IGlzIHRoZSBjdXJyZW50IHNlY3Rpb248L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+YXV0aG9yPC9zcGFuPiA6IGZpbHRlciBldmVudHMgYnkgdGhpcyBhdXRo b3IgUmVhbCBOYW1lLiBEZWZhdWx0IGlzIHRoZSBjdXJyZW50IGF1dGhvciAoaWYgc2V0LCBl bXB0eSBvdGhlcndpc2UpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmlkPC9zcGFu PiA6IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gSUQgdG8gYXBwbHkgdG8g dGhlIHRhYmxlIHRoYXQgaG9sZHMgdGhlIGNhbGVuZGFyLiBUaGlzIGlzIHRoZSB2YWx1ZSBv ZiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdmFyaWFibGUgPGNvZGU+Y2Fs aWQ8L2NvZGU+IGFuZCBpdHMgZGVmYXVsdCBpcyB1bnNldC4gRWFjaCBjYWxlbmRhciBvbiBh IHBhZ2UgPGEgaHJlZj0iI25hbWluZyI+bXVzdCBiZSB1bmlxdWU8L2E+PC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPm1vbnRoPC9zcGFuPiA6IHN0YXJ0IHRoZSBjYWxlbmRhciBv biB0aGlzIG1vbnRoIGZyb20gMSAoSmFudWFyeSkgdG8gMTIgKERlY2VtYmVyKS4gSWYgPGNv ZGU+c3RhdGljPC9jb2RlPiBpcyB1c2VkLCB0aGlzIG1vbnRoIGJlY29tZXMgdGhlIG9ubHkg b25lIHlvdSBtYXkgdmlldy4gSWYgdW5zZXQsIGFuZCBubyA8Y29kZT5tPTwvY29kZT4gdmFs dWUgYXBwZWFycyBvbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gbGluZSwg dGhlIGN1cnJlbnQgbW9udGggaXMgdXNlZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij55ZWFyPC9zcGFuPiA6IHN0YXJ0IHRoZSBjYWxlbmRhciBhdCB0aGlzIDQtZGlnaXQgeWVh ci4gSWYgPGNvZGU+c3RhdGljPC9jb2RlPiBpcyB1c2VkLCB0aGlzIHllYXIgYmVjb21lcyB0 aGUgb25seSBvbmUgeW91IG1heSB2aWV3LiBJZiB1bnNldCwgYW5kIG5vIDxjb2RlPnk9PC9j b2RlPiB2YWx1ZSBhcHBlYXJzIG9uIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFu PiBsaW5lLCB0aGUgY3VycmVudCB5ZWFyIGlzIHVzZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+eWVhcndpZHRoPC9zcGFuPiA6IGEgY29tbWEtc2VwYXJhdGVkIGxpc3QgdGhh dCBzcGVjaWZpZXMgaG93IG1hbnkgeWVhcnMgeW91ciBjYWxlbmRhciBzcGFucy4gQnkgZGVm YXVsdCBpdCBpcyA8Y29kZT4wLDA8L2NvZGU+IHdoaWNoIHVzZXMgdGhlIGVhcmxpZXN0IChw b3N0ZWQpIGV2ZW50IGluIHRoZSBzZWN0aW9uIGFzIHRoZSBsb3dlc3QgeWVhciBhbmQgdGhl IGxhdGVzdCAobW9kaWZpZWQpIGV2ZW50IGluIHRoZSBzZWN0aW9uIGFzIHRoZSBsYXRlc3Qg eWVhci4gWW91IHdpbGwgbm90IGJlIHBlcm1pdHRlZCB0byBuYXZpZ2F0ZSB0aGUgY2FsZW5k YXIgb3V0c2lkZSB0aGlzIHJhbmdlLiBUbyB3aWRlbiB0aGUgcmFuZ2UsIHNwZWNpZnkgc29t ZSB2YWx1ZXMsIGZvciBleGFtcGxlIDxjb2RlPnllYXJ3aWR0aD0mcXVvdDsyLDQmcXVvdDs8 L2NvZGU+IHdpbGwgc3VidHJhY3QgMiB3aG9sZSB5ZWFycyBmcm9tIHRoZSBlYXJsaWVzdCBl dmVudCBhbmQgYWRkIDQgd2hvbGUgeWVhcnMgdG8gdGhlIGxhdGVzdCBldmVudC4gSWYgeW91 IHNwZWNpZnkgYSBzaW5nbGUgbnVtYmVyLCB0aGF0IHZhbHVlIHdpbGwgYmUgdXNlZCB0byBl eHBhbmQgdGhlIHJhbmdlIGVxdWFsbHkgaW4gYm90aCBkaXJlY3Rpb25zPC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPmZvcm08L3NwYW4+IDogdXNlIHRoaXMgPHNwYW4gY2xhc3M9 ImNhcHMiPlRYUDwvc3Bhbj4gZm9ybSB0byBwcm9jZXNzIGVhY2ggY2VsbC4gSWYgdGhlIGNh bGVuZGFyIHRhZyBpcyB1c2VkIGFzIGEgY29udGFpbmVyIGl0IHdpbGwgYmUgdXNlZCBpbiBw cmVmZXJlbmNlIHRvIHRoZSBmb3JtLiBJZiBuZWl0aGVyIGFyZSB1c2VkLCB0aGUgZGVmYXVs dCBmb3IgYSBsYXJnZSBjYWxlbmRhciBpcyBhIGh5cGVybGlua2VkIGFydGljbGUgdGl0bGUu IFRoZSBzbWFsbCBjYWxlbmRhciByZW5kZXJzIGFuIGVtcHR5IGV2ZW50PC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPnNwYW5mb3JtPC9zcGFuPiA6IHlvdSBtYXkgZWxlY3QgdG8g cmVuZGVyIHNwYW5uZWQgZXZlbnRzIGRpZmZlcmVudGx5IHRvIHN0YW5kYXJkIGV2ZW50cy4g QnkgZGVmYXVsdCBpdCB1c2VzIHRoZSBzYW1lIDxjb2RlPmZvcm08L2NvZGU+IGJ1dCAmIzgy MTI7IGlmIG5laXRoZXIgdGhhdCBub3IgdGhlIGNvbnRhaW5lciBhcmUgc3BlY2lmaWVkICYj ODIxMjsgaXQgd2lsbCByZW5kZXIgYSBoeXBlcmxpbmtlZCByaWdodC1hcnJvdyB0byBpbmRp Y2F0ZSBjb250aW51YXRpb24gb2YgdGhlIHByZXZpb3VzIGRheSYjODIxNztzIGV2ZW50PC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnN0ZXBmaWVsZDwvc3Bhbj4gOiB0aGUgSUQg b2YgYSBmaWVsZCB3aXRoaW4gd2hpY2ggYW4gZXZlbnQgbWF5IGJlIHRvbGQgdG8gcmVwZWF0 LiBOb3RlIGl0IGlzIHRoZSBmaWVsZCYjODIxNztzIElEIG5vdCBpdHMgbmFtZSwgc28gZm9y IGN1c3RvbSBmaWVsZHMgeW91IG11c3QgdXNlIDxjb2RlPmN1c3RvbV8xPC9jb2RlPiBvciA8 Y29kZT5jdXN0b21fMjwvY29kZT4gZXRjLiBXaXRob3V0IHRoaXMgYXR0cmlidXRlIChpdHMg ZGVmYXVsdCksIG5vIHJlY3VycmluZyBldmVudHMgbWF5IGJlIGRlZmluZWQuIFNlZSA8YSBo cmVmPSIjcmVjdXIiPnJlY3VycmluZyBldmVudHM8L2E+PC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPnNraXBmaWVsZDwvc3Bhbj4gOiB0aGUgSUQgb2YgYSBmaWVsZCBmcm9tIHdo aWNoIGFydGljbGVzIG1heSBiZSBjYW5jZWxsZWQgaWYgcmVxdWlyZWQuIEFzIGFib3ZlLCB0 aGlzIGlzIHRoZSBJRCAobm90IG5hbWUpIG9mIHRoZSBmaWVsZC4gU3BlY2lmeSBhIGxpc3Qg b2YgZGF0ZXMgb24gd2hpY2ggdGhpcyBldmVudCB3aWxsIGJlIGNhbmNlbGxlZC4gU2VlIDxh IGhyZWY9IiNjYW5jZWwiPmNhbmNlbGxpbmcgZXZlbnRzPC9hPjwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5zaG93c2tpcHBlZDwvc3Bhbj4gOiB3aGVuIGFuIGV2ZW50IGlzIGNh bmNlbGxlZCB5b3UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZSBjYWxlbmRhciAoPGNvZGU+MDwv Y29kZT4pIG9yIHNob3cgaXQgKDxjb2RlPjE8L2NvZGU+KS4gRGVmYXVsdDogPGNvZGU+MDwv Y29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2hvd3NwYW5uZWQ8L3NwYW4+ IDogZXZlbnRzIHdpdGggZXhwaXJ5IHRpbWVzIGxhdGVyIHRoYW4gdGhlaXIgcG9zdGVkIGRh dGUgbWF5IGJlIHJlbmRlcmVkIGFjcm9zcyBtdWx0aXBsZSBjZWxscy4gSWYgeW91IGRvIG5v dCB3YW50IHRoaXMgZmVhdHVyZSB5b3UgY2FuIHR1cm4gaXQgb2ZmICg8Y29kZT4wPC9jb2Rl PikuIERlZmF1bHQ6IDxjb2RlPjE8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPmhvbGlkYXlzPC9zcGFuPiA6IGxpc3Qgb2YgZGF0ZXMgdGhhdCBhcmUgZGVjcmVlZCBh cyBob2xpZGF5cy4gRXZlbnRzIGNhbiBiZSBzY2hlZHVsZWQgb24gaG9saWRheXMgYnV0IG1h eSBub3QgcmVjdXIgb3Igc3BhbiBhIGhvbGlkYXkgdW5sZXNzIHlvdSBleHBsaWNpdGx5IHNh eSBzbyB2aWEgdGhlIDxjb2RlPmhvbGlkYXlmbGFnczwvY29kZT4gYXR0cmlidXRlLiBZb3Vy IGxpc3Qgb2YgZGF0ZXMgbWF5IGJlIGRlZmVycmVkIHRvIGEgPGNvZGU+Jmx0O3R4cDp2YXJp YWJsZSAvJmd0OzwvY29kZT4gaW4gd2hpY2ggY2FzZSBkZWZpbmUgeW91ciBsaXN0IGluIGEg bmFtZWQgdmFyaWFibGUgYW5kIHVzZSA8Y29kZT5ob2xpZGF5cz0mcXVvdDt0eHB2YXI6bXlf dmFyX25hbWUmcXVvdDs8L2NvZGU+IHRvIHJlYWQgdGhlbSBpbnRvIHRoZSBwbHVnaW48L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+aG9saWRheWZsYWdzPC9zcGFuPiA6IHBlcm1p dCBjZXJ0YWluIDxhIGhyZWY9IiNuYW1pbmciPmV2ZW50IGZsYWdzPC9hPiB0byBiZSBzY2hl ZHVsZWQgb24gaG9saWRheXMuIERlZmF1bHQ6IDxjb2RlPmV2ZW50PC9jb2RlPiAoaS5lLiBh IHN0YW5kYXJkIG9uZS1vZmYgZXZlbnQpIGJ1dCBvdGhlcnMgbWF5IGJlIGxpc3RlZCBhcyB3 ZWxsLiBDaG9vc2UgZnJvbSA8Y29kZT5ldmVudDwvY29kZT4sIDxjb2RlPnJlY3VyPC9jb2Rl PiBvciA8Y29kZT5tdWx0aTwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ c3RhdGljPC9zcGFuPiA6IGZvcmNlIHRoZSBjYWxlbmRhciB0byBiZSBmaXhlZCB0byBvbmUg bW9udGgveWVhciAoaS5lLiBubyBuYXZpZ2F0aW9uKS4gTW9udGggYW5kIHllYXIgZGVjaWRl ZCBieSBhdHRyaWJ1dGVzIDxjb2RlPm1vbnRoPC9jb2RlPiBhbmQgPGNvZGU+eWVhcjwvY29k ZT4gb3IgJiM4MjEyOyBpZiBvbWl0dGVkIGFuZCBubyA8Y29kZT5tPTwvY29kZT4gYW5kIDxj b2RlPnk9PC9jb2RlPiA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB2YXJpYWJsZXMg YXJlIHNldCAmIzgyMTI7IHRoZSBjdXJyZW50IGRhdGUgd2lsbCBiZSB1c2VkPC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmdtdDwvc3Bhbj4gOiByZXR1cm4gZWl0aGVyIGxvY2Fs IHRpbWUgKDxjb2RlPjA8L2NvZGU+KSBhY2NvcmRpbmcgdG8gdGhlIHRpbWUgem9uZSBzZXQg aW4gQmFzaWMgUHJlZnMsIG9yIDxzcGFuIGNsYXNzPSJjYXBzIj5HTVQ8L3NwYW4+IHRpbWUg KDxjb2RlPjE8L2NvZGU+KS4gRGVmYXVsdDogPGNvZGU+MDwvY29kZT48L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+bGFuZzwvc3Bhbj4gOiBhbiA8c3BhbiBjbGFzcz0iY2FwcyI+ SVNPPC9zcGFuPiBsYW5ndWFnZSBjb2RlIHRoYXQgZm9ybWF0cyB0aW1lIHN0cmluZ3Mgc3Vp dGFibGUgZm9yIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UgKG9yIGxvY2FsZSkgYXMgZGVmaW5l ZCBieSA8YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT182MzkiPjxz cGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IDYzOTwvYT4uIERlZmF1bHQ6IHVuc2V0IChp LmUuIHVzZSB0aGUgdmFsdWUgYXMgc3RhdGVkIGluIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8 L3NwYW4+IHByZWZzKTwvbGk+Cgk8L3VsPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRz dHlsZXMiPlN0eWxlIGF0dHJpYnV0ZXM8L2gzPgoKCTxwPk9uY2UgeW91IGhhdmUgdHdlYWtl ZCB5b3VyIGJhc2ljIGNhbGVuZGFyIGFzIGRlc2NyaWJlZCBhYm92ZSB5b3UgY2FuIG1vdmUg b250byB0aGUgc3R5bGUgYXR0cmlidXRlcyBzbyB5b3UgbWF5IGdldCBhdCBlYWNoIGZhY2V0 IG9mIHRoZSBjYWxlbmRhciBhbmQgdmlzdWFsbHkgYWx0ZXIgaXQ6PC9wPgoKCTx1bD4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzbGV2ZWxzPC9zcGFuPiA6IGNsYXNzZXMgY2Fu IGJlIGFwcGxpZWQgYXQgdGhlIGV2ZW50IGxldmVsIChzbyB5b3UgY2FuIGNvbG91ciBlYWNo IGV2ZW50IGluIGEgY2VsbCksIG9yIHRoZSBjZWxsIGxldmVsIChzbyB5b3UgY2FuIGNvbG91 ciB0aGUgd2hvbGUgZGF5KSwgb3IgYm90aC4gWW91IG1heSBhbHNvIHByb21vdGUgKGkuZS4g Y29weSkgYWxsIGV2ZW50LWxldmVsIGNsYXNzZXMgdGhhdCBvY2N1ciBpbiBhIGRheSB0byB0 aGUgY2VsbCBsZXZlbCBzbyB5b3UgY2FuIGNvbG91ciB0aGUgY2VsbCBiYXNlZCBvbiB0aGUg ZXZlbnRzIHRoYXQgaXQgY29udGFpbnMuIENvbW1hLXNlcGFyYXRlIGFueSBvZiA8Y29kZT5l dmVudDwvY29kZT4gKGZvciByZW5kZXJpbmcgZXZlbnQtbGV2ZWwgc3R5bGVzKSwgPGNvZGU+ Y2VsbDwvY29kZT4gKGZvciByZW5kZXJpbmcgc3R5bGVzIGF0IHRoZSBjZWxsIGxldmVsKSwg b3IgPGNvZGU+Y2VsbHBsdXM8L2NvZGU+IChmb3IgY29weWluZyB1bmlxdWUgZXZlbnQgY2xh c3NlcyB0byB0aGUgY2VsbCkuIE5vdGUgeW91IHdpbGwgbm90IG5lZWQgdG8gdXNlIDxjb2Rl PmNlbGw8L2NvZGU+IGFuZCA8Y29kZT5jZWxscGx1czwvY29kZT4gdG9nZXRoZXIgYmVjYXVz ZSB0aGUgbGF0dGVyIG92ZXJyaWRlcyB0aGUgZm9ybWVyLCBidXQgdGhlcmUmIzgyMTc7cyBu byBoYXJtIGlmIHlvdSBkby4gRGVmYXVsdDogPGNvZGU+Y2VsbCwgZXZlbnQ8L2NvZGU+PC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzcHJlZml4ZXM8L3NwYW4+IDogYSBj b21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB1cCB0byB0d28gcHJlZml4ZXMgdG8gYXBwbHkgdG8g eW91ciBjbGFzcyBuYW1lcy4gVGhlIGZpcnN0IHByZWZpeCBpcyBhcHBsaWVkIHRvIGNlbGwt bGV2ZWwgY2xhc3NlcyBhbmQgdGhlIHNlY29uZCBwcmVmaXggaXMgYXBwbGllZCB0byBldmVu dCBsZXZlbCBjbGFzc2VzIHNvIHlvdSBtYXkgZGlzdGluZ3Vpc2ggdGhlbSBpZiB5b3Ugd2lz aC4gSWYgeW91IG9ubHkgc3BlY2lmeSBvbmUgcHJlZml4IGl0IHdpbGwgYmUgdXNlZCBmb3Ig Ym90aCB0eXBlcyBvZiBjbGFzcy4gSWYgeW91IHVzZSA8Y29kZT5jbGFzc3ByZWZpeGVzPSZx dW90OyZxdW90OzwvY29kZT4gdGhlbiBubyBwcmVmaXhlcyB3aWxsIGJlIHVzZWQgYXQgYWxs LiBEZWZhdWx0OiA8Y29kZT5zbWRfY2FsXywgc21kX2NhbF9ldl88L2NvZGU+PC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzPC9zcGFuPiA6IHRoZSBjbGFzcyBuYW1lIChw bHVzIGNsYXNzIHByZWZpeCkgdG8gYXBwbHkgdG8gdGhlIGNhbGVuZGFyIHRhYmxlIGl0c2Vs Zi4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+cm93Y2xh c3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgKHBsdXMgY2xhc3MgcHJlZml4KSB0byBhcHBs eSB0byBlYWNoIHRhYmxlIHJvdy4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+Y2VsbGNsYXNzPC9zcGFuPiA6IHRoZSBjbGFzcyBuYW1lIChwbHVzIGNs YXNzIHByZWZpeCkgdG8gYXBwbHkgdG8gZWFjaCB0YWJsZSBjZWxsLiBEZWZhdWx0OiB1bnNl dDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5lbXB0eWNsYXNzPC9zcGFuPiA6IHRo ZSBjbGFzcyBuYW1lIChwbHVzIGNsYXNzIHByZWZpeCkgdG8gYXBwbHkgdG8gYW55IGNlbGxz IHRoYXQgZG9uJiM4MjE3O3QgY29udGFpbiBhIGRheSBudW1iZXIgKGkuZS4gdGhlIGJsYW5r IGNlbGxzIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIGEgbW9udGgpLiBEZWZhdWx0OiA8Y29k ZT5lbXB0eTwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+aXNvd2Vla2Ns YXNzPC9zcGFuPiA6IHRoZSBjbGFzcyBuYW1lIChwbHVzIGNsYXNzIHByZWZpeCkgdG8gYXBw bHkgdG8gZWFjaCBjZWxsIGNvbnRhaW5pbmcgYW4gPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwv c3Bhbj4gd2VlayAoaWYgPGNvZGU+aXNvd2Vla3M9JnF1b3Q7MSZxdW90OzwvY29kZT4pLiBE ZWZhdWx0OiA8Y29kZT53ZWVrPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5uYXZjbGFzczwvc3Bhbj4gOiB0aGUgY2xhc3MgbmFtZSAocGx1cyBjbGFzcyBwcmVmaXgp IHRvIGFwcGx5IHRvIHRoZSBuZXh0L3ByZXYgbW9udGggbmF2aWdhdGlvbiBhcnJvd3MuIERl ZmF1bHQ6IDxjb2RlPm5hdjwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ bXljbGFzczwvc3Bhbj4gOiB0aGUgY2xhc3MgbmFtZSAocGx1cyBjbGFzcyBwcmVmaXgpIHRv IGFwcGx5IHRvIGJvdGggdGhlIG1vbnRoIGFuZCB5ZWFyIGluIHRoZSBjYWxlbmRhciBoZWFk ZXIgKGVpdGhlciB0aGUgPGNvZGU+Jmx0O3NwYW4mZ3Q7PC9jb2RlPiBvciA8Y29kZT4mbHQ7 c2VsZWN0Jmd0OzwvY29kZT4gdGFncykuIElmIDxjb2RlPm15d3JhcHRhZzwvY29kZT4gaXMg dXNlZCwgdGhlIGNsYXNzIGlzIGFwcGxpZWQgdG8gdGhlIHdyYXB0YWcgaW5zdGVhZC4gRGVm YXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZXZlbnRjbGFzc2Vz PC9zcGFuPiA6IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaXRlbXMgdG8gYWRkIGFzIGNs YXNzZXMgdG8gZWFjaCBldmVudCAoZWFjaCBwcmVmaXhlZCB3aXRoIHRoZSBldmVudCBwcmVm aXgpLiBJdCBkZWZhdWx0cyB0byA8Y29kZT5jYXRlZ29yeTwvY29kZT4gc28gaXQgYWRkcyB0 aGUgQ2F0ZWdvcnkxIGFuZCAyIG5hbWVzIGFzIGNsYXNzIGlkZW50aWZpZXJzIHRvIGVhY2gg ZXZlbnQuIFRodXMsIG91dCBvZiB0aGUgYm94LCB5b3UgY2FuIHN0eWxlIGV2ZW50cyBieSBj YXRlZ29yeS4gPGRpdiBjbGFzcz0iYnJlYWsiPklmIHlvdSB3aXNoIHRvIGV4dGVuZCBvciBh bHRlciB0aGlzLCBqdXN0IGdpdmUgYSBsaXN0IG9mIGZpZWxkcyB0aGF0IHlvdSB3YW50IHRv IGFwcGx5IHRvIHRoZSBldmVudCAoZS5nLiA8Y29kZT5ldmVudGNsYXNzZXM9JnF1b3Q7SUQs IEF1dGhvcklELCBjdXN0b21fNSZxdW90OzwvY29kZT4gd291bGQgYWRkIHRocmVlIGNsYXNz ZXMgdG8gZWFjaCBldmVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBldmVudCYjODIxNztzIElE LCBpdHMgYXV0aG9yIChsb2dpbikgbmFtZSBhbmQgdGhlIGNvbnRlbnRzIG9mIGN1c3RvbV81 KS4gT2YgY291cnNlLCBpZiB5b3UgdXNlIDxjb2RlPmNlbGxwbHVzPC9jb2RlPiBtb2RlIHRo ZXNlIGNsYXNzZXMgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIGNlbGwgbGV2ZWwuIDwvZGl2Pjxk aXYgY2xhc3M9ImJyZWFrIj5Tb21lIHNwZWNpYWwgbmFtZXMgZXhpc3Q6IDxjb2RlPmNhdGVn b3J5PC9jb2RlPiByZXR1cm5zIGJvdGggQ2F0ZWdvcnkxIGFuZCBDYXRlZ29yeTIgKGlmIHNl dCk7IDxjb2RlPmdjYXQ8L2NvZGU+IHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50ICYjODIxNjtn bG9iYWwmIzgyMTc7IGNhdGVnb3J5IChpZiBjdXJyZW50bHkgZmlsdGVyaW5nIGJ5IGNhdGVn b3J5KTsgPGNvZGU+YXV0aG9yPC9jb2RlPiByZXR1cm5zIHRoZSBhdXRob3IgSUQgKGlmIGN1 cnJlbnRseSBmaWx0ZXJpbmcgYnkgYXV0aG9yKTsgPGNvZGU+c2VjdGlvbjwvY29kZT4gZ2l2 ZXMgdGhlIGN1cnJlbnQgc2VjdGlvbjwvZGl2PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5ldmVudHdyYXB0YWc8L3NwYW4+IDogdGhlIChYKUhUTUwgdGFnLCB3aXRob3V0IGl0 cyBicmFja2V0cywgdG8gd3JhcCBlYWNoIGV2ZW50IHdpdGguIERlZmF1bHQ6IDxjb2RlPnNw YW48L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm15d3JhcHRhZzwvc3Bh bj4gOiB0aGUgKFgpSFRNTCB0YWcsIHdpdGhvdXQgaXRzIGJyYWNrZXRzLCB0byB3cmFwIGFy b3VuZCA8ZW0+Ym90aDwvZW0+IG1vbnRoICsgeWVhciBkcm9wZG93biBzZWxlY3QgbGlzdHMg YW5kIG9wdGlvbmFsIHN1Ym1pdCBidXR0b24gKGl0IHdyYXBzIHRoZSBsb3QsIGNvbWJpbmVk KS4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImV2ZW50cyI+U3RhbmRh cmQgZXZlbnRzPC9oMj4KCgk8cD5Ob3JtYWwsIGVtcHR5IGNlbGxzIGRvbiYjODIxNzt0IGhh dmUgYSBjbGFzcyBhc3NpZ25lZCB0byB0aGVtIHVubGVzcyB5b3Ugc3BlY2lmeSBvbmUgd2l0 aCA8Y29kZT5jZWxsY2xhc3M8L2NvZGU+LiBBbnkgY2VsbCB0aGF0IGNvbnRhaW5zIGFuIGV2 ZW50IChvZiBhbnkgdHlwZSkgaXMgZmlyc3QgZ2l2ZW4gdGhlIGZsYWcgPGNvZGU+ZXZlbnQ8 L2NvZGU+IChwbHVzIHRoZSBjbGFzcy1sZXZlbCBwcmVmaXgpLiBJZiB0aGF0IGNlbGwgZmFs bHMgb24gYSBob2xpZGF5LCBpdCBpcyBhbHNvIGdpdmVuIHRoZSBjbGFzcyA8Y29kZT5ob2xz PC9jb2RlPi4gVGhlIHZhcmlvdXMgb3RoZXIgZmxhZ3MgKGFzIGRldGFpbGVkIGJlbG93KSBh cmUgdGhlbiBhZGRlZCB0byB0aGlzIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgbmF0dXJl IG9mIHRoZSBldmVudC4gSW4gYWRkaXRpb24sIHRoZSBjdXJyZW50IGRheSBpcyBnaXZlbiB0 aGUgY2xhc3MgbmFtZSA8Y29kZT50b2RheTwvY29kZT4gKHBsdXMgY2xhc3MgcHJlZml4KS48 L3A+CgoJPGgyIGlkPSJyZWN1ciI+UmVjdXJyaW5nIGV2ZW50czwvaDI+CgoJPHA+SWYgeW91 IGhhdmUgbm9taW5hdGVkIGFuIGFydGljbGUgZmllbGQgYXMgeW91ciA8Y29kZT5zdGVwZmll bGQ8L2NvZGU+IHlvdSBtYXkgZW50ZXIgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmcmVx dWVuY2llcyBhdCB3aGljaCB0aGlzIGV2ZW50IGlzIHRvIGJlIHJlcGVhdGVkLiBUaGUgZm9y bWF0IG9mIHRoZSByZXBldGl0aW9uIGlzICYjODIyMDtudW1iZXIgaW50ZXJ2YWwmIzgyMjE7 LCBlLmcuIDxjb2RlPjQgd2Vla3M8L2NvZGU+IG9yIDxjb2RlPjEwIGRheXM8L2NvZGU+IG9y IDxjb2RlPjYgbW9udGhzPC9jb2RlPi4gVGhlIHBsdWdpbiB3aWxsIGRvIGl0cyBiZXN0IHRv IGZpZ3VyZSBvdXQgd2hhdCB5b3UgbWVhbi48L3A+CgoJPHA+SWYgeW91IGNhbiBmaW5kIGEg dXNlIGZvciBpdCwgeW91IG1heSBzcGVjaWZ5IG11bHRpcGxlIGZyZXF1ZW5jaWVzLCBmb3Ig ZXhhbXBsZSA8Y29kZT4zIGRheXMsIDEgd2VlazwvY29kZT4uIFNvIHlvdSB3b3VsZCBzZWUg dGhhdCBldmVudCBvbiB0aGUgZmlyc3QgZGF5LCB0aGVuIHRoZSAzcmQsIDZ0aCwgN3RoLCA5 dGgsIDEydGgsIDE0dGgsIDE1dGgsIDE4dGgsIDIxc3QsIDI0dGgmIzgyMzA7IGFuZCBzbyBv biBkYXlzIHRoZXJlYWZ0ZXIuIE5vdGUgdGhhdCB0aGUgZXZlbnQgb25seSBvY2N1cnMgb25j ZSBvbiB0aGUgMjFzdCBkYXkgZXZlbiB0aG91Z2ggdGhlIHR3byBmcmVxdWVuY2llcyBjbGFz aC48L3A+CgoJPHA+VGhlIHJlcGV0aXRpb24gd2lsbCBjb250aW51ZSBmb3JldmVyIHVubGVz cyB5b3Ugc3BlY2lmeSB0aGF0IHRoZSBldmVudCBleHBpcmVzIGJ5IHNldHRpbmcgYW4gZXhw aXJ5IHRpbWUgdW5kZXIgdGhlIGFydGljbGUmIzgyMTc7cyA8ZW0+TW9yZTwvZW0+IGFyZWEu IEVhY2ggY2VsbCB0aGF0IGNvbnRhaW5zIGEgcmVjdXJyaW5nIGV2ZW50IHdpbGwgYmUgZmxh Z2dlZCB3aXRoIDxjb2RlPnJlY3VyPC9jb2RlPiAocGx1cyB0aGUgY2VsbC1sZXZlbCBjbGFz cyBwcmVmaXgpLjwvcD4KCgk8aDIgaWQ9ImNhbmNlbCI+Q2FuY2VsbGluZyBldmVudHM8L2gy PgoKCTxwPlBsYW5zIGNoYW5nZSBhbmQgeW91IG1heSBmaW5kIHRoYXQgYSBnaWcgaGFzIHRv IGJlIGNhbmNlbGxlZCBmb3Igd2hhdGV2ZXIgcmVhc29uLiBQZXJoYXBzIHlvdSBhZHZlcnRp c2UgYSB3ZWVrbHkgYm9vdCBmYWlyIGJ1dCB0aGUgZmllbGQgaXMgd2F0ZXJsb2dnZWQgb25l IHdlZWsuIE5vIHByb2JsZW0uIE5vbWluYXRlIGEgPGNvZGU+c2tpcGZpZWxkPC9jb2RlPiBp biB5b3VyIDxjb2RlPiZsdDt0eHA6c21kX2NhbGVuZGFyIC8mZ3Q7PC9jb2RlPiB0YWcgYW5k IGVudGVyIHRoZSBkYXRlIG9mIHRoZSBjYW5jZWxsZWQgZXZlbnQuPC9wPgoKCTxwPlVzZSBh bnkgYWNjZXB0YWJsZSBmb3JtYXQsIGJ1dCBkZXJpdmF0aXZlcyBvZiBkZC1tb250aG5hbWUt eXl5eSBvciBtb250aG5hbWUtZGQteXl5eSBhcmUgdGhlIG1vc3QgdW5hbWJpZ3VvdXMgdG8g YXZvaWQgdGhlIHByb2JsZW1zIG9mIGhvdyB0aGUgcGx1Z2luIG1pZ2h0IGludGVycHJldCA8 Y29kZT4xLzU8L2NvZGU+IGFzIEphbiA1dGggb3IgTWF5IDFzdC4gWW91IGNhbiBzcGVjaWZ5 IGFzIG1hbnkgY2FuY2VsbGF0aW9ucyBhcyB5b3UgbGlrZTsgY29tbWEtc2VwYXJhdGUgZWFj aCBvbmUuPC9wPgoKCTxwPkJ5IGRlZmF1bHQgdGhlIGV2ZW50cyB3aWxsIG5vdCBhcHBlYXIg b24gdGhlIGNhbGVuZGFyLiBUaGVyZSB3aWxsIGJlIGEgY29uc3BpY3VvdXMgaG9sZSBpbiB0 aGUgcmVwZXRpdGlvbiwgdGhvdWdoIHRoZSBjZWxsIGNsYXNzIHdpbGwgYmUgZmxhZ2dlZCBh cyA8Y29kZT5yZWN1cjwvY29kZT4gYW5kIDxjb2RlPmNhbmNlbDwvY29kZT4gc28geW91IG1h eSBzdHlsZSB0aGUgYm94LiBJZiB5b3Ugc3dpdGNoIDxjb2RlPnNob3dza2lwcGVkPSZxdW90 OzEmcXVvdDs8L2NvZGU+IHRoZSBldmVudCB3aWxsIGFwcGVhciBpbiB0aGUgY2VsbCBhcyBu b3JtYWw7IHRoZSBzYW1lIDxjb2RlPmNhbmNlbDwvY29kZT4gYW5kIDxjb2RlPnJlY3VyPC9j b2RlPiBjbGFzc2VzIHdpbGwgYXBwbHkgdG8gdGhlIGNlbGwgYW5kIHRoZSBldmVudCBzbyB5 b3UgbWF5IHN0eWxlIG9uZSBvciBib3RoLjwvcD4KCgk8cD5JdCBpcyB3b3J0aCBub3Rpbmcg dGhhdCA8ZW0+ZXZlbnQgZmxhZ3M8L2VtPiBhbHdheXMgdGFrZSB0aGUgJiM4MjE2O2NsYXNz JiM4MjE3OyAoMXN0KSBwcmVmaXggJiM4MjEyOyB3aGV0aGVyIHRoZXkgYXBwZWFyIGF0IHRo ZSBjbGFzcyBvciBjZWxsIGxldmVscy4gVGhpcyBpcyBzbyB5b3UgY2FuIGFwcGx5IGEgc2lt aWxhciBjb2xvdXIgdG8gdGhlIGZsYWdzIGlmIHlvdSB3aXNoIG9yIHRhcmdldCB0aGVtIHZp YSB0aGVpciB3cmFwIHRhZy4gVGhlIG9ubHkgY2xhc3NlcyB0aGF0IHRha2UgdGhlICYjODIx NjtldmVudCYjODIxNzsgKDJuZCkgcHJlZml4IGFyZSB0aGUgZmllbGRzIHlvdSBzcGVjaWZ5 IGluIDxjb2RlPmV2ZW50Y2xhc3NlczwvY29kZT4uPC9wPgoKCTxoMiBpZD0ibXVsdGkiPk11 bHRpcGxlIChzcGFubmVkKSBldmVudHM8L2gyPgoKCTxwPkFueSBldmVudCB0aGF0IGhhcyBh IHN0YXJ0IGRhdGUgYW5kIGFuIGV4cGlyeSBkYXRlIHRoYXQgaXMgYSBkYXkgb3IgbW9yZSBs YXRlciwgYW5kIDxlbT5kb2VzIG5vdDwvZW0+IGhhdmUgYW55IHJlcGV0aXRpb24gc2V0IGlu IGl0IDxjb2RlPnN0ZXBmaWVsZDwvY29kZT4sIGlzIGZsYWdnZWQgYXMgYSA8Y29kZT5tdWx0 aTwvY29kZT4uIEJ5IGRlZmF1bHQgdGhlIGZpcnN0IGV2ZW50IGlzIGRpc3BsYXllZCBpbiBm dWxsIGFuZCBlYWNoICYjODIxNjtjb250aW51YXRpb24mIzgyMTc7IGV2ZW50IGlzIHNob3du IG9ubHkgYXMgYSByaWdodCBhcnJvdyBpbiBzdWJzZXF1ZW50IGNlbGxzIChvbiBob3Zlciwg dGhlIGV2ZW50IHRpdGxlIGlzIGRpc3BsYXllZCkuPC9wPgoKCTxwPkV2ZW50cyBtYXkgc3Bh biBtb250aHMgb3IgeWVhcnMgYW5kIHRoZSBwbHVnaW4gZmlndXJlcyBldmVyeXRoaW5nIG91 dCB1c2luZyB0aGUgZmxhZ3M7IHRoZSBmaXJzdCBjZWxsIG9mIGEgc3Bhbm5lZCBzZXQgaXMg YSA8Y29kZT5tdWx0aWZpcnN0PC9jb2RlPiwgdGhlIGxhc3QgY2VsbCBpcyBhIDxjb2RlPm11 bHRpbGFzdDwvY29kZT4sIGV2ZXJ5IG90aGVyIGNlbGwgaXMgYSA8Y29kZT5tdWx0aTwvY29k ZT4gPGVtPmV4Y2VwdDwvZW0+IGlmIHRoZSBldmVudCByb2xscyBvdmVyIGludG8gdGhlIG5l eHQgbW9udGguIEluIHRoYXQgY2FzZSwgdGhlIGVudHJ5IG9uIHRoZSAxc3Qgb2YgdGhlIG1v bnRoIGlzIGEgPGNvZGU+bXVsdGlwcmV2PC9jb2RlPiB0byBpbmRpY2F0ZSBpdCBiZWxvbmdz IHRvIGEgcHJldmlvdXMgZXZlbnQuIElmIHRoZSBmaXJzdCBvZiB0aGUgbW9udGggaXMgaXRz ZWxmIHRoZSBsYXN0IGRheSBvZiB0aGUgZXZlbnQsIHRoZSA8Y29kZT5tdWx0aXByZXY8L2Nv ZGU+IGlzIGRyb3BwZWQgaW4gZmF2b3VyIG9mIDxjb2RlPm11bHRpbGFzdDwvY29kZT4uPC9w PgoKCTxwPllvdSBtYXkgc3dpdGNoIG9mZiB0aGlzIGJlaGF2aW91ciBjb21wbGV0ZWx5IHdp dGggdGhlIDxjb2RlPnNob3dzcGFubmVkPSZxdW90OzAmcXVvdDs8L2NvZGU+IGF0dHJpYnV0 ZS4gRXZlbnRzIHRoYXQgaGF2ZSBhbiBleHBpcnkgYXJlIHRoZW4ganVzdCBjb21tb24gZXZl bnRzLjwvcD4KCgk8cD5Zb3UgbWF5IGVsZWN0IHRvIHByb2Nlc3MgJiM4MjE2O2NvbnRpbnVh dGlvbiYjODIxNzsgY2VsbHMgd2l0aCBhIHNlcGFyYXRlIGZvcm0gKGNhbGxlZCBhIDxjb2Rl PnNwYW5mb3JtPC9jb2RlPiBiZWNhdXNlICYjODIxNjtjb250Zm9ybSYjODIxNzsgZGlkbiYj ODIxNzt0IHNvdW5kIHZlcnkgbmljZSEpLiBJZiBub3QsIHRoZSBzdGFuZGFyZCA8Y29kZT5m b3JtPC9jb2RlPiBvciBjb250YWluZXIgd2lsbCBiZSB1c2VkIGFuZCB5b3Ugd2lsbCBoYXZl IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGRpZmZlcmVudCBtdWx0aSBmbGFncyB5b3Vy c2VsZiB1c2luZyB0aGUgPGEgaHJlZj0iI2lmY2FsIj5jb25kaXRpb25hbCB0YWc8L2E+Ljwv cD4KCgk8cD5Zb3UgY2FuIGFsc28gY2FuY2VsIGRheXMgb2YgYSBzcGFubmVkIGV2ZW50IGlu IHRoZSBzYW1lIG1hbm5lciBhcyB5b3UgZG8gd2l0aCA8YSBocmVmPSIjcmVjdXIiPnJlY3Vy cmluZyBldmVudHM8L2E+LiBUaGUgY2VsbCBpcyBkdXRpZnVsbHkgZmxhZ2dlZCB3aXRoIHRo ZSByZWxldmFudCAmIzgyMTY7bXVsdGkmIzgyMTc7IGZsYWcgKyA8Y29kZT5jYW5jZWw8L2Nv ZGU+LiBOb3RlIHlvdSBtYXkgPGVtPm5vdDwvZW0+IGNhbmNlbCB0aGUgZmlyc3QgZGF5IG9m IHRoZSBldmVudCwgYmVjYXVzZSB5b3UgbWlnaHQgYXMgd2VsbCBqdXN0IG1vdmUgdGhlIGV2 ZW50IG9uZSBkYXkgYW5kIGFwb2xvZ2lzZSE8L3A+CgoJPGgyIGlkPSJob2xpZGF5cyI+SG9s aWRheXM8L2gyPgoKCTxwPlB1YmxpYyBob2xpZGF5cyBuZWVkIG5vdCBiZSBhIG51aXNhbmNl IHRvIHlvdXIgcmVjdXJyaW5nIGV2ZW50cy4gR2l2ZSB0aGUgcGx1Z2luIGEgbGlzdCBhbmQg aXQmIzgyMTc7bGwgbWFrZSBzdXJlIHRoYXQgYW55IHJlY3VycmluZyBvciBtdWx0aSBldmVu dHMgYXJlIG5vdCBzY2hlZHVsZWQgb24gdGhvc2UgZGF5cy4gU3RhbmRhcmQgb25lLW9mZiBl dmVudHMgYXJlIHBlcm1pdHRlZCBieSBkZWZhdWx0IGJlY2F1c2UgeW91IG1pZ2h0IHdhbnQg dG8gb3JnYW5pc2UgYSBzcGVjaWFsIGV2ZW50IG9uIHRoYXQgZGF5LjwvcD4KCgk8cD5UaGUg bGlzdCBvZiBkYXRlcyB5b3Ugc3BlY2lmeSBjYW4gYmUgZW50ZXJlZCBkaXJlY3RseSBpbiBh IHN0cmluZyBpbiB0aGUgPGNvZGU+aG9saWRheXM8L2NvZGU+IGF0dHJpYnV0ZSBvciBpbiBh IDxjb2RlPiZsdDt0eHA6dmFyaWFibGUgLyZndDs8L2NvZGU+LiBUaGUgbGF0dGVyIGlzIG1v cmUgZnVuIHNvIGxldCYjODIxNztzIHRyeSB0aGF0OjwvcD4KCjxwcmUgY2xhc3M9ImJsb2Nr Ij48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6dmFyaWFibGUgbmFtZT0mcXVvdDtuYXRf aG9scyZxdW90OwogICAgIHZhbHVlPSZxdW90O0RlYyAyNSwgRGVjIDI2LCAzMS9EZWMsIEph bi0xLAogICAgICAgIE1heSA0IDIwMDksIDIwMDktMDgtMzEmcXVvdDsgLyZndDsKJmx0O3R4 cDpzbWRfY2FsZW5kYXIgaG9saWRheXM9JnF1b3Q7dHhwdmFyOm5hdF9ob2xzJnF1b3Q7IC8m Z3Q7CjwvY29kZT48L3ByZT4KCgk8cD5UaGVyZSB5b3UgZ28sIGFsbCBkb25lLiBUaGUgbGlz dCB0aGVyZSBzaG93cyBzb21lIG9mIHRoZSB2YXJpZXR5IGFuZCBicmVhZHRoIG9mIGZvcm1h dHMgdGhhdCB0aGUgcGx1Z2luIGFsbG93cy4gVGhlcmUgYXJlIG1vcmUuIE5vdGUgdGhhdCBz b21lIGV2ZW50cyBoYXZlIGEgeWVhciBhbmQgb3RoZXJzIGRvbiYjODIxNzt0LiBUaGUgb25l cyB3aXRob3V0IGEgeWVhciBvY2N1ciBvbiB0aGUgc2FtZSBkYXRlIGV2ZXJ5IHllYXIgd2hl cmVhcyB0aGUgb25lcyB3aXRoIGEgeWVhciB3aWxsIG9ubHkgb2NjdXIgb24gdGhhdCBzcGVj aWZpYyBkYXRlLjwvcD4KCgk8cD5PbmNlIHlvdXIgZGF0ZXMgYXJlIGRlZmluZWQgeW91IGNh biBjb250cm9sIHdoY2ggZXZlbnRzIGFyZSBhbGxvd2VkIHRvIGZhbGwgb24gdGhvc2UgZGF0 ZXMgdmlhIHRoZSA8Y29kZT5ob2xpZGF5ZmxhZ3M8L2NvZGU+LiBKdWRpY2lhbCB1c2Ugb2Yg dGhhdCBhdHRyaWJ1dGUgYW5kIHRoZSA8Y29kZT5zaG93c3Bhbm5lZDwvY29kZT4sIDxjb2Rl PnNob3dza2lwcGVkPC9jb2RlPiBhbmQgPGNvZGU+Zm9ybTwvY29kZT4gb3IgPGNvZGU+c3Bh bmZvcm08L2NvZGU+IHdpdGggdGhlIDxhIGhyZWY9IiNpZmNhbCI+Y29uZGl0aW9uYWwgdGFn PC9hPiBjYW4gZ2l2ZSB5b3UgYSB3aWRlIHZhcmlldHkgb2Ygd2F5cyB0byBzdHlsZSBldmVu dHMuPC9wPgoKCTxwPkhvbGlkYXlzIGFyZSBnaXZlbiB0aGUgZXZlbnQgZmxhZyA8Y29kZT5o b2xzPC9jb2RlPiwgYW5kIGFueSBldmVudCB0aGF0IGlzIG5vdCBzcGVjaWZpY2FsbHkgcGVy bWl0dGVkIGJ5IHRoZSA8Y29kZT5ob2xpZGF5ZmxhZ3M8L2NvZGU+IGlzIGF1dG9tYXRpY2Fs bHkgYXNzaWduZWQgYSA8Y29kZT5jYW5jZWw8L2NvZGU+IGZsYWcgaWYgaXQgZmFsbHMgb24g b25lIG9mIHRoZSBkYXlzLjwvcD4KCgk8aDIgaWQ9InNpemVkaWZmIj5EaWZmZXJlbmNlcyBi ZXR3ZWVuIGxhcmdlIGFuZCBzbWFsbCBjYWxlbmRhcnM8L2gyPgoKCTxwPk5vdCBhIGxvdCEg QnV0IHRoZXJlIGFyZSBzb21lIHN1YnRsZXRpZXM6PC9wPgoKCTx1bD4KCQk8bGk+QnkgZGVm YXVsdCwgbm8gZXZlbnRzIGFyZSBwbGFjZWQgaW4gdGhlIHNtYWxsIGNhbGVuZGFyLiBZb3Ug Y2FuIGFkZCB0aGVtIHlvdXJzZWxmIGlmIHlvdSB3aXNoIGJlY2F1c2UgeW91IGNhbiB1c2Ug dGhlIHNhbWUgZm9ybS9jb250YWluZXIgbWVjaGFuaXNtIGFzIHRoZSBsYXJnZSBjYWxlbmRh cjwvbGk+CgkJPGxpPlRoZSBvbmx5IHRoaW5nIHJlbmRlcmVkIGluIGEgc21hbGwgY2FsZW5k YXIgY2VsbCBpcyB0aGUgY2xhc3MgaW5mb3JtYXRpb24gc28geW91IGNhbiBjb2xvdXIgdGhl IGJveGVzIGJ5IGV2ZW50PC9saT4KCQk8bGk+PGNvZGU+Y2xhc3NsZXZlbHM8L2NvZGU+IGFy ZSBpZ25vcmVkOiBldmVyeXRoaW5nIGlzIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgYXQgdGhl IGNlbGwgbGV2ZWwgKDxjb2RlPmV2ZW50Y2xhc3NlczwvY29kZT4gYXJlIHN0aWxsIGhvbm91 cmVkIGlmIHlvdSB3aXNoIHRvIHVzZSBhIDxjb2RlPmZvcm08L2NvZGU+IHRvIHByb2Nlc3Mg dGhlbSB5b3Vyc2VsZik8L2xpPgoJCTxsaT5UaGUgc21hbGwgY2FsZW5kYXIgb3V0cHV0cyB5 ZWFyLW1vbnRoLWRheS10aXRsZSBvciBtZXNzeSBwZXJtbGlua3Mgb25seTwvbGk+Cgk8L3Vs PgoKCTxwPkFzaWRlIGZyb20gdGhhdCB0aGV5JiM4MjE3O3JlIHByZXR0eSBtdWNoIGlkZW50 aWNhbC48L3A+CgoJPGgyIGlkPSJpZmNhbCI+VGFnOiA8Y29kZT4mbHQ7dHhwOnNtZF9pZl9j YWwmZ3Q7PC9jb2RlPjwvaDI+CgoJPHA+VGhpcyBjb25kaXRpb25hbCB0YWcgYWxsb3dzIHlv dSAmIzgyMTI7IGluc2lkZSB5b3VyIGNvbnRhaW5lci9mb3JtL3NwYW5mb3JtICAmIzgyMTI7 IHRvIHRlc3QgY2VydGFpbiBjb25kaXRpb25zIG9mIHRoZSBjdXJyZW50IGV2ZW50L2NlbGwu IEF0IHRoZSBtb21lbnQgaXQgaXMganVzdCBmb3IgdGVzdGluZyB0aGUgZXZlbnQgZmxhZ3Mu PC9wPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRzaWZjYWwiPkF0dHJpYnV0ZXM8L2gz PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZsYWc8L3NwYW4+IDogdGhlIGZs YWcocykgeW91IHdhbnQgdG8gdGVzdCwgZWFjaCBzZXBhcmF0ZWQgYnkgYSBjb21tYS4gQ2hv b3NlIGZyb206IDxjb2RlPmV2ZW50PC9jb2RlPiwgPGNvZGU+cmVjdXI8L2NvZGU+LCA8Y29k ZT5tdWx0aWZpcnN0PC9jb2RlPiwgPGNvZGU+bXVsdGlsYXN0PC9jb2RlPiwgPGNvZGU+bXVs dGk8L2NvZGU+LCA8Y29kZT5tdWx0aXByZXY8L2NvZGU+LCA8Y29kZT5jYW5jZWw8L2NvZGU+ LCBvciA8Y29kZT5ob2xzPC9jb2RlPi4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+bG9naWM8L3NwYW4+IDogd2hldGhlciB5b3Ugd2FudCB0byBjaGVj ayBpZiA8ZW0+YWxsPC9lbT4gZmxhZ3MgeW91IG5vbWluYXRlZCBhcmUgc2V0IGluIHRoZSBj dXJyZW50IGNlbGwgKDxjb2RlPmxvZ2ljPSZxdW90O2FuZCZxdW90OzwvY29kZT4pIG9yIDxl bT5hdCBsZWFzdCBvbmU8L2VtPiBvZiB0aGUgZmxhZ3MgaXMgc2V0ICg8Y29kZT5sb2dpYz0m cXVvdDtvciZxdW90OzwvY29kZT4pLiBEZWZhdWx0OiA8Y29kZT5hbmQ8L2NvZGU+PC9saT4K CTwvdWw+CgoJPGgyIGlkPSJjYWxpbmZvIj5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2NhbF9p bmZvIC8mZ3Q7PC9jb2RlPjwvaDI+CgoJPHA+SW5zaWRlIHlvdXIgY29udGFpbmVyL2Zvcm0v c3BhbmZvcm0sIHVzZSB0aGlzIHRhZyB0byBvdXRwdXQgY2VydGFpbiBpbmZvcm1hdGlvbiBh Ym91dCB0aGUgY3VycmVudCBldmVudC9jZWxsLjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBp ZD0iYXR0c2NhbGluZm8iPkF0dHJpYnV0ZXM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPnR5cGU8L3NwYW4+IDogdGhlIHR5cGUocykgb2YgaW5mb3JtYXRpb24geW91 IHdhbnQgdG8gcmV0dXJuLCBlYWNoIHNlcGFyYXRlZCBieSBhIGNvbW1hLiBDaG9vc2UgZnJv bTogPGNvZGU+ZmxhZzwvY29kZT4sIDxjb2RlPm1vbnRoPC9jb2RlPiwgPGNvZGU+eWVhcjwv Y29kZT4sIDxjb2RlPnNlY3Rpb248L2NvZGU+LCA8Y29kZT5jYXRlZ29yeTwvY29kZT4sIDxj b2RlPmF1dGhvcjwvY29kZT4sIDxjb2RlPmNhbGlkPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5qb2luPC9zcGFuPiA6IHRoZSBjaGFyYWN0ZXJzIHlvdSB3YW50IHRv IHVzZSB0byBzZXBhcmF0ZSBlYWNoIGl0ZW0geW91IGFza2VkIGZvci4gRGVmYXVsdDogYSBz cGFjZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5odG1sPC9zcGFuPiA6IElmIHNl dCB0byA8Y29kZT4xPC9jb2RlPiwgcmV0dXJucyBub3Qgb25seSB0aGUgdmFsdWVzIHlvdSBz cGVjaWZpZWQgYnV0IHRoZWlyIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHZhcmlh YmxlIG5hbWVzIGFzIHdlbGwsIGdpdmluZyB5b3UgdGhlIGVudGlyZSBzdHJpbmcgYXMgYSB2 YWxpZCBzZXQgb2YgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gcGFyYW1ldGVycyB3 aGljaCBjYW4gYmUgYWRkZWQgdG8gYW4gYW5jaG9yLiBJdCBvdmVycmlkZXMgdGhlIDxjb2Rl PmpvaW48L2NvZGU+IGF0dHJpYnV0ZSBhbmQgc2V0cyBpdCB0byBhbiBhbXBlcnNhbmQuIERl ZmF1bHQ6IDxjb2RlPjA8L2NvZGU+LjxkaXYgY2xhc3M9ImJyZWFrIj5UaGlzIGF0dHJpYnV0 ZSBpcyB1c2VmdWwgaWYgeW91IGFyZSBidWlsZGluZyB5b3VyIG93biBjb250ZW50IGluc2lk ZSBlYWNoIGNlbGwgdmlhIGEgPGNvZGU+Zm9ybTwvY29kZT4gYW5kIHdpc2ggdG8gbWFpbnRh aW4gdGhlIGN1cnJlbnQgc2VhcmNoIGVudmlyb25tZW50LiBJZiB5b3UgYWxsb3cgcGVvcGxl IHRvIGZpbHRlciBldmVudHMgYnkgY2F0ZWdvcnkgb3IgYXV0aG9yIHlvdSBjYW4gdXNlIHRo aXMgdG8gcmV0dXJuIHRoZSAmIzgyMTY7Y3VycmVudCYjODIxNzsgc3RhdGUgb2YgY2VydGFp biB2YXJpYWJsZXMgc28geW91IGNhbiBwYXNzIHRoZW0gdG8gdGhlIG5leHQgcGFnZSBhbmQg bWFpbnRhaW4gc3RhdGUuPC9kaXY+PC9saT4KCTwvdWw+CgoJPGgyIGlkPSJjYWxub3ciPlRh ZzogPGNvZGU+Jmx0O3R4cDpzbWRfY2FsX25vdyAvJmd0OzwvY29kZT48L2gyPgoKCTxwPlJl dHVybiB0aGUgY3VycmVudCBkYXRlL3RpbWUsIGZvcm1hdHRlZCBob3dldmVyIHlvdSBwbGVh c2UuIFVzZWZ1bCBmb3IgZXh0cmFjdGluZyBwYXJ0cyBvZiB0aGUgY3VycmVudCBzeXN0ZW0g dGltZXN0YW1wIHRvIGNvbXBhcmUgdGhpbmdzIHZpYSBvdGhlciBjb25kaXRpb25hbCBwbHVn aW5zIG9yICYjODIxMjsgZXZlbnR1YWxseSAmIzgyMTI7IHRoZSA8Y29kZT4mbHQ7dHhwOnNt ZF9pZl9jYWwmZ3Q7PC9jb2RlPiB0YWcuPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJh dHRzY2Fsbm93Ij5BdHRyaWJ1dGVzPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5mb3JtYXQ8L3NwYW4+IDogdGhlIHdheSB5b3Ugd2FudCB0aGUgZGF0ZS90aW1lIHJl cHJlc2VudGVkLiBVc2UgYW55IHZhbGlkIDxhIGhyZWY9Imh0dHA6Ly91azIucGhwLm5ldC9z dHJmdGltZSI+c3RyZnRpbWUoKTwvYT4gc3RyaW5nLiBEZWZhdWx0cyB0byB0aGUgZGF0ZSBm b3JtYXQgeW91IHNldCBpbiBCYXNpYyBQcmVmczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5nbXQ8L3NwYW4+IDogcmV0dXJuIGVpdGhlciBsb2NhbCB0aW1lICg8Y29kZT4wPC9j b2RlPikgYWNjb3JkaW5nIHRvIHRoZSB0aW1lIHpvbmUgc2V0IGluIEJhc2ljIFByZWZzLCBv ciA8c3BhbiBjbGFzcz0iY2FwcyI+R01UPC9zcGFuPiB0aW1lICg8Y29kZT4xPC9jb2RlPiku IERlZmF1bHQ6IDxjb2RlPjA8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i Pmxhbmc8L3NwYW4+IDogYW4gPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gbGFuZ3Vh Z2UgY29kZSB0aGF0IGZvcm1hdHMgdGltZSBzdHJpbmdzIHN1aXRhYmxlIGZvciB0aGUgc3Bl Y2lmaWVkIGxhbmd1YWdlIChvciBsb2NhbGUpIGFzIGRlZmluZWQgYnkgPGEgaHJlZj0iaHR0 cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fNjM5Ij48c3BhbiBjbGFzcz0iY2FwcyI+ SVNPPC9zcGFuPiA2Mzk8L2E+LiBEZWZhdWx0OiB1bnNldCAoaS5lLiB1c2UgdGhlIHZhbHVl IGFzIHN0YXRlZCBpbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBwcmVmcyk8L2xp PgoJPC91bD4KCgk8aDIgY2xhc3M9ImV4YW1wbGVzIj5FeGFtcGxlczwvaDI+CgoJPGgzIGlk PSJlZzEiPkV4YW1wbGUgMTwvaDM+CgoJPHA+VGhlIGJlYXV0eSBvZiB0aGUgcGx1Z2luIGlz IHRoYXQgeW91IGhhdmUgdGhlIGVudGlyZSBhcnNlbmFsIG9mIDxzcGFuIGNsYXNzPSJjYXBz Ij5UWFA8L3NwYW4+IHRhZ3MgYXZhaWxhYmxlIHRvIHlvdSBpZiB5b3UgY2hvb3NlIHRvIHVz ZSBhIDxjb2RlPmZvcm08L2NvZGU+LiBUaHVzIHlvdSBjYW4gc2V0IHRoZSBhcnRpY2xlJiM4 MjE3O3Mgc3RhcnQgYW5kIGVuZCBkYXRlcyB0byB0aGUgc2FtZSBkYXkgYW5kIHNldCB0aGUg c3RhcnQgYW5kIGVuZCB0aW1lcyB0byBpbmRpY2F0ZSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0 aGUgZXZlbnQuIFlvdSBjYW4gdGhlbiB1c2Ugc3RhbmRhcmQgPGNvZGU+Jmx0O3R4cDpwb3N0 ZWQgLyZndDs8L2NvZGU+IG9yIDxjb2RlPiZsdDt0eHA6ZXhwaXJlcyAvJmd0OzwvY29kZT4g dGFncyB3aXRoIHZhcmlvdXMgPGNvZGU+Zm9ybWF0PC9jb2RlPiBzdHJpbmdzIHRvIHJlbmRl ciB0aGUgZXZlbnQmIzgyMTc7cyBjcml0ZXJpYS48L3A+CgoJPHA+U2ltaWxhcmx5IHlvdSBj YW4gdXNlIDxjb2RlPiZsdDt0eHA6ZXhjZXJwdCAvJmd0OzwvY29kZT4gYW5kIDxjb2RlPiZs dDt0eHA6dGl0bGUgLyZndDs8L2NvZGU+IG9yIG9mIGNvdXJzZSBhbnkgY3VzdG9tIGZpZWxk cyB0byBzaG93IGFzIG11Y2ggb3IgYXMgbGl0dGxlIGRldGFpbCBhcyB5b3UgbGlrZS48L3A+ Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9j YWxlbmRhciBzZWN0aW9uPSZxdW90O2V2ZW50cyZxdW90OyZndDsKJmx0O2RpdiZndDsKICAg RXZlbnQ6ICZsdDt0eHA6cGVybWxpbmsmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvdHhw OnBlcm1saW5rJmd0OwogICAmbHQ7YnIgLyZndDsmbHQ7dHhwOmV4Y2VycHQgLyZndDsKJmx0 Oy9kaXYmZ3Q7CiZsdDtkaXYgY2xhc3M9JnF1b3Q7ZXZ0aW1lJnF1b3Q7Jmd0OwogICBTdGFy dDogJmx0O3R4cDpwb3N0ZWQgZm9ybWF0PSZxdW90OyVIOiVNJnF1b3Q7IC8mZ3Q7CiZsdDsv ZGl2Jmd0OwombHQ7ZGl2IGNsYXNzPSZxdW90O2V2dGltZSZxdW90OyZndDsKICAgRW5kOiAm bHQ7dHhwOmV4cGlyZXMgZm9ybWF0PSZxdW90OyVIOiVNJnF1b3Q7IC8mZ3Q7CiZsdDsvZGl2 Jmd0OwombHQ7L3R4cDpzbWRfY2FsZW5kYXImZ3Q7CjwvY29kZT48L3ByZT4KCgk8aDMgaWQ9 ImVnMiI+RXhhbXBsZSAyPC9oMz4KCgk8cD5Vc2luZyB0aGUgY29uZGl0aW9uYWwgdGFnIHlv dSBjYW4gdGFrZSBhY3Rpb24gaWYgY2VydGFpbiBldmVudHMgY29udGFpbiBjZXJ0YWluIGZs YWdzLiBUaGlzIGV4YW1wbGUgYWxzbyBzaG93IGEgY29tcGxldGVseSB1c2VsZXNzIG1hbm5l ciBvZiBlbXBsb3lpbmcgPGNvZGU+Jmx0O3R4cDpzbWRfY2FsX25vdyAvJmd0OzwvY29kZT4u PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+VGltZSBpczog Jmx0O3R4cDpzbWRfY2FsX25vdyBmb3JtYXQ9JnF1b3Q7JVQmcXVvdDsgLyZndDsKJmx0O3R4 cDpzbWRfY2FsZW5kYXIgZm9ybT0mcXVvdDtjZWxsZm9ybSZxdW90OwogICAgIHN0ZXBmaWVs ZD0mcXVvdDtjdXN0b21fMyZxdW90OyBza2lwZmllbGQ9JnF1b3Q7Y3VzdG9tXzYmcXVvdDsK ICAgICBzcGFuZm9ybT0mcXVvdDttdWx0aXMmcXVvdDsgLyZndDsKPC9jb2RlPjwvcHJlPgoK CTxwPkluIGZvcm0gPGNvZGU+Y2VsbGZvcm08L2NvZGU+OjwvcD4KCjxwcmUgY2xhc3M9ImJs b2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2lmX2NhbCBmbGFnPSZxdW90 O3JlY3VyJnF1b3Q7Jmd0OwogICZsdDt0eHA6cGVybWxpbmsmZ3Q7KFJFQ1VSUykmbHQ7L3R4 cDpwZXJtbGluayZndDsKJmx0O3R4cDplbHNlIC8mZ3Q7CiAgICZsdDt0eHA6cGVybWxpbmsm Z3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvdHhwOnBlcm1saW5rJmd0OwogICAmbHQ7dHhw OnNtZF9pZl9jYWwgZmxhZz0mcXVvdDttdWx0aWZpcnN0JnF1b3Q7Jmd0OwogICAgICAmbHQ7 c3BhbiBjbGFzcz0mcXVvdDtyaWdodCZxdW90OyZndDstLSZhbXA7cmFxdW87Jmx0Oy9zcGFu Jmd0OwogICAmbHQ7L3R4cDpzbWRfaWZfY2FsJmd0OwombHQ7L3R4cDpzbWRfaWZfY2FsJmd0 Owo8L2NvZGU+PC9wcmU+CgoJPHA+QW5kIGluIGZvcm0gPGNvZGU+bXVsdGlzPC9jb2RlPjo8 L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNt ZF9pZl9jYWwgZmxhZz0mcXVvdDttdWx0aSwgbXVsdGlwcmV2JnF1b3Q7CiAgICAgbG9naWM9 JnF1b3Q7b3ImcXVvdDsmZ3Q7CiAgICZsdDt0eHA6cGVybWxpbmsmZ3Q7LS0mYW1wO3JhcXVv Oy0tJmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiZsdDsvdHhwOnNtZF9pZl9jYWwmZ3Q7CiZsdDt0 eHA6c21kX2lmX2NhbCBmbGFnPSZxdW90O211bHRpbGFzdCZxdW90OyZndDsKICAgJmx0O3R4 cDpwZXJtbGluayZndDsKICAgICAgJmx0O3NwYW4gY2xhc3M9JnF1b3Q7bGVmdCZxdW90OyZn dDsmYW1wO3JhcXVvOyZsdDsvc3BhbiZndDsgRU5EICZsdDt0eHA6dGl0bGUgLyZndDsKICAg Jmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiZsdDsvdHhwOnNtZF9pZl9jYWwmZ3Q7CjwvY29kZT48 L3ByZT4KCgk8cD5Ob3RpY2UgdGhhdCA8Y29kZT5tdWx0aWZpcnN0PC9jb2RlPiBpcyB0ZXN0 ZWQgaW5zaWRlIHRoZSBzYW1lIGZvcm0gYXMgc3RhbmRhcmQgZXZlbnRzLiBUaGlzIGlzIGJl Y2F1c2Ugb25seSA8ZW0+Y29udGludWF0aW9uIHNwYW5uZWQgY2VsbHM8L2VtPiBhcmUgcGFz c2VkIHRvIHRoZSA8Y29kZT5zcGFuZm9ybTwvY29kZT47IHRoZSBmaXJzdCBldmVudCBvZiBh IHNwYW5uZWQgZ3JvdXAgaXMganVzdCBsaWtlIGFueSBvdGhlciBldmVudC48L3A+CgoJPGgz IGlkPSJlZzMiPkV4YW1wbGUgMzwvaDM+CgoJPHA+WW91IGNvdWxkIHVzZSB0aGUgY2FsZW5k YXIgdGFncyB0byBvdXRwdXQgdmFyaW91cyBiaXRzIG9mIGV2ZW50IGZsYWcgaW5mb3JtYXRp b24gdG8gYnVpbGQgeW91ciBvd24gY2xhc3MgbmFtZXMuIFRoaXMgZXhhbXBsZSBhbHNvIGRl bW9uc3RyYXRlcyB0aGUgPGNvZGU+aHRtbDwvY29kZT4gYXR0cmlidXRlIG9mIHRoZSA8Y29k ZT4mbHQ7dHhwOnNtZF9jYWxfaW5mbyAvJmd0OzwvY29kZT4gdG8gYnVpbGQgdXAgYSBxdWVy eSBzdHJpbmcgdGhhdCBpcyBwYXNzZWQgYWxvbmcgd2l0aCBhbiBldmVudCYjODIxNztzIDxj b2RlPmNhdGVnb3J5MTwvY29kZT4gd2hlbiBhIHZpc2l0b3IgY2xpY2tzIHRoZSBhbmNob3Iu PC9wPgoKCTxwPlRoaXMgYWxsb3dzIHlvdXIgc2l0ZSB2aXNpdG9ycyB0byBmaWx0ZXIgZXZl bnRzIGJ5IGNhdGVnb3J5IHdoaWxlIHJldGFpbmluZyB0aGUgYWJpbGl0eSB0byBzaG93IHRo ZSBjYWxlbmRhciBmb3IgdGhlIGN1cnJlbnQgbW9udGgveWVhciBhbmQgc2VjdGlvbiB0aGV5 IGFyZSB2aWV3aW5nIGluc3RlYWQgb2YgZHJvcHBpbmcgYmFjayB0byB0aGUgY3VycmVudCBt b250aC95ZWFyIGxpa2Ugb3RoZXIgY2FsZW5kYXIgc3lzdGVtcyBvZnRlbiBkby48L3A+Cgo8 cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9jYWxl bmRhciBpc293ZWVrcz0mcXVvdDsxJnF1b3Q7CiAgICAgeWVhcndpZHRoPSZxdW90OzAsMiZx dW90OyBzZWxlY3Q9JnF1b3Q7eWVhciwgbW9udGgmcXVvdDsKICAgICBzdGVwZmllbGQ9JnF1 b3Q7Y3VzdG9tXzEmcXVvdDsgc2tpcGZpZWxkPSZxdW90O2N1c3RvbV8yJnF1b3Q7CiAgICAg c2hvd3NraXBwZWQ9JnF1b3Q7MSZxdW90OyBleHBpcmVkPSZxdW90OzEmcXVvdDsmZ3Q7CiAg ICZsdDtzcGFuIGNsYXNzPSZxdW90O2NhbF8mbHQ7dHhwOnNtZF9jYWxfaW5mbyBqb2luPSZx dW90OyBjYWxfJnF1b3Q7IC8mZ3Q7JnF1b3Q7Jmd0OwogICAgICAmbHQ7dHhwOnBlcm1saW5r Jmd0OyZsdDt0eHA6dGl0bGUgLyZndDsmbHQ7L3R4cDpwZXJtbGluayZndDsKICAgICAgJmx0 O2EgaHJlZj0mcXVvdDs/Yz0mbHQ7dHhwOmNhdGVnb3J5MQogICAgICAgICAvJmd0OyZhbXA7 Jmx0O3R4cDpzbWRfY2FsX2luZm8gdHlwZT0mcXVvdDtzZWN0aW9uLCB5ZWFyLAogICAgICAg ICBtb250aCwgY2FsaWQmcXVvdDsgaHRtbD0mcXVvdDsxJnF1b3Q7CiAgICAgICAgIC8mZ3Q7 JnF1b3Q7Jmd0OyZsdDt0eHA6Y2F0ZWdvcnkxIHRpdGxlPSZxdW90OzEmcXVvdDsgLyZndDsm bHQ7L2EmZ3Q7CiAgICZsdDsvc3BhbiZndDsKJmx0Oy90eHA6c21kX2NhbGVuZGFyJmd0Owo8 L2NvZGU+PC9wcmU+CgoJPHA+V2hhdCBpcyBhbHNvIHVzZWZ1bCBhYm91dCB0aGUgPGNvZGU+ Jmx0O3R4cDpzbWRfY2FsX2luZm8gLyZndDs8L2NvZGU+IHRhZyBpcyB0aGF0IGlmIGEgcGFy dGljdWxhciB2YWx1ZSBpcyBub3Qgc2V0IGl0IHdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHRo ZSBvdXRwdXQuPC9wPgoKCTxwPjwvZGl2PjwvcD4KPCEtLSAtLS0gQkVHSU4gUExVR0lOIENT UyAtLS0gLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVp Z2h0OjEuNSA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEw NSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQt Y29sb3I6ICNGRkZGQ0M7fQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5v cm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4 YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7 IH0KI3NtZF9oZWxwIGE6bGluaywgI3NtZF9oZWxwIGE6dmlzaXRlZCB7IGNvbG9yOiAjMDBj OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibHVl OyBwYWRkaW5nLWJvdHRvbToxcHg7fQojc21kX2hlbHAgYTpob3ZlciwgI3NtZF9oZWxwIGE6 YWN0aXZlIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJv dHRvbTogMnB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNzbWRfaGVscCBo MSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdp bjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJvcmRlci1ib3R0 b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgY29sb3I6ICMzNjk7IGZv bnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hlbHAgaDMgeyBjb2xvcjog IzA3OTsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2lu ZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IHRl eHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDEx cHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBw eCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsg Zm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6IzMzZDsgfQojc21kX2hlbHAgLm1hbmQgeyBiYWNr Z3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxl IHt3aWR0aDo5MCU7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJvdHRvbToxZW07fQoj c21kX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7Ym9yZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRk aW5nOi41ZW0gMDt9CiNzbWRfaGVscCB1bCB7IGxpc3Qtc3R5bGUtdHlwZTpzcXVhcmU7IH0K I3NtZF9oZWxwIC5yZXF1aXJlZCB7Y29sb3I6cmVkO30KI3NtZF9oZWxwIGxpIHsgbWFyZ2lu OjVweCAyMHB4IDVweCAzMHB4OyB9CiNzbWRfaGVscCAuYnJlYWsgeyBtYXJnaW4tdG9wOjVw eDsgfQo8L3N0eWxlPgo8IS0tIC0tLSBFTkQgUExVR0lOIENTUyAtLS0gLS0+CiI7czozOiJt ZDUiO3M6MzI6ImFiNzA3MTg4NjBlNzkwNGM3ZTk4OTg5OGU0MTRlZmQ3Ijt9