# jmc_event_display v0.3beta # Front End Component of the Event Manager for Textpattern # Joel Courtney # http://euphemize.net/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6NzoiMC4zYmV0YSI7czo2OiJhdXRob3IiO3M6MTM6Ikpv ZWwgQ291cnRuZXkiO3M6MTA6ImF1dGhvcl91cmkiO3M6MjE6Imh0dHA6Ly9ldXBoZW1pemUu bmV0LyI7czoxMToiZGVzY3JpcHRpb24iO3M6NTY6IkZyb250IEVuZCBDb21wb25lbnQgb2Yg dGhlIEV2ZW50IE1hbmFnZXIgZm9yIFRleHRwYXR0ZXJuIjtzOjQ6InR5cGUiO2k6MTtzOjQ6 Im5hbWUiO3M6MTc6ImptY19ldmVudF9kaXNwbGF5IjtzOjQ6ImhlbHAiO3M6MTMwMTU6Ijxo MiBjbGFzcz0iZW50cnktdGl0bGUiPmptY19ldmVudF9tYW5hZ2VyPC9oMj4KPGgzPjxhIGhy ZWY9Imh0dHA6Ly9maWxlcy5ldXBoZW1pemUubmV0L3RleHRwYXR0ZXJuL2ptY19ldmVudF9t YW5hZ2VyLnR4dCI+RG93bmxvYWQgam1jX2V2ZW50X21hbmFnZXIgdjAuMmJldGE8L2E+PC9o Mz4KPGgyPlByZWFtYmxlPC9oMj4KPHA+VGhlIGptY19ldmVudF9tYW5hZ2VyIGlzIGEgcGx1 Z2luL2hhY2sgZm9yIHRleHRwYXR0ZXJuIGNyZWF0ZWQgdG8gYWxsb3cgdXNlcnMgdG8gY3Jl YXRlIGV2ZW50cyBhdCB2YXJpb3VzIHZlbnVlcy4gSXQgaGFzIGJlZW4gZG9uZSBzbyBjb21w bGV0ZWx5IGJ5ICYjODIxNjtqdTpmZW1haXogQCA8YSBocmVmPSJodHRwOi8vZXVwaGVtaXpl Lm5ldCI+ZXVwaGVtaXplLm5ldDwvYT4uIEFueSBjb21tZW50cyBvciBzdWdnZXN0aW9ucyB3 b3VsZCBiZSBhcHByZWNpYXRlZCBhbmQgdGhlIHN1cHBvcnQgdGhyZWFkIGF0IDxhIGhyZWY9 Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20iPmZvcnVtLnRleHRwYXR0ZXJuLmNvbTwv YT4gaXMgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMu cGhwP2lkPTExMTM3Ij5hdmFpbGFibGUgaGVyZTwvYT4uIFdoaWxlIHRoaXMgaGVscCBmaWxl IGhhcyBhdHRlbXB0ZWQgdG8gYmUgYXMgdGhvcm91Z2ggYXMgcG9zc2libGUsIHRoaW5ncyBk byBmYWxsIHRocm91Z2ggdGhlIGNyYWNrcy4gU2luY2Ugam1jX2V2ZW50X21hbmFnZXIgaXMg KHN0aWxsKSBpbiBhIGJldGEgc3RhZ2UsIHRoZXJlIG1heSBleGlzdCBzb21lIGJ1Z3MgaW4g dGhlIG9wZXJhdGlvbi4gQWRkaXRpb25hbGx5LCB0aGUgcGx1Z2luL2hhY2sgaXMgYW4gb25n b2luZyBwcm9qZWN0IGFuZCBtYXkgYmUgdXBkYXRlZCBmcm9tIHRpbWUgdG8gdGltZS4gVG8g ZW5zdXJlIHRoYXQgeW91IGhhdmUgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uLCBwbGVh c2UgZW5zdXJlIHlvdSB2aXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0 ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTExMTM3Ij5zdXBwb3J0IGZvcnVtIHRocmVhZDwv YT4gcmVndWxhcmx5LjwvcD4KPHA+am1jX2V2ZW50X21hbmFnZXIgaXMgZGlzdHJpYnV0ZWQg dW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBGb3IgbW9yZSBpbmZvcm1h dGlvbiBwbGVhc2UgdmlzaXQgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0 L2dwbC5odG1sIj5HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZTwvYT4uPC9wPgo8aDI+SW5z dGFsbGF0aW9uPC9oMj4KPHA+VGhlIGluc3RhbGxhdGlvbiBwYWNrYWdlIGlzIGEgc2ltcGxl IHByb2Nlc3MuIEZvciB0aG9zZSBvZiB5b3UgdXBncmFkaW5nLCB0aGVyZSBhcmUgYWRkaXRp b25hbCByZXF1aXJlbWVudHMgb24geW91ciBiZWhhbGYgZHVlIHRvIHRoZSBhZGRpdGlvbiBv ZiBjYXRlZ29yaWVzIHRvIGptY19ldmVudF9tYW5hZ2VyLjwvcD4KPGgzPkZyZXNoIEluc3Rh bGw8L2gzPgo8cD5Gb3IgdGhvc2UgdW5kZXJnb2luZyBhIGZyZXNoIGluc3RhbGwsIHBsZWFz ZSBnbyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPgo8b2w+CjxsaT5UdXJuIHRo ZSBwbHVnaW4gdG8gYWN0aXZlPC9saT4KPGxpPkdvIHRvIENvbnRlbnQgYW5kIEV2ZW50IE1h bmFnZXIgdGFiczwvbGk+CjxsaT5EbyBhIGxpdHRsZSBkYW5jZSBhbmQgeW91JiM4MjE3O2xs IGZpbmQgdGhhdCB5b3UmIzgyMTc7cmUgcmVhZHkgdG8gZ28hPC9saT4KPC9vbD4KPGgzPlVw Z3JhZGUgb24gUGFzdCBWZXJzaW9uPC9oMz4KPHA+QXMgd2l0aCBhbGwgdXBkYXRlcywgcGxl YXNlIGJhY2t1cCB5b3VyIGRhdGFiYXNlLCB0aGVuIGdvIHRocm91Z2ggdGhlIGZvbGxvd2lu ZyBzdGVwczo8L3A+CjxvbD4KPGxpPlRocm91Z2ggeW91ciBkYXRhYmFzZSBhZG1pbiwgYWRk IHRoZSBmb2xsb3dpbmcgY29sdW1ucyB0byB0aGUKPHByZT50eHBfam1jX2V2ZW50PC9wcmU+ CjxwPmFuZDwvcD4KPHByZT50eHBfam1jX2V2ZW50X3ZlbnVlPC9wcmU+CjxwPnNldCBhcyBO VUxMIChvciBlcXVpdmFsZW50IG9uIHlvdXIgVGV4dHBhdHRlcm4gaW5zdGFsbGF0aW9uKTwv bGk+CjxsaT5BY3RpdmF0ZSBwbHVnaW48L2xpPgo8bGk+R28gdG8gQ29udGVudCBhbmQgdGhl biBFdmVudCBNYW5hZ2VyIHRhYjwvbGk+CjxsaT5EbyBhIGxpdHRsZSBqaWcgYW5kIHlvdSBz aG91bGQgYmUgcmlnaHQgKyByZWFkeSB0byBnbyE8L2xpPgo8L29sPgo8aDI+SW50cm9kdWN0 aW9uIHRvIHRoZSBFdmVudCBNYW5hZ2VyPC9oMj4KPHA+VGhlIGV2ZW50IG1hbmFnZXIgaGFz IHR3byBjb21wb25lbnRzIC0gdGhlIGFkbWluIHNpZGUgY29udHJvbHMgYW5kIHRoZSBwdWJs aWMgc2lkZSBvdXRwdXQuIE9uIGluc3RhbGxhdGlvbiBpdCB3aWxsIGVuc3VyZSB0aGF0IGEg ZGF0YWJhc2UgZXhpc3RzLCB0aGUgdGFibGVzIGV4aXN0LCBpbnN0YWxsaW5nIGlmIHRoZXkm IzgyMTc7cmUgbWlzc2luZywgYW5kIHRoYXQgYW4gZW50cnkgZXhpc3RzIGluIHRoZSB0YWJs ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudCBtYW5hZ2VyIChpbiB0aGlzIHdheSBJIGNv bnNpZGVyIGl0IGEgaGFjaykuPC9wPgo8aDI+RXZlbnQgTWFuYWdlciBUYWI8L2gyPgo8cD5X aGVuIHlvdSBnbyB0byB0aGUgZXZlbnQgbWFuYWdlciB0YWIgeW91IHdpbGwgYmUgcHJlc2Vu dGVkIHdpdGggYSBsaXN0IG9mIGV2ZW50cyB0aGF0IGhhdmUgYmVlbiBlbnRlcmVkLiBDdXJy ZW50bHksIHRoZSAmIzgyMjA7ZXZlbnRzIHBlciBwYWdlJiM4MjIxOyBpcyBhIG1pcnJvciBv ZiB0aGF0IHVzZWQgb24gdGhlIGFydGljbGUgcGFnZSwgYW5kIGFueSBhbHRlcmF0aW9uIHRv IHRoZSAmIzgyMjA7ZXZlbnRzIHBlciBwYWdlJiM4MjIxOyB3aWxsIGFsc28gYWx0ZXIgdGhl ICYjODIyMDthcnRpY2xlcyBwZXIgcGFnZSYjODIyMTsgdW5kZXIgdGhlICYjODIyMDthcnRp Y2xlcyB0YWImIzgyMjE7LjwvcD4KPHA+VGhlcmUgYXJlIGN1cnJlbnRseSBmb3VyIHRvcCBs ZXZlbCBidXR0b25zIGZvciB0aGUgRXZlbnQgTWFuYWdlcjo8L3A+Cjx1bD4KPGxpPkV2ZW50 IE1hbmFnZXIgLSBNYW5hZ2VzIHRoZSBhY3R1YWwgZXZlbnRzPC9saT4KPGxpPlZlbnVlIE1h bmFnZXIgLSBNYW5hZ2VzIHRoZSB2ZW51ZXMgZm9yIHRoZSBldmVudHMuIEVhY2ggZXZlbnQg bXVzdCBiZSAmIzgyMjA7YXQmIzgyMjE7IGEgdmVudWU8L2xpPgo8bGk+Q2F0ZWdvcnkgTWFu YWdlciAtIE1hbmFnZXMgdGhlIG5ldyBjYXRlZ29yaWVzIGF2YWlsYWJsZSBmb3IgdGhlIHBs dWdpbjwvbGk+CjxsaT5SU1MgRmVlZCAtIEZvciBmdXR1cmUgdmVyc2lvbnMgd2lsbCBhbGxv dyBhY2Nlc3MgdG8gYWx0ZXJhdGlvbnMgdG8gdGhlIFJTUyBmb3JtYXQ8L2xpPgo8L3VsPgo8 aDM+RXZlbnQgTWFuYWdlcjwvaDM+CjxwPlRoZSBkZWZhdWx0IHBhZ2Ugb2YgdGhlIHBsdWdp biYjODIxNztzIHRhYi4gR2l2ZXMgdHdvIG9wdGlvbnM6PC9wPgo8dWw+CjxsaT5BZGQgRXZl bnQ8L2xpPgo8bGk+RXZlbnQgTGlzdGluZyAoZGVmYXVsdCk8L2xpPgo8L3VsPgo8aDQ+QWRk IEV2ZW50PC9oND4KPHA+QWxsb3dzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIGFkZCBhbiBldmVu dC4gVXRpbGlzZXMgPGEgaHJlZj0iaHR0cDovL21pY3JvZm9ybWF0cy5vcmcvIj5taWNyb2Zv cm1hdHM8L2E+IHN0eWxlIDxhIGhyZWY9Imh0dHA6Ly9taWNyb2Zvcm1hdHMub3JnL3dpa2kv aGNhbGVuZGFyIj5oQ2FsZW5kYXI8L2E+LjxhIGhyZWY9Imh0dHA6Ly9taWNyb2Zvcm1hdHMu b3JnL3dpa2kvaGNhbGVuZGFyIj48L2E+PC9wPgo8cD5PcHRpb25hbDo8L3A+Cjx1bD4KPGxp PkNhdGVnb3J5PC9saT4KPGxpPkV2ZW50IE5hbWU8L2xpPgo8bGk+UHJpY2U8L2xpPgo8bGk+ T3RoZXIgQmFuZHM8L2xpPgo8bGk+T3RoZXIgSW5mbzwvbGk+CjwvdWw+CjxwPlJlcXVpcmVk OjwvcD4KPHVsPgo8bGk+U3RhcnQgRGF0ZSArIFRpbWU8L2xpPgo8bGk+RmluaXNoIERhdGUg KyBUaW1lPC9saT4KPGxpPlZlbnVlPC9saT4KPC91bD4KPHA+PHN0cm9uZz5Ob3RlPC9zdHJv bmc+OiBFdmVudCBtdXN0IEZpbmlzaCA8ZW0+YWZ0ZXI8L2VtPiBpdCBiZWdpbnMuPC9wPgo8 aDQ+RXZlbnQgTGlzdGluZzwvaDQ+CjxwPkJhc2ljIGxpc3Rpbmcgb2YgYWxsIGV2ZW50cyBw YXN0LCBwcmVzZW50IGFuZCBmdXR1cmUuPC9wPgo8aDM+VmVudWUgTGlzdGluZzwvaDM+Cjxw PkdpdmVzIHR3byBvcHRpb25zOjwvcD4KPHVsPgo8bGk+QWRkIFZlbnVlPC9saT4KPGxpPlZl bnVlIExpc3RpbmcgKGRlZmF1bHQpPC9saT4KPC91bD4KPGg0PkFkZCBWZW51ZTwvaDQ+Cjxw PkFsbG93cyB0aGUgYWRtaW5pc3RyYXRvciB0byBhZGQgYSB2ZW51ZS4gT25seSB0aGUgdmVu dWUgbmFtZSBpcyByZXF1aXJlZC4gVXRpbGlzZXMgPGEgaHJlZj0iaHR0cDovL21pY3JvZm9y bWF0cy5vcmcvIj5taWNyb2Zvcm1hdDwvYT4gc3R5bGUgPGEgaHJlZj0iaHR0cDovL21pY3Jv Zm9ybWF0cy5vcmcvd2lraS9oY2FyZCI+aENhcmQ8L2E+LjwvcD4KPGg0PlZlbnVlIExpc3Rp bmc8L2g0Pgo8cD5CYXNpYyBsaXN0aW5nIG9mIGFsbCB2ZW51ZXMuPC9wPgo8aDM+Q2F0ZWdv cnkgTWFuYWdlcjwvaDM+CjxwPkdpdmVzIHR3byBvcHRpb25zOjwvcD4KPHVsPgo8bGk+QWRk IENhdGVnb3J5PC9saT4KPGxpPkNhdGVnb3J5IExpc3RpbmcgKGRlZmF1bHQpPC9saT4KPC91 bD4KPGg0PkFkZCBDYXRlZ29yeTwvaDQ+CjxwPkFsbG93cyB0aGUgYWRtaW5pc3RyYXRvciB0 byBhZGQgYW4gY2F0ZWdvcnkuIE9ubHkgdGhlIGNhdGVnb3J5IG5hbWUgaXMgcmVxdWlyZWQu PC9wPgo8aDQ+Q2F0ZWdvcnkgTGlzdGluZzwvaDQ+CjxwPkJhc2ljIGxpc3Rpbmcgb2YgYWxs IGNhdGVnb3JpZXMuPC9wPgo8aDM+UlNTIEZlZWQ8L2gzPgo8cD5TdGlsbCB0byBjb21lIGlu IGZ1dHVyZSB1cGRhdGVzLiBVbnN1cmUgYXMgb2YgeWV0IGFzIHRvIHRoZSBkZXNpZ24sIGxh eW91dCBhbmQgb3B0aW9ucy4gSWYgeW91IGhhdmUgaWRlYXMsIHBsZWFzZSBjb250YWN0IG1l IHRocm91Z2ggdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmll d3RvcGljLnBocD9pZD0xMTEzNyI+am1jX2V2ZW50X21hbmFnZXIgcGx1Z2luIGZvcnVtIHRo cmVhZDwvYT4uPC9wPgo8aDI+Q3JlYXRpbmcgRXZlbnQgTWFuYWdlciBPdXRwdXQ8L2gyPgo8 cD5UaGUgam1jX2V2ZW50X21hbmFnZXIgdXNlcyB0aGUgZm9ybXMgaW4gdGV4dHBhdHRlcm4g dG8gY3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIG91dHB1dC4gWW91IG1heSB1c2UgYW55 IGZvcm0geW91IGxpa2UsIHByb3ZpZGluZyB0aGF0IGl0IGhhcyB0aGUgcmVsZXZhbnQgZGV0 YWlscywgaS5lLiB5b3UgY2FuIGNhbGwgaXQgZnJvbSB3aXRoaW4gYW4gYXJ0aWNsZSwgZnJv bSBhIHBhZ2Ugb3IgZXZlbiBmcm9tIGEgZm9ybSBpdHNlbGYgKDxlbT55ZXQgdG8gYmUgdGVz dGVkPC9lbT4pLjwvcD4KPGgzPkNhbGxpbmcgdGhlIEV2ZW50IE1hbmFnZXI8L2gzPgo8cD5J biBvcmRlciB0byBjYWxsIHRoZSBldmVudCBtYW5hZ2VyLCBhIHNpbXBsZSBUZXh0cGF0dGVy biBzdHlsZSB0YWcgaXMgdXNlZDo8L3A+CjxwPjxjb2RlPjwgdHhwIDpqbWNfZXZlbnRzIGZv cm09ImZvcm1fbmFtZSIgLz48L2NvZGU+PC9wPgo8cD5UaGUgZm9ybV9uYW1lIGlzIHRoZSBu YW1lIG9mIHRoZSBmb3JtIHlvdSB3b3VsZCBsaWtlIHRvIGNhbGwgYXMgdGhlIHRlbXBsYXRl LiBqbWNfZXZlbnRzIGN5Y2xlcyB0aHJvdWdoIDxlbT5hbGw8L2VtPiBldmVudHMgYW5zd2Vy aW5nIGl0cyByZXN0cmljdGlvbnMsIHRoYXQgaXMgaXQgY3ljbGVzIHRocm91Z2ggZWFjaCBy ZWxldmFudCBlbnRyeS48L3A+CjxwPlRoZXJlIGFyZSBtYW55IG9wdGlvbnMgYXMgdG8gaG93 IHRvIGxpbWl0IHRoZSBudW1iZXIgYW5kIHR5cGUgb2YgZXZlbnRzIGJlaW5nIGNhbGxlZC4g VGhlIGZvbGxvd2luZyBhcmUgdGhlIG9wdGlvbnMsIGdpdmVuIHdpdGggZGV0YWlscyBhbHNv IG9mIHRoZSBkZWZhdWx0IChpZiBhbnkpLjwvcD4KPHA+Rm9ybWF0dGluZyBmb3IgdmVudWVz IGlzIGRvbmUgaW5kZXBlbmRlbnRseSBvZiwgb3Igd2l0aGluLCB0aGUgZXZlbnQgZm9ybS48 L3A+CjxoND5saW1pdDwvaDQ+CjxwPlVzZWQgdG8gcmVzdHJpY3QgdGhlIG51bWJlciBvZiBl dmVudHMuPC9wPgo8cD5FeGFtcGxlIHVzYWdlOjwvcD4KPGRsPgo8ZHQ+TGltaXQgdG8gdGVu IGV2ZW50czo8L2R0Pgo8ZGQ+PGNvZGU+PCB0eHAgOmptY19ldmVudHMgZm9ybT0iZm9ybV9u YW1lIiBsaW1pdD0iMTAiIC8+PC9jb2RlPjwvZGQ+CjxkdD5WYWx1ZXM6PC9kdD4KPGRkPgo8 cHJlPjB8MTwvcHJlPgo8L2RkPgo8ZHQ+RGVmYXVsdDo8L2R0Pgo8ZGQ+CjxwcmU+MTwvcHJl Pgo8L2RkPgo8L2RsPgo8aDQ+ZnV0dXJlPC9oND4KPHA+VXNlZCB0byByZXN0cmljdCB0aGUg ZXZlbnRzIHRvIHRob3NlIHRoYXQgd2lsbCBzdGFydCBpbiB0aGUgZnV0dXJlLjwvcD4KPHA+ RXhhbXBsZSB1c2FnZTo8L3A+CjxkbD4KPGR0PkxpbWl0IHRvIGZ1dHVyZTo8L2R0Pgo8ZGQ+ PGNvZGU+PCB0eHAgOmptY19ldmVudHMgZm9ybT0iZm9ybV9uYW1lIiBmdXR1cmU9IjEiIC8+ PC9jb2RlPjwvZGQ+CjxkdD5WYWx1ZXM6PC9kdD4KPGRkPgo8cHJlPjB8MTwvcHJlPgo8L2Rk Pgo8ZHQ+RGVmYXVsdDo8L2R0Pgo8ZGQ+CjxwcmU+MTwvcHJlPgo8L2RkPgo8L2RsPgo8aDQ+ cGFzdDwvaDQ+CjxwPlVzZWQgdG8gcmVzdHJpY3QgdGhlIGV2ZW50cyB0byB0aG9zZSB0aGF0 IHdpbGwgc3RhcnQgaW4gdGhlIHBhc3QuPC9wPgo8cD5FeGFtcGxlIHVzYWdlOjwvcD4KPGRs Pgo8ZHQ+UGFzdCBvbmx5OjwvZHQ+CjxkZD48Y29kZT48IHR4cCA6am1jX2V2ZW50cyBmb3Jt PSJmb3JtX25hbWUiIHBhc3Q9IjEiIGZ1dHVyZT0iMCIgLz48L2NvZGU+PC9kZD4KPGR0PlBh c3QgYW5kIGZ1dHVyZTo8L2R0Pgo8ZGQ+PGNvZGU+PCB0eHAgOmptY19ldmVudHMgZm9ybT0i Zm9ybV9uYW1lIiBwYXN0PSIxIiBmdXR1cmU9IjAiIC8+PC9jb2RlPjwvZGQ+CjxkdD5WYWx1 ZXM6PC9kdD4KPGRkPgo8cHJlPjB8MTwvcHJlPgo8L2RkPgo8ZHQ+RGVmYXVsdDo8L2R0Pgo8 ZGQ+CjxwcmU+MTwvcHJlPgo8L2RkPgo8L2RsPgo8aDQ+Y3VycmVudDwvaDQ+CjxwPlVzZWQg dG8gcmVzdHJpY3QgdGhlIGV2ZW50cyB0byB0aG9zZSB0aGF0IHdpbGwgaGF2ZSBzdGFydGVk LCBidXQgaGF2ZSBub3QgeWV0IGZpbmlzaGVkLjwvcD4KPHA+RXhhbXBsZSB1c2FnZTo8L3A+ CjxkbD4KPGR0PkN1cnJlbnQgb25seTo8L2R0Pgo8ZGQ+PGNvZGU+PCB0eHAgOmptY19ldmVu dHMgZm9ybT0iZm9ybV9uYW1lIiBjdXJyZW50PSIxIiBmdXR1cmU9IjAiIC8+PC9jb2RlPjwv ZGQ+CjxkdD5DdXJyZW50IGFuZCBGdXR1cmU6PC9kdD4KPGRkPjxjb2RlPjwgdHhwIDpqbWNf ZXZlbnRzIGZvcm09ImZvcm1fbmFtZSIgY3VycmVudD0iMSIgZnV0dXJlPSIxIiAvPjwvY29k ZT48L2RkPgo8ZHQ+Q3VycmVudCBhbmQgUGFzdDo8L2R0Pgo8ZGQ+PGNvZGU+PCB0eHAgOmpt Y19ldmVudHMgZm9ybT0iZm9ybV9uYW1lIiBjdXJyZW50PSIxIiBwYXN0PSIxIiBmdXR1cmU9 IjAiIC8+PC9jb2RlPjwvZGQ+CjxkdD5DdXJyZW50LCBQYXN0IGFuZCBmdXR1cmU6PC9kdD4K PGRkPjxjb2RlPjwgdHhwIDpqbWNfZXZlbnRzIGZvcm09ImZvcm1fbmFtZSIgY3VycmVudD0i MSIgcGFzdD0iMSIgZnV0dXJlPSIxIiAvPjwvY29kZT48L2RkPgo8ZHQ+VmFsdWVzOjwvZHQ+ CjxkZD4KPHByZT4wfDE8L3ByZT4KPC9kZD4KPGR0PkRlZmF1bHQ6PC9kdD4KPGRkPgo8cHJl PjE8L3ByZT4KPC9kZD4KPC9kbD4KPGg0PmNhdGVnb3J5X2lkPC9oND4KPHA+VXNlZCB0byBy ZXN0cmljdCB0aGUgZXZlbnRzIHRvIHRob3NlIG9mIGEgcGFydGljdWxhciBjYXRlZ29yeSBv ciBjYXRlZ29yaWVzLjwvcD4KPHA+RXhhbXBsZSB1c2FnZTo8L3A+CjxkbD4KPGR0PlNpbmds ZSBjYXRlZ29yeSAod2hlcmUgY2F0ZWdvcnkmIzgyMTc7cyBJRD0yKTo8L2R0Pgo8ZGQ+PGNv ZGU+PCB0eHAgOmptY19ldmVudHMgZm9ybT0iZm9ybV9uYW1lIiBjYXRlZ29yeV9pZD0iMiIg Lz48L2NvZGU+PC9kZD4KPGR0Pk11bHRpcGxlIGNhdGVnb3JpZXMgKHdoZXJlIGNhdGVnb3J5 JiM4MjE3O3MgSUQgaXMgaW4gYXJyYXkoMiw0KSk6PC9kdD4KPGRkPjxjb2RlPjwgdHhwIDpq bWNfZXZlbnRzIGZvcm09ImZvcm1fbmFtZSIgY2F0ZWdvcnlfaWQ9IjIsNCIgLz48L2NvZGU+ PC9kZD4KPGR0PlZhbHVlczo8L2R0Pgo8ZGQ+CjxwcmU+VmFsaWQgSUQgZnJvbSB0eHBfam1j X2V2ZW50X2NhdGVnb3J5PC9wcmU+CjwvZGQ+CjxkdD5EZWZhdWx0OjwvZHQ+CjxkZD4KPHBy ZT5OVUxMPC9wcmU+CjwvZGQ+CjwvZGw+CjxoND52ZW51ZV9pZDwvaDQ+CjxwPlVzZWQgdG8g cmVzdHJpY3QgdGhlIGV2ZW50cyB0byB0aG9zZSB0aGF0IHdpbGwgb2NjdXIgYXQgYSBzcGVj aWZpZWQgdmVudWUgb3IgdmVudWVzLjwvcD4KPHA+RXhhbXBsZSB1c2FnZTo8L3A+CjxkbD4K PGR0PlNpbmdsZSB2ZW51ZSAod2hlcmUgdmVudWXigJlzIElEPTIpOjwvZHQ+CjxkZD48Y29k ZT48IHR4cCA6am1jX2V2ZW50cyBmb3JtPSJmb3JtX25hbWUiIHZlbnVlX2lkPSIyIiAvPjwv Y29kZT48L2RkPgo8ZHQ+TXVsdGlwbGUgdmVudWVzICh3aGVyZSB2ZW51ZeKAmXMgSUQgaXMg aW4gYXJyYXkoMiw0KSk6PC9kdD4KPGRkPjxjb2RlPjwgdHhwIDpqbWNfZXZlbnRzIGZvcm09 ImZvcm1fbmFtZSIgdmVudWVfaWQ9IjIsNCIgLz48L2NvZGU+PC9kZD4KPGR0PlZhbHVlczo8 L2R0Pgo8ZGQ+CjxwcmU+VmFsaWQgSUQgZnJvbSB0eHBfam1jX2V2ZW50X3ZlbnVlPC9wcmU+ CjwvZGQ+CjxkdD5EZWZhdWx0OjwvZHQ+CjxkZD4KPHByZT5OVUxMPC9wcmU+CjwvZGQ+Cjwv ZGw+CjxoND5ldmVudF9pZDwvaDQ+CjxwPlVzZWQgdG8gcmVzdHJpY3QgdGhlIGV2ZW50cyB0 byBhIHBhcnRpY3VsYXIgZXZlbnQgb3IgZ3JvdXAgb2YgZXZlbnRzLiBQbGVhc2Ugbm90ZSB0 aGF0IHRoaXMgb3ZlcnJpZGVzIDxzdHJvbmc+YWxsPC9zdHJvbmc+IG90aGVyIHZhcmlhYmxl cyE8L3A+CjxwPkV4YW1wbGUgdXNhZ2U6PC9wPgo8ZGw+CjxkdD5TaW5nbGUgZXZlbnQgKHdo ZXJlIGV2ZW504oCZcyBJRD0yKTo8L2R0Pgo8ZGQ+PGNvZGU+PCB0eHAgOmptY19ldmVudHMg Zm9ybT0iZm9ybV9uYW1lIiBldmVudF9pZD0iMiIgLz48L2NvZGU+PC9kZD4KPGR0Pk11bHRp cGxlIGV2ZW50cyAod2hlcmUgZXZlbnTigJlzIElEIGlzIGluIGFycmF5KDIsNCkpOjwvZHQ+ CjxkZD48Y29kZT48IHR4cCA6am1jX2V2ZW50cyBmb3JtPSJmb3JtX25hbWUiIGV2ZW50X2lk PSIyLDQiIC8+PC9jb2RlPjwvZGQ+CjxkdD5WYWx1ZXM6PC9kdD4KPGRkPgo8cHJlPlZhbGlk IElEIGZyb20gdHhwX2ptY19ldmVudDwvcHJlPgo8L2RkPgo8ZHQ+RGVmYXVsdDo8L2R0Pgo8 ZGQ+CjxwcmU+TlVMTDwvcHJlPgo8L2RkPgo8L2RsPgo8aDQ+c29ydF9ieTwvaDQ+CjxwPlB1 dHMgaW4gcGxhY2UgdGhlIE15U1FMIHNvcnQgYnkgYSB2YXJpYWJsZSBuYW1lLiBVc2VkIGlu IGNvbmp1bmN0aW9uIHdpdGggc29ydF9vcmRlci48L3A+CjxkbD4KPGR0PlZhbHVlczo8L2R0 Pgo8ZGQ+CjxwcmU+SUQgfCBuYW1lIHwgc3RhcnRfRGF0ZVRpbWUgfCBmaW5pc2hfRGF0ZVRp bWUgfCBBdXRob3JJRCB8IExhc3RNb2RJRCB8IFZlbnVlSUQgfCBQcmljZSB8IE90aGVyQmFu ZHMgfCBPdGhlckJhbmRzX2h0bWwgfCBPdGhlckluZm8gfE90aGVySW5mb19odG1sIHwgQ2F0 ZWdvcnlJRDwvcHJlPgo8L2RkPgo8ZHQ+RGVmYXVsdDo8L2R0Pgo8ZGQ+CjxwcmU+c3RhcnRf RGF0ZVRpbWU8L3ByZT4KPC9kZD4KPC9kbD4KPGg0PnNvcnRfb3JkZXI8L2g0Pgo8cD5EZXRl cm1pbmdzIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZXZlbnRzIHdpbGwgYmUgZGlzcGxheWVk LjwvcD4KPGRsPgo8ZHQ+VmFsdWVzOjwvZHQ+CjxkZD4KPHByZT5hc2N8ZGVzYzwvcHJlPgo8 L2RkPgo8ZHQ+RGVmYXVsdDo8L2R0Pgo8ZGQ+CjxwcmU+YXNjPC9wcmU+CjwvZGQ+CjwvZGw+ CjxoMj5Gb3JtczwvaDI+CjxwPkV2ZW50cyBhbmQgdmVudWVzIGVhY2ggaGF2ZSB0aGVpciBv d24gZm9ybXMgd2l0aCB0aGVpciBvd24gdmFyaWFibGVzLjwvcD4KPGgzPkV2ZW50IEZvcm1z PC9oMz4KPGg0PkV2ZW50IE5hbWU8L2g0Pgo8aDQ+RXZlbnQgSUQ8L2g0Pgo8aDQ+RXZlbnQg UHJpY2U8L2g0Pgo8aDQ+T3RoZXIgQmFuZHM8L2g0Pgo8cD5JbnNlcnRzIHRoZSBodG1sIGZv ciBvdGhlciBiYW5kIGluZm9ybWF0aW9uLjwvcD4KPGg0Pk90aGVyIEluZm9ybWF0aW9uPC9o ND4KPGgzPlZlbnVlIEZvcm1zPC9oMz4KPHA+VmVudWUgZm9ybSBvcHRpb25zIGNhbiBiZSBj YWxsZWQgZWl0aGVyIGZyb20gdGhlIGV2ZW50IGZvcm0gZGlyZWN0bHksIG9yIGZyb20gYSBz ZXBhcmF0ZSBmb3JtIHVzaW5nIHRoZSB0YWc6PC9wPgo8aDQ+VmVudWUgTmFtZTwvaDQ+Cjxo ND5WZW51ZSBJRDwvaDQ+CjxoND5WZW51ZSBBZGRyZXNzIDE8L2g0Pgo8aDQ+VmVudWUgQWRk cmVzcyAyPC9oND4KPGg0PlZlbnVlIFN1YnVyYjwvaDQ+CjxoND5WZW51ZSBTdGF0ZTwvaDQ+ CjxoND5WZW51ZSBDb3VudHJ5PC9oND4KPGg0PlZlbnVlIFBvc3Rjb2RlPC9oND4KPGg0PlZl bnVlIFBob25lPC9oND4KPGg0PlZlbnVlIFVSTDwvaDQ+CjxoND5WZW51ZSBFbWFpbDwvaDQ+ CjxoND5WZW51ZSBPdGhlciBJbmZvcm1hdGlvbjwvaDQ+CjxoMz5Vc2VmdWwgRnVuY3Rpb248 L2gzPgo8cD5JbiBvcmRlciB0byBleGVjdXRlIGEgZmV3IG1vcmUgb3B0aW9ucywgdGhlcmUg aXMgYSByZXF1aXJlbWVudCB0byBtYW5pcHVsYXRlIHRoaW5ncyBzdWNoIGFzIGRhdGVzLjwv cD4KPGg0PkV2ZW50IFRpbWVzPC9oND4KPHA+RXZlbnQgdGltZXMgZ2l2ZSBvdXRwdXQgb2Yg ZWl0aGVyIHRoZSBzdGFydCBvciBmaW5pc2ggZGF0ZSBhbmQgdGltZSBvZiBhbiBldmVudCBh bmQgdXNlcyB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5waHAubmV0L2RhdGV0aW1lIj5QSFAg RGF0ZVRpbWUgZnVuY3Rpb25hbGl0eTwvYT4gZm9yIGZvcm1hdHRpbmcuIDxjb2RlPjwgdHhw IDpqbWNfZXZlbnRfdGltZSBwaHBfZGF0ZT0icGhwRGF0ZUZ1bmN0aW9uIiAvPjwvY29kZT48 L3A+CjxwPk9wdGlvbnM6PC9wPgo8cD48c3Ryb25nPnN0YXJ0PC9zdHJvbmc+IChpZiBzdGFy dD0wIHRoZW4gZ2l2ZXMgZmluaXNoIHRpbWUpPC9wPgo8ZGw+CjxkdD5WYWx1ZXM8L2R0Pgo8 ZGQ+CjxwcmU+MHwxPC9wcmU+CjwvZGQ+CjxkdD5EZWZhdWx0PC9kdD4KPGRkPgo8cHJlPjE8 L3ByZT4KPC9kZD4KPC9kbD4KPGg0PklmIFZhcmlhYmxlPC9oND4KPHA+Q2hlY2tzIHRvIHNl ZSBpZiBhIHZhcmlhYmxlIGV4aXN0cy4gSWYgaXQgZG9lcyBub3QsIHRoZW4gZGVsZXRlcyB3 aGF0IHRoZSB0YWdzIGVuY2xvc2UuPC9wPgo8cCBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQg cmVkOyBtYXJnaW46IDEwcHggNTBweDsgcGFkZGluZzogMTBweDsgYmFja2dyb3VuZDogI2Zm ZWVlZSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyBjb2xvcjogZGFya3JlZDsgLW1vei1i YWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjog LW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0 aWFsIj48c3Ryb25nPldhcm5pbmc8L3N0cm9uZz46IEV4cGVyaW1lbnRhbCAoc3RpbGwsIHNv cnJ5IGd1eXMgbz0pICk8L3A+CjxwPjxjb2RlPjwgdHhwIDpqbWNfaWZfdmFyaWFibGUgdmFy aWFibGU9InZhcmlhYmxlTmFtZSI+PCAvIHR4cCA6am1jX2lmX3ZhcmlhYmxlPjwvY29kZT5P cHRpb25zOjwvcD4KPHA+PHN0cm9uZz52YXJpYWJsZTwvc3Ryb25nPjwvcD4KPGRsPgo8ZHQ+ VmFsdWVzOjwvZHQ+CjxkZD4KPHByZT5hbnkgaW4gdGhlIGRhdGFiYXNlIGZvciBhIHBhcnRp Y3VsYXIgZXZlbnQgb3IgdmVudWU8L3ByZT4KPC9kZD4KPGR0PkRlZmF1bHQ6PC9kdD4KPGRk Pgo8cHJlPk5VTEw8L3ByZT4KPC9kZD4KPC9kbD4KPGgyPkZ1dHVyZSBVcGRhdGVzPC9oMj4K PHA+VGhlIGZvbGxvd2luZyBmdXR1cmUgdXBkYXRlcyBhcmUgYmVpbmcgY29uc2lkZXJlZCBv ciB3b3JrZWQgb246PC9wPgo8dWw+CjxsaT5SU1MgZmVlZCBmb3IgdGhlIEV2ZW50IE1hbmFn ZXIgKG1hbnkgb2YgeW91IHdpbGwgZmluZCB0aGlzIGEgYmlnIGJvbnVzISk8L2xpPgo8bGk+ UHJvcGVyIEFkbWluIFBhbmVsICh0aGlzIHdpbGwgZGVhbCB3aXRoIHNvbWUgdGltZSBpc3N1 ZXMsIHdoZXJlIGN1cnJlbnRseSBoYXZlIGFsbG93ZWQgb25seSAwMCwgMTUsIDMwIGFuZCA0 NSBtaW51dGVzIGZvciB0aGUgdGltZSwgZnV0dXJlIG9wdGlvbnMgd2lsbCBhbGxvdyB0aGUg YWRtaW5pc3RyYXRvcnMgdG8gZGVjaWRlZCBob3cgdGhleSB3YW50IHRoZSBtaW51dGVzIHRv IGJlIGxpbWl0ZWQpLjwvbGk+CjxsaT5WZW51ZSBkcm9wZG93biBhbmQgbGlzdHMgYnkgPGVt PmNvdW50cnk8L2VtPiB0aGVuIDxlbT5zdGF0ZTwvZW0+ICh3aGVyZSBhcHBsaWNhYmxlKS48 L2xpPgo8bGk+RHJvcGRvd24gaW4gQWRkIFZlbnVlIHRvIHVzZSA8ZW0+Y291bnRyeSBjb2Rl czwvZW0+PC9saT4KPGxpPkluc3RhbGwgcGFjayhzKSB3aXRoIE5ldyBTb3V0aCBXYWxlcyBh bmQgVmljdG9yaWFuIGxpdmUgbXVzaWMgdmVudWVzIChJJiM4MjE3O20gYW4gYXVzc2llIGFm dGVyIGFsbCEpLjwvbGk+CjwvdWw+CjxoMj5BZGRpdGlvbmFsIEZlYXR1cmVzIGFuZCBCdWcg Rml4ZXM8L2gyPgo8cD5UaGUgZm9sbG93aW5nIGJ1Z3MgaGF2ZSBiZWVuIGZpeGVkIGFuZCBm ZWF0dXJlcyBhZGRlZDo8L3A+CjxoMz52MC4zIGJldGE8L2gzPgo8dWw+CjxsaT5TcGxpdCBp bnRvIHR3byBwbHVnaW5zOzwvbGk+CjxsaT5XcmFwdGFncywgSUQgYW5kIENsYXNzTmFtZXMg YXZhaWxhYmxlOzwvbGk+CjxsaT5kdHN0YXJ0IGFuZCBkdGVuZCBmb3IgbWljcm9mb3JtYXRz PC9saT4KPC91bD4KPGgzPnYwLjIgYmV0YTwvaDM+Cjx1bD4KPGxpPkNhdGVnb3JpZXM8L2xp Pgo8bGk+Q3VycmVudCBldmVudCBvcHRpb24gZm9yIGNhbGxpbmcgb2Y8L2xpPgo8L3VsPgoi O3M6NDoiY29kZSI7czoxMzg1MzoiLy8gUGx1Z2luIGNvZGUgZ29lcyBoZXJlLiAgTm8gbmVl ZCB0byBlc2NhcGUgcXVvdGVzLgovKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tICovCi8qIEZST05UIEVORCBPVVRQVVQgRlJPTlQgRU5EIE9VVFBVVCBG Uk9OVCBFTkQgT1VUUFVUIEZST05UIEVORCBPVVRQVVQgRlJPTlQgRU5EIE9VVFBVVCBGUk9O VCBFTkQgT1UgKi8KLyogLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLSAqLwoKCS8qIC1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy0gKi8KCS8vIEZ1bmN0aW9uOgkJam1jX2V2ZW50cwoJLy8gVXNlOgkJCQlDcmVh dGVzIHRoZSBvdXRwdXQgZm9yIGZyb250ZW5kCgkvLyBJbnB1dHM6CQkJJGF0dHMJCQlBUlJB WQoJLy8gT3V0cHV0czoJCQlodG1sIHRvIGJlIG91dHB1dAoJLyogXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJZnVuY3Rpb24gam1jX2V2 ZW50cygkYXR0cyA9ICcnKQoJewoJCSMgU2V0IHVwIHRoZSBnbG9iYWwgdmFyaWFibGVzIGZv ciBhbGwgZXZlbnRzLCB2ZW51ZXMgYW5kIGNhdGVnb3JpZXMKCQlnbG9iYWwgJGptY19ldmVu dHMsICRqbWNfdmVudWVzLCAkam1jX2NhdGVnb3JpZXM7CgkJJGptY19ldmVudHMgPSBhcnJh eSgpOwoJCSRqbWNfdmVudWVzID0gYXJyYXkoKTsKCQkkam1jX2NhdGVnb3JpZXMgPSBhcnJh eSgpOwoKCQkjIEF0dHJpYnV0ZSBleHRyYWN0aW9uIC0gb25seSB3aGF0IGlzIG5lZWRlZCB0 aG91Z2gKCQkkYXR0cnMgPSBsQXR0cyhhcnJheSgKCQkJIyBmb3JtCgkJCSdmb3JtJyA9PiBm YWxzZSwKCQkJIyBXaGF0IGRldGFpbHMgYXJlIHRvIGJlIGdhdGhlcmVkIC0gZnV0dXJlLCBj dXJyZW50LCBwYXN0CgkJCSdmdXR1cmUnID0+IHRydWUsCgkJCSdwYXN0JyA9PiBmYWxzZSwK CQkJJ2N1cnJlbnQnID0+IGZhbHNlLAoJCQkjIFNvcnQgZGV0YWlscwoJCQknc29ydF9ieScg PT4gJ3N0YXJ0X0RhdGVUaW1lJywKCQkJJ3NvcnRfb3JkZXInID0+ICdhc2MnLAoJCQknbGlt aXQnID0+ICcnLAoJCQkjIEdldCBwYXJ0aWN1bGFyIHBpZWNlIG9mIGluZm8KCQkJJ2V2ZW50 X2lkJyA9PiAgJycsCgkJCSd2ZW51ZV9pZCcgPT4nJywKCQkJJ2NhdGVnb3J5X2lkJyA9PiAn JywKCQkJIyBXcmFwcGluZwoJCQknd3JhcHRhZycgPT4gJycsCgkJCSdjbGFzcycgPT4gJycK CQkJKSwkYXR0cyk7CgoJCWV4dHJhY3QoJGF0dHJzKTsKCgkJIyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KCQkjIFF1ZXJ5IENyZWF0aW9uCgkJIyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkJIyBTb3J0IGRpcmVjdGlvbiBhbmQgd2hlcmUgY2xh dXNzZXMKCQlpZigkZnV0dXJlICYmICRwYXN0KXsKCQkJJHNxbF93aGVyZSA9ICIiOwoJCX1l bHNlIGlmICghJGZ1dHVyZSAmJiAhJHBhc3QgJiYgISRjdXJyZW50KXsKCQkJcmV0dXJuICc8 dHhwOm5vdGljZSBtZXNzYWdlPSJtYWxmb3JtZWQgZXZlbnRzIHRhZyIgLz4nOwoJCX1lbHNl IGlmICgkY3VycmVudCl7CgkJCWlmKCRmdXR1cmUgfHwgJHBhc3QpCgkJCQkkc3FsX3doZXJl ID0gIigodW5peF90aW1lc3RhbXAoc3RhcnRfRGF0ZVRpbWUpPCIudGltZSgpLiIgQU5EIHVu aXhfdGltZXN0YW1wKGZpbmlzaF9EYXRlVGltZSk+Ii50aW1lKCkuIikgT1IgIi4idW5peF90 aW1lc3RhbXAoc3RhcnRfRGF0ZVRpbWUpIi4oJGZ1dHVyZT8iPiI6IjwiKS50aW1lKCkuIikg IjsKCQkJZWxzZQoJCQkJJHNxbF93aGVyZSA9ICJ1bml4X3RpbWVzdGFtcChzdGFydF9EYXRl VGltZSk8Ii50aW1lKCkuIiBBTkQgdW5peF90aW1lc3RhbXAoZmluaXNoX0RhdGVUaW1lKT4i LnRpbWUoKS4iICI7CgkJfWVsc2V7CgkJCSRzcWxfd2hlcmUgPSAidW5peF90aW1lc3RhbXAo c3RhcnRfRGF0ZVRpbWUpIi4oJGZ1dHVyZT8iPiI6IjwiKS50aW1lKCkuIiAiOwoJCX0KCgkJ IyBMaW1pdCBjaGVjawoJCSRzb3J0X2xpbWl0ID0gKCRsaW1pdD8ibGltaXQgJGxpbWl0Ijoi Iik7CgoJCSMgTGltaXQgdG8gYSBwYXJ0aWN1bGFyIFZlbnVlIFthcnJheV0KCQlpZigkdmVu dWVfaWQgIT0gJycpewoJCQlpZiAoJHNxbF93aGVyZSAhPSAiIikKCQkJCSRzcWxfd2hlcmUg Lj0gIiBBTkQgVmVudWVJRCBJTiAoIi5kb1NsYXNoKCR2ZW51ZV9pZCkuIikgIjsKCQkJZWxz ZQoJCQkJJHNxbF93aGVyZSAuPSAiIFZlbnVlSUQgSU4gKCIuZG9TbGFzaCgkdmVudWVfaWQp LiIpICI7CgkJfQoKCQkjIExpbWl0IHRvIGEgcGFydGljdWxhciBDYXRlZ29yeSBbYXJyYXld CgkJaWYoJGNhdGVnb3J5X2lkICE9ICcnKXsKCQkJaWYoKCR2ZW51ZV9pZCAhPSAnJykgT1Ig KCRzcWxfd2hlcmUgIT0gIiIpKQoJCQkJJHNxbF93aGVyZSAuPSAiIEFORCBDYXRlZ29yeUlE IElOICgiLmRvU2xhc2goJGNhdGVnb3J5X2lkKS4iKSAiOwoJCQllbHNlCgkJCQkkc3FsX3do ZXJlIC49ICIgQ2F0ZWdvcnlJRCBJTiAoIi5kb1NsYXNoKCRjYXRlZ29yeV9pZCkuIikgIjsK CQl9CgoJCSMgTGltaXQgdG8gYSBwYXJ0aWN1bGFyIEV2ZW50KHMpIFtpZF0gT1IgZ2V0IGFs bCB3aXRoIGFib3ZlIGNsYXVzZXMKCQlpZigkZXZlbnRfaWQgIT0gJycpewoJCQkkZXZlbnRf aWQgPSBkb1NsYXNoKCRldmVudF9pZCk7CgkJCSR0bXBzID0gc2FmZV9yb3dzKAoJCQkJIios IHVuaXhfdGltZXN0YW1wKHN0YXJ0X0RhdGVUaW1lKSBhcyB1U3RhcnQsIHVuaXhfdGltZXN0 YW1wKGZpbmlzaF9EYXRlVGltZSkgYXMgdUZpbmlzaCIsCgkJCQkidHhwX2ptY19ldmVudCIs CgkJCQkiaWQgSU4gKCRldmVudF9pZCkiCgkJCSk7CgkJCSMgU2F2ZSBpbnRvIEdMT0JBTCAk am1jX2V2ZW50cwoJCQlmb3JlYWNoKCR0bXBzIGFzICR0bXApewoJCQkJJGptY19ldmVudHNb JHRtcFsnSUQnXV0gPSAkdG1wOwoJCQl9CgkJCSRycyA9IHNhZmVfcm93c19zdGFydCgiKiIs ICJ0eHBfam1jX2V2ZW50IiwgImlkIElOICgkZXZlbnRfaWQpIik7CgkJfWVsc2V7CgkJCSRz cWxfd2hlcmUgPSAoJHNxbF93aGVyZT8kc3FsX3doZXJlOiJJRCIpOwoJCQkkdG1wcyA9IHNh ZmVfcm93cygKCQkJCSIqLCB1bml4X3RpbWVzdGFtcChzdGFydF9EYXRlVGltZSkgYXMgdVN0 YXJ0LCB1bml4X3RpbWVzdGFtcChmaW5pc2hfRGF0ZVRpbWUpIGFzIHVGaW5pc2giLAoJCQkJ InR4cF9qbWNfZXZlbnQiLAoJCQkJIiRzcWxfd2hlcmUgT1JERVIgQlkgJHNvcnRfYnkgJHNv cnRfb3JkZXIgJHNvcnRfbGltaXQiCgkJCSk7CgkJCSMgU2F2ZSBpbnRvIEdMT0JBTCAkam1j X2V2ZW50cwoJCQlmb3JlYWNoKCR0bXBzIGFzICR0bXApewoJCQkJJGptY19ldmVudHNbJHRt cFsnSUQnXV0gPSAkdG1wOwoJCQl9CgkJCSRycyA9IHNhZmVfcm93c19zdGFydCgKCQkJCSIq LCB1bml4X3RpbWVzdGFtcChzdGFydF9EYXRlVGltZSkgYXMgdVN0YXJ0LCB1bml4X3RpbWVz dGFtcChmaW5pc2hfRGF0ZVRpbWUpIGFzIHVGaW5pc2giLAoJCQkJInR4cF9qbWNfZXZlbnQi LAoJCQkJIiRzcWxfd2hlcmUgT1JERVIgQlkgJHNvcnRfYnkgJHNvcnRfb3JkZXIgJHNvcnRf bGltaXQiCgkJCSk7CgkJfQoKCQkjIENyZWF0ZSBHTE9CQUwgJGptY192ZW51ZXMgdmVudWUg YXJyYXkKCQkkdG1wcyA9IHNhZmVfcm93cygKCQkJIioiLAoJCQkidHhwX2ptY19ldmVudF92 ZW51ZSIsCgkJCSJJRCBPUkRFUiBCWSBJRCBBU0MiCgkJKTsKCQlmb3JlYWNoKCR0bXBzIGFz ICR0bXApewoJCQkkam1jX3ZlbnVlc1skdG1wWydJRCddXSA9ICR0bXA7CgkJfQoKCQkjIENy ZWF0ZSBHTE9CQUwgJGptY19jYXRlZ29yaWVzIGNhdGVnb3J5IGFycmF5CgkJJHRtcHMgPSBz YWZlX3Jvd3MoCgkJCSIqIiwKCQkJInR4cF9qbWNfZXZlbnRfY2F0ZWdvcnkiLAoJCQkiSUQg T1JERVIgQlkgSUQgQVNDIgoJCSk7CgkJZm9yZWFjaCgkdG1wcyBhcyAkdG1wKXsKCQkJJGpt Y19jYXRlZ29yaWVzWyR0bXBbJ0lEJ11dID0gJHRtcDsKCQl9CgoJCSMgUnVuIHRoZSBmb3Jt IGRldGFpbHMgdG8gcGFyc2UgdGFncyBldGMKCQlpZigkam1jX2V2ZW50cykKCQl7CgkJCWlm KCRmb3JtKQoJCQkJcmV0dXJuIGptY19ldmVudF9mb3JtKCRhdHRycyk7CgkJCWVsc2UKCQkJ CXJldHVybiBqbWNfZXZlbnRfZGVmYXVsdCgkYXR0cnMpOwoJCX0KCX0KCgkvKiAtXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tICovCgkvLyBGdW5j dGlvbjoJCWptY19ldmVudF9kZWZhdWx0CgkvLyBVc2U6CQkJCUNyZWF0ZXMgdGhlIG91dHB1 dCBmb3IgZnJvbnRlbmQKCS8vIElucHV0czoJCQkkcnMJCQlGaXJzdCByb3cgZnJvbSBEQgoJ Ly8JCQkJCSRmb3JtX25hbWUJTmFtZSBvZiBmb3JtIHRvIHVzZQoJLy8gT3V0cHV0czoJCQlo dG1sIHRvIGJlIG91dHB1dAoJLy8gTm90ZToJCQlGdXR1cmUgaW1wbGVtZW50YXRpb25zIHdp bGwgdXNlCgkvLwkJCQl0aGlzIGFzIHRoZSBkZWZhdWx0IG1pY3JvZm9ybWF0IGZvcm0uCgkv KiBfLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICov CglmdW5jdGlvbiBqbWNfZXZlbnRfZGVmYXVsdCgkYXR0cnMpCgl7CgkJIyBTZXQgdXAgdGhl IGdsb2JhbCB2YXJpYWJsZXMgZm9yIGFsbCBldmVudHMsIHZlbnVlcyBhbmQgY2F0ZWdvcmll cwoJCWdsb2JhbCAkam1jX2V2ZW50cywgJGptY192ZW51ZXMsICRqbWNfY2F0ZWdvcmllczsK CgkJIyBTZXR1cCB0aGUgZ2xvYmFsIGRldGFpbHMgZm9yIGEgZmV3IG90aGVyIHRoaW5ncy4u LgoJCWdsb2JhbCAkaW1nX2RpciwgJGV2ZW50X3NlYXJjaCwgJHZlbnVlX3NlYXJjaCwgJHZl bnVlX2ltYWdlX3NlYXJjaDsKCgkJIyBHcmFiIGFsbCB0aGUgYXR0cnMgZnJvbSBwcmV2aW91 cwoJCWV4dHJhY3QoJGF0dHJzKTsKCgkJJGZvcm0gPSA8PDxFT0YKCQkJPHA+RGVmYXVsdCBm b3JtIGJhc2VkIG9uIDxhIGhyZWY9Imh0dHA6Ly9taWNyb2Zvcm1hdHMuY29tIj5taWNyb2Zv cm1hdHM8L2E+IGhDYXJkIGFuZCBoQ2FsIHRvIGNvbWUuPC9wPgpFT0Y7CgoJCWlmKCRmb3Jt KQoJCXsKCQkJIyBTdGFydCB0aGUgb3V0cHV0IC0gcmVtZW1iZXIgd2UnbGwgaGF2ZSB0byB3 cmFwIGl0IHRvby4uLgoJCQkkb3V0cHV0ID0gIiI7CgkJCSMgQ291bnRlciAtIHVzZWQgZm9y IGV2ZW4vb2RkIDpECgkJCSRjb3VudGVyID0gMDsKCQkJJGNvdW50ZXJfY2xhc3MgPSBhcnJh eSgiZXZlbiIsICJvZGQiKTsKCgkJCSMgR28gdGhyb3VnaCBlYWNoIGV2ZW50IGluIHRoZSAk am1jX2V2ZW50cyBhcnJheQoJCQlmb3JlYWNoKCRqbWNfZXZlbnRzIGFzICRldmVudCkKCQkJ ewoJCQkJJHRlbXAgPSAkZm9ybTsKCgkJCQkjIFJlcGxhY2UgdGhlIHZhcmlvdXMgY29tcG9u ZW50cwoJCQkJJHRlbXAgPSBwcmVnX3JlcGxhY2UoJy8oPHR4cDpqbWNfZXZlbl9vZGQgXC8+ KS8nLCAkY291bnRlcl9jbGFzc1skY291bnRlciUyXSwgJHRlbXApOwoJCQkJJHRlbXAgPSBw cmVnX3JlcGxhY2UoJy8oPHR4cDpqbWNfdmVudWUpLycsIHBhcnNlKCdcXDEgaWQ9IicuJGV2 ZW50WydJRCddLiciIFxcMicpLCAkdGVtcCk7CgkJCQkkdGVtcCA9IHByZWdfcmVwbGFjZSgn Lyg8dHhwOmptY19ldmVudF8pKFthLXpdKikvJywgJ1xcMSBpZD0iJy4kZXZlbnRbJ0lEJ10u JyIgZWxlbWVudD0iXFwyIicsICR0ZW1wKTsKCQkJCSR0ZW1wID0gcHJlZ19yZXBsYWNlKCcv KDx0eHA6am1jX3ZlbnVlXykoW2EtejAtOV0qKS8nLCAnXFwxIGlkPSInLiRldmVudFsnSUQn XS4nIiBlbGVtZW50PSJcXDIiJywgJHRlbXApOwoJCQkJJGNvdW50ZXIrKzsKCgkJCQkjIEZv ciB0aGUgdGltZXMgYW5kIGRhdGVzLCB3ZSdsbCBuZWVkIHRvIHBhcnNlIHRoaXMuLi4KCQkJ CSMgYW5kIGFnYWluIGJlY2F1c2Ugb2YgdGhlIHZlbnVlIGZvcm0gOlwKCQkJCSR0ZW1wID0g cGFyc2UoJHRlbXApOwoKCQkJCSRvdXRwdXQgLj0gJHRlbXA7CgkJCX0KCQkJaWYoJHdyYXB0 YWcgJiYgJGptY19ldmVudHMpCgkJCQlyZXR1cm4gIjwkd3JhcHRhZyIuKCRjbGFzcz8iIGNs YXNzPVwiJGNsYXNzXCIiOiIiKS4oJHRpdGxlPyIgdGl0bGU9XCIkdGl0bGVcIiI6IiIpLiI+ Ii4kb3V0cHV0LiI8LyR3cmFwdGFnPiI7CgkJCWVsc2UKCQkJCXJldHVybiAkb3V0cHV0OwoJ CX0KCQllbHNlCgkJewoJCQlyZXR1cm4gJzx0eHA6bm90aWNlIG1lc3NhZ2U9Im1hbGZvcm1l ZCBldmVudCB0YWcgLSBmb3JtIGRvZXNuXCd0IGV4aXN0IiAvPic7CgkJfQoJfQoKCS8qIC1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy0gKi8KCS8v IEZ1bmN0aW9uOgkJam1jX2V2ZW50X2Zvcm0KCS8vIFVzZToJCQkJQ3JlYXRlcyB0aGUgb3V0 cHV0IGZvciBhbiBldmVudCBmb3JtCgkvLyBJbnB1dHM6CQkJJHJzCQkJRmlyc3Qgcm93IGZy b20gREIKCS8vCQkJCQkkZm9ybV9uYW1lCU5hbWUgb2YgZm9ybSB0byB1c2UKCS8vIE91dHB1 dHM6CQkJaHRtbCB0byBiZSBvdXRwdXQKCS8vIE5vdGU6CQkJRnV0dXJlIGltcGxlbWVudGF0 aW9ucyB3aWxsIHVzZQoJLy8JCQkJdGhpcyBhcyB0aGUgZGVmYXVsdCBtaWNyb2Zvcm1hdCBm b3JtLgoJLyogXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXyAqLwoJZnVuY3Rpb24gam1jX2V2ZW50X2Zvcm0oJGF0dHJzKQoJewoJCSMgU2V0IHVw IHRoZSBnbG9iYWwgdmFyaWFibGVzIGZvciBhbGwgZXZlbnRzLCB2ZW51ZXMgYW5kIGNhdGVn b3JpZXMKCQlnbG9iYWwgJGptY19ldmVudHMsICRqbWNfdmVudWVzLCAkam1jX2NhdGVnb3Jp ZXM7CgoJCSMgU2V0dXAgdGhlIGdsb2JhbCBkZXRhaWxzIGZvciBhIGZldyBvdGhlciB0aGlu Z3MuLi4KCQlnbG9iYWwgJGltZ19kaXIsICRldmVudF9zZWFyY2gsICR2ZW51ZV9zZWFyY2gs ICR2ZW51ZV9pbWFnZV9zZWFyY2g7CgoJCSMgR3JhYiBhbGwgdGhlIGF0dHJzIGZyb20gcHJl dmlvdXMKCQlleHRyYWN0KCRhdHRycyk7CgoJCSMgVGlkeSB1cCB0aGUgZm9ybSBuYW1lICsg cmV0cmVpdmUgaXQgZnJvbSB0aGUgZGF0YWJhc2UKCQkkZm9ybV9uYW1lID0gZG9TbGFzaCgk Zm9ybSk7CgkJJGZvcm0gPSBzYWZlX2ZpZWxkKCJGb3JtIiwgInR4cF9mb3JtIiwgIm5hbWUg PSAnJGZvcm1fbmFtZSciKTsKCgkJIyBVc2UgaXQgaWYgd2UndmUgZ290IGEgZm9ybSB0aGF0 IG1hdGNoZXMsIG90aGVyd2lzZSByZXR1cm4gZXJyb3IgbWVzc2FnZQoJCWlmKCRmb3JtKQoJ CXsKCQkJIyBTdGFydCB0aGUgb3V0cHV0IC0gcmVtZW1iZXIgd2UnbGwgaGF2ZSB0byB3cmFw IGl0IHRvby4uLgoJCQkkb3V0cHV0ID0gIiI7CgkJCSMgQ291bnRlciAtIHVzZWQgZm9yIGV2 ZW4vb2RkIDpECgkJCSRjb3VudGVyID0gMDsKCQkJJGNvdW50ZXJfY2xhc3MgPSBhcnJheSgi ZXZlbiIsICJvZGQiKTsKCgkJCSMgR28gdGhyb3VnaCBlYWNoIGV2ZW50IGluIHRoZSAkam1j X2V2ZW50cyBhcnJheQoJCQlmb3JlYWNoKCRqbWNfZXZlbnRzIGFzICRldmVudCkKCQkJewoJ CQkJJHRlbXAgPSAkZm9ybTsKCgkJCQkjIFJlcGxhY2UgdGhlIHZhcmlvdXMgY29tcG9uZW50 cwoJCQkJJHRlbXAgPSBwcmVnX3JlcGxhY2UoJy8oPHR4cDpqbWNfZXZlbl9vZGQgXC8+KS8n LCAkY291bnRlcl9jbGFzc1skY291bnRlciUyXSwgJHRlbXApOwoJCQkJJHRlbXAgPSBwcmVn X3JlcGxhY2UoJy8oPHR4cDpqbWNfdmVudWUpLycsIHBhcnNlKCdcXDEgaWQ9IicuJGV2ZW50 WydJRCddLiciIFxcMicpLCAkdGVtcCk7CgkJCQkkdGVtcCA9IHByZWdfcmVwbGFjZSgnLyg8 dHhwOmptY19ldmVudF8pKFthLXpdKikvJywgJ1xcMSBpZD0iJy4kZXZlbnRbJ0lEJ10uJyIg ZWxlbWVudD0iXFwyIicsICR0ZW1wKTsKCQkJCSR0ZW1wID0gcHJlZ19yZXBsYWNlKCcvKDx0 eHA6am1jX3ZlbnVlXykoW2EtejAtOV0qKS8nLCAnXFwxIGlkPSInLiRldmVudFsnSUQnXS4n IiBlbGVtZW50PSJcXDIiJywgJHRlbXApOwoJCQkJJGNvdW50ZXIrKzsKCgkJCQkjIEZvciB0 aGUgdGltZXMgYW5kIGRhdGVzLCB3ZSdsbCBuZWVkIHRvIHBhcnNlIHRoaXMuLi4KCQkJCSMg YW5kIGFnYWluIGJlY2F1c2Ugb2YgdGhlIHZlbnVlIGZvcm0gOlwKCQkJCSR0ZW1wID0gcGFy c2UoJHRlbXApOwoJCQkJJHRlbXAgPSBwYXJzZSgkdGVtcCk7CgoJCQkJJG91dHB1dCAuPSAk dGVtcDsKCQkJfQoJCQlpZigkd3JhcHRhZyAmJiAkam1jX2V2ZW50cykKCQkJCXJldHVybiAi PCR3cmFwdGFnIi4oJGNsYXNzPyIgY2xhc3M9XCIkY2xhc3NcIiI6IiIpLigkdGl0bGU/IiB0 aXRsZT1cIiR0aXRsZVwiIjoiIikuIj4iLiRvdXRwdXQuIjwvJHdyYXB0YWc+IjsKCQkJZWxz ZQoJCQkJcmV0dXJuICRvdXRwdXQ7CgkJfQoJCWVsc2UKCQl7CgkJCXJldHVybiAnPHR4cDpu b3RpY2UgbWVzc2FnZT0ibWFsZm9ybWVkIGV2ZW50IHRhZyAtIGZvcm0gZG9lc25cJ3QgZXhp c3QiIC8+JzsKCQl9Cgl9CgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tICovCgkvLyBGdW5jdGlvbjoJCWptY192ZW51ZQoJLy8gVXNlOgkJ CQlDcmVhdGVzIHRoZSBvdXRwdXQgZm9yIGZyb250ZW5kCgkvLyBJbnB1dHM6CQkJJGF0dHMJ CUFSUkFZCgkvLwkJCQkJJHRoaW5nCQk/CgkvLyBPdXRwdXRzOgkJCWh0bWwgdG8gYmUgb3V0 cHV0CgkvLyBOb3RlOgkJCUZ1dHVyZSBpbXBsZW1lbnRhdGlvbnMgd2lsbCB1c2UKCS8vCQkJ CXRoaXMgYXMgdGhlIGRlZmF1bHQgbWljcm9mb3JtYXQgZm9ybS4KCS8qIF8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8gKi8KCWZ1bmN0aW9uIGpt Y192ZW51ZSgkYXR0cywgJHRoaW5nID0gJycpCgl7CgkJIyBTZXQgdXAgdGhlIGdsb2JhbCB2 YXJpYWJsZXMgZm9yIGFsbCBldmVudHMsIHZlbnVlcyBhbmQgY2F0ZWdvcmllcwoJCWdsb2Jh bCAkam1jX2V2ZW50cywgJGptY192ZW51ZXMsICRqbWNfY2F0ZWdvcmllczsKCgkJJGF0dHJz ID0gbEF0dHMoYXJyYXkoCgkJCSdpZCcgPT4nJywKCQkJJ2Zvcm0nID0+IGZhbHNlLAoJCQkn d3JhcHRhZycgPT4gJycsCgkJCSdjbGFzcycgPT4gJycsCgkJCSd0aXRsZScgPT4gJycKCQkJ KSwkYXR0cyk7CgkJZXh0cmFjdCgkYXR0cnMpOwoKCQlpZigkZm9ybSAmJiAkdGVtcCA9IHNh ZmVfZmllbGQoIkZvcm0iLCAidHhwX2Zvcm0iLCAibmFtZSA9ICckZm9ybSciKSkKCQl7CgkJ CSR0ZW1wID0gcHJlZ19yZXBsYWNlKCcvKDx0eHA6am1jX3ZlbnVlXykoW2EtejAtOV0qKS8n LCAnXFwxIGlkPSInLiRpZC4nIiBlbGVtZW50PSJcXDIiJywgJHRlbXApOwoJCQlyZXR1cm4g JHRlbXA7CgkJfQoJCWVsc2UKCQl7CgkJCXJldHVybiAnVG8gYmUgZG9uZSAtIHZDYXJkIHN0 eWxlcyc7CgkJfQoJfQoKCS8qIC1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy0gKi8KCS8qCUZ1bmN0aW9uOgkJam1jX2V2ZW50XwoJLyoJVXNlOgkJ CQlSZXR1cm5zIHdyYXBwZWQgZXZlbnQgZGV0YWlscwoJLyogXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJZnVuY3Rpb24gam1jX2V2ZW50 XygkYXR0cyl7CgkJIyBTZXQgdXAgdGhlIGdsb2JhbCB2YXJpYWJsZXMgZm9yIGFsbCBldmVu dHMsIHZlbnVlcyBhbmQgY2F0ZWdvcmllcwoJCWdsb2JhbCAkam1jX2V2ZW50cywgJGptY19j YXRlZ29yaWVzLCAkam1jX2F0dHJzOwoKCQkkYXR0cnMgPSBsQXR0cygkam1jX2F0dHJzWydq bWNfZXZlbnRfJ10sJGF0dHMpOwoJCWV4dHJhY3QoJGF0dHJzKTsKCgkJJGptY19ldmVudF8g PSAkam1jX2V2ZW50c1skaWRdOwoKCQkjIENvbnZlcnNpb24gZm9yIERCIFNjaGVtZSBET0gh CgkJc3dpdGNoKCRlbGVtZW50KXsKCQkJY2FzZSAnaWQnOgoJCQkJJGUgPSAnSUQnOwoJCQkJ YnJlYWs7CgkJCWNhc2UgJ3ByaWNlJzoKCQkJCSRlID0gJ1ByaWNlJzsKCQkJCWJyZWFrOwoJ CQljYXNlICdvdGhlcmJhbmRzJzoKCQkJCSRlID0gJ090aGVyQmFuZHMnOwoJCQkJYnJlYWs7 CgkJCWNhc2UgJ290aGVyaW5mbyc6CgkJCQkkZSA9ICdPdGhlckluZm8nOwoJCQkJYnJlYWs7 CgkJCWNhc2UgJ3RpbWUnOgoJCQkJJGUgPSAoJHN0YXJ0Pyd1U3RhcnQnOid1RmluaXNoJyk7 CgkJCQkkaXNvID0gZGF0ZSgiWW1kIiwgJGptY19ldmVudF9bJGVdICsgdHpfb2Zmc2V0KCkp LiJUIi5kYXRlKCJIaSIsICRqbWNfZXZlbnRfWyRlXSArIHR6X29mZnNldCgpKTsKCQkJCSRp c28gLj0gKGRhdGUoIloiLCAkam1jX2V2ZW50X1skZV0gKyB0el9vZmZzZXQoKSk+PTA/Iisi OiIiKS5mbG9vcihkYXRlKCJaIiwgJGptY19ldmVudF9bJGVdICsgdHpfb2Zmc2V0KCkpLzM2 MDApOwoJCQkJJG1pbiA9IGZsb29yKChkYXRlKCJaIiwgJGptY19ldmVudF9bJGVdICsgdHpf b2Zmc2V0KCkpJTM2MDApLzYwKTsKCQkJCSRtaW4gPSAoc3RybGVuKCRtaW4pPT0xPyRtaW4u IjAiOiRtaW4pOwoJCQkJJGlzbyAuPSAkbWluOwoJCQkJYnJlYWs7CgkJCWRlZmF1bHQ6CgkJ CQkkZSA9ICduYW1lJzsKCQl9CgoJCXN3aXRjaCgkZWxlbWVudCl7CgkJCWNhc2UgJ2NhdGVn b3J5JzoKCQkJCSR2YWx1ZSA9ICgkbmFtZT8kam1jX2NhdGVnb3JpZXNbJGptY19ldmVudF9b J0NhdGVnb3J5SUQnXV1bJ25hbWUnXTokam1jX2NhdGVnb3JpZXNbJGptY19ldmVudF9bJ0Nh dGVnb3J5SUQnXV1bJ2lkJ10pOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ3RpbWUnOgoJCQkJJHZh bHVlID0gZGF0ZSgkcGhwX2RhdGUsICRqbWNfZXZlbnRfWyRlXSArIHR6X29mZnNldCgpKTsK CQkJCWlmKCR3cmFwdGFnICYmICRqbWNfZXZlbnRzWyRpZF1bJGVdKQoJCQkJCXJldHVybiAi PCR3cmFwdGFnICIuKCRzdGFydCA9PSAnMSc/ImNsYXNzPVwiZHRzdGFydCI6ImNsYXNzPVwi ZHRlbmQiKS4oJGNsYXNzPyIgJGNsYXNzXCIiOiJcIiIpLigiIHRpdGxlPVwiJGlzb1wiIiku Ij4iLiR2YWx1ZS4iPC8kd3JhcHRhZz4iOwoJCQkJZWxzZQoJCQkJCXJldHVybiAkdmFsdWU7 CgkJCQlicmVhazsKCQkJY2FzZSAnb3RoZXJiYW5kcyc6CgkJCQkkdmFsdWUgPSAoJGptY19l dmVudF9bJGVdPyRqbWNfZXZlbnRfWydPdGhlckJhbmRzX2h0bWwnXToiIik7CgkJCQlicmVh azsKCQkJY2FzZSAnb3RoZXJpbmZvJzoKCQkJCSR2YWx1ZSA9ICgkam1jX2V2ZW50X1skZV0/ JGptY19ldmVudF9bJ090aGVySW5mb19odG1sJ106IiIpOwoJCQkJYnJlYWs7CgkJCWRlZmF1 bHQ6CgkJCQkkdmFsdWUgPSAkam1jX2V2ZW50X1skZV07CgkJCQlicmVhazsKCQl9CgkJaWYo JHdyYXB0YWcgJiYgKHN0cmxlbigkdmFsdWUpID4gMCkpCgkJCXJldHVybiAiPCR3cmFwdGFn Ii4oJGNsYXNzPyIgY2xhc3M9XCIkY2xhc3NcIiI6IiIpLigkdGl0bGU/IiB0aXRsZT1cIiR0 aXRsZVwiIjoiIikuIj4iLiR2YWx1ZS4iPC8kd3JhcHRhZz4iOwoJCWVsc2UKCQkJcmV0dXJu ICR2YWx1ZTsKCX0KCgoJLyogLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLSAqLwoJLyoJRnVuY3Rpb246CQlqbWNfdmVudWVfCgkvKglVc2U6CQkJ CVJldHVybnMgd3JhcHBlZCB2ZW51ZSBkZXRhaWxzCgkvKiBfLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICovCglmdW5jdGlvbiBqbWNfdmVudWVf KCRhdHRzKXsKCQkjIFNldCB1cCB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgYWxsIGV2ZW50 cywgdmVudWVzIGFuZCBjYXRlZ29yaWVzCgkJZ2xvYmFsICRqbWNfZXZlbnRzLCAkam1jX3Zl bnVlcywgJGptY19jYXRlZ29yaWVzLCAkam1jX2F0dHJzOwoKCQkkYXR0cnMgPSBsQXR0cygk am1jX2F0dHJzWydqbWNfdmVudWVfJ10sJGF0dHMpOwoJCWV4dHJhY3QoJGF0dHJzKTsKCgkJ JGptY19ldmVudF8gPSAkam1jX2V2ZW50c1skaWRdOwoJCSRqbWNfdmVudWVfID0gJGptY192 ZW51ZXNbJGptY19ldmVudF9bJ1ZlbnVlSUQnXV07CgoJCSMgQ29udmVyc2lvbiBmb3IgREIg U2NoZW1lIERPSCEKCQlzd2l0Y2goJGVsZW1lbnQpewoJCQljYXNlICdpZCc6CgkJCQkkZSA9 ICdJRCc7CgkJCQlicmVhazsKCQkJY2FzZSAnb3RoZXJpbmZvJzoKCQkJCSRlID0gJ090aGVy SW5mbyc7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCSRlID0gJGVsZW1lbnQ7CgkJCQli cmVhazsKCQl9CgoJCXN3aXRjaCgkZWxlbWVudCl7CgkJCWNhc2UgJ2NhdGVnb3J5JzoKCQkJ CSR2YWx1ZSA9ICgkbmFtZT8kam1jX2NhdGVnb3JpZXNbJGptY192ZW51ZV9bJ0NhdGVnb3J5 SUQnXV1bJ25hbWUnXTokam1jX2NhdGVnb3JpZXNbJGptY192ZW51ZV9bJ0NhdGVnb3J5SUQn XV1bJ2lkJ10pOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ290aGVyaW5mbyc6CgkJCQkkdmFsdWUg PSAoJGptY192ZW51ZV9bJGVdPyRqbWNfdmVudWVfWydPdGhlckluZm9faHRtbCddOiIiKTsK CQkJCWJyZWFrOwoJCQlkZWZhdWx0OgoJCQkJJHZhbHVlID0gJGptY192ZW51ZV9bJGVdOwoJ CQkJYnJlYWs7CgkJfQoKCQlpZigoJGxpbmtlZCB8fCAkZSA9PSAndXJsJykgJiYgJGptY192 ZW51ZV9bJ3VybCddKQoJCQkkdmFsdWUgPSAiPGEgaHJlZj1cIiIuJGptY192ZW51ZV9bJ3Vy bCddLiJcIj4iLiR2YWx1ZS4iPC9hPiI7CgkJZWxzZSBpZiAoJGUgPT0gJ2VtYWlsJykKCQkJ JHZhbHVlID0gIjxhIGhyZWY9XCJtYWlsdG86Ii4kam1jX3ZlbnVlX1snZW1haWwnXS4iXCI+ Ii4kdmFsdWUuIjwvYT4iOwoKCQlpZigkd3JhcHRhZyAmJiAoc3RybGVuKCR2YWx1ZSkgPiAw KSkKCQkJcmV0dXJuICI8JHdyYXB0YWciLigkY2xhc3M/IiBjbGFzcz1cIiRjbGFzc1wiIjoi IikuIj4iLiR2YWx1ZS4iPC8kd3JhcHRhZz4iOwoJCWVsc2UKCQkJcmV0dXJuICR2YWx1ZTsK CX0KCgkjIEdsb2JhbHMgZm9yIHRoZSBvdXRwdXQgdGFncy4uLiBEb2RneSBoYWNrLCBidXQg bWVoIDpcCglnbG9iYWwgJGptY19hdHRyczsKCgkkam1jX2F0dHJzWydqbWNfZXZlbnRfJ10g PSBhcnJheSgKCQkjIERldGFpbAoJCSdpZCcgPT4gJycsCgkJJ25hbWUnID0+IHRydWUsCgkJ J2VsZW1lbnQnID0+IGZhbHNlLAoJCSdzdGFydCcgPT4gdHJ1ZSwKCQkncGhwX2RhdGUnID0+ ICdyJywKCQkjIFdyYXBwaW5nCgkJJ3dyYXB0YWcnID0+ICcnLAoJCSdjbGFzcycgPT4gJycs CgkJJ3RpdGxlJyA9PiAnJwoJKTsKCSRqbWNfYXR0cnNbJ2ptY192ZW51ZV8nXSA9IGFycmF5 KAoJCSMgRGV0YWlsCgkJJ2lkJyA9PiAnJywKCQknbmFtZScgPT4gdHJ1ZSwKCQknbGlua2Vk JyA9PiBmYWxzZSwKCQknZWxlbWVudCcgPT4gJycsCgkJIyBXcmFwcGluZwoJCSd3cmFwdGFn JyA9PiAnJywKCQknY2xhc3MnID0+ICcnLAoJCSd0aXRsZScgPT4gJycKCSk7CgoJZ2xvYmFs ICR2YXJzX2V2ZW50cywgJHZhcnNfdmVudWVzLCAkdmFyc19jYXRlZ29yaWVzOwoJJHZhcnNf ZXZlbnRzID0gYXJyYXkoIklEIiwgIkNhdGVnb3J5SUQiLCAic0RhdGVUaW1lIiwgImZEYXRl VGltZSIsICJuYW1lIiwgIkF1dGhvcklEIiwgIkxhc3RNb2QiLCAiTGFzdE1vZElEIiwgIlZl bnVlSUQiLCAiUHJpY2UiLCAiT3RoZXJCYW5kcyIsICJPdGhlckJhbmRzX2h0bWwiLCAiT3Ro ZXJJbmZvIiwgIk90aGVySW5mb19odG1sIiwgImNvbW1lbnRzX2NvdW50Iik7CgkkdmFyc192 ZW51ZXMgPSBhcnJheSgiSUQiLCAiQ2F0ZWdvcnlJRCIsICJpbWFnZUlEIiwgIm5hbWUiLCAi YWRkcmVzczEiLCAiYWRkcmVzczIiLCAic3VidXJiIiwgInN0YXRlIiwgImNvdW50cnkiLCAi cG9zdGNvZGUiLCAicGhvbmUiLCAidXJsIiwgImVtYWlsIiwgIk90aGVySW5mbyIsICJPdGhl ckluZm9faHRtbCIsICJjb21tZW50c19jb3VudCIpOwoJJHZhcnNfY2F0ZWdvcmllcyA9IGFy cmF5KCJJRCIsICJuYW1lIiwgIk90aGVySW5mbyIsICJPdGhlckluZm9faHRtbCIpOwoiO3M6 MzoibWQ1IjtzOjMyOiJkODNkZmFhZThlNjJkNzhhMGQ4ZGQ2ZTVhNjJhZTI0MyI7fQ==