# jmc_event_manager v0.2beta # 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: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6NzoiMC4yYmV0YSI7czo2OiJhdXRob3IiO3M6MTM6Ikpv ZWwgQ291cnRuZXkiO3M6MTA6ImF1dGhvcl91cmkiO3M6MjE6Imh0dHA6Ly9ldXBoZW1pemUu bmV0LyI7czoxMToiZGVzY3JpcHRpb24iO3M6Mjk6IkV2ZW50IE1hbmFnZXIgZm9yIFRleHRw YXR0ZXJuIjtzOjQ6InR5cGUiO2k6MTtzOjQ6Im5hbWUiO3M6MTc6ImptY19ldmVudF9tYW5h Z2VyIjtzOjQ6ImhlbHAiO3M6MTIwMTY6IiJEb3dubG9hZCBqbWNfZXZlbnRfbWFuYWdlciB2 MC4yYmV0YSI6aHR0cDovL2ZpbGVzLmV1cGhlbWl6ZS5uZXQvdGV4dHBhdHRlcm4vam1jX2V2 ZW50X21hbmFnZXIudHh0CgpoMi4gUHJlYW1ibGUKClRoZSBqbWNfZXZlbnRfbWFuYWdlciBp cyBhIHBsdWdpbi9oYWNrIGZvciB0ZXh0cGF0dGVybiBjcmVhdGVkIHRvIGFsbG93IHVzZXJz IHRvIGNyZWF0ZSBldmVudHMgYXQgdmFyaW91cyB2ZW51ZXMuIEl0IGhhcyBiZWVuIGRvbmUg c28gY29tcGxldGVseSBieSAnanU6ZmVtYWl6IEAgImV1cGhlbWl6ZS5uZXQiOmh0dHA6Ly9l dXBoZW1pemUubmV0IC4gQW55IGNvbW1lbnRzIG9yIHN1Z2dlc3Rpb25zIHdvdWxkIGJlIGFw cHJlY2lhdGVkIGFuZCB0aGUgc3VwcG9ydCB0aHJlYWQgYXQgImZvcnVtLnRleHRwYXR0ZXJu LmNvbSI6aHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbSBpcyBhdmFpbGFibGUgImhlcmUi Omh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0xMTEzNyAu IFdoaWxlIHRoaXMgaGVscCBmaWxlIGhhcyBhdHRlbXB0ZWQgdG8gYmUgYXMgdGhvcm91Z2gg YXMgcG9zc2libGUsIHRoaW5ncyBkbyBmYWxsIHRocm91Z2ggdGhlIGNyYWNrcy4gU2luY2Ug am1jX2V2ZW50X21hbmFnZXIgaXMgKHN0aWxsKSBpbiBhIGJldGEgc3RhZ2UsIHRoZXJlIG1h eSBleGlzdCBzb21lIGJ1Z3MgaW4gdGhlIG9wZXJhdGlvbi4gQWRkaXRpb25hbGx5LCB0aGUg cGx1Z2luL2hhY2sgaXMgYW4gb25nb2luZyBwcm9qZWN0IGFuZCBtYXkgYmUgdXBkYXRlZCBm cm9tIHRpbWUgdG8gdGltZS4gVG8gZW5zdXJlIHRoYXQgeW91IGhhdmUgdGhlIG1vc3QgdXAg dG8gZGF0ZSB2ZXJzaW9uLCBwbGVhc2UgZW5zdXJlIHlvdSB2aXNpdCB0aGUgImZvcnVtIHRo cmVhZCI6aHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTEx MTM3IHJlZ3VsYXJseS4KCmptY19ldmVudF9tYW5hZ2VyIGlzIGRpc3RyaWJ1dGVkIHVuZGVy IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24g cGxlYXNlIHZpc2l0ICJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSI6aHR0cDovL3d3dy5n bnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCgpoMi4gSW5zdGFsbGF0aW9uCgpUaGUgaW5zdGFs bGF0aW9uIHBhY2thZ2UgaXMgYSBzaW1wbGUgcHJvY2Vzcy4gRm9yIHRob3NlIG9mIHlvdSB1 cGdyYWRpbmcsIHRoZXJlIGFyZSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyBvbiB5b3VyIGJl aGFsZiBkdWUgdG8gdGhlIGFkZGl0aW9uIG9mIGNhdGVnb3JpZXMgdG8gam1jX2V2ZW50X21h bmFnZXIuCgpoMy4gRnJlc2ggSW5zdGFsbAoKRm9yIHRob3NlIHVuZGVyZ29pbmcgYSBmcmVz aCBpbnN0YWxsLCBwbGVhc2UgZ28gdGhyb3VnaCB0aGUgZm9sbG93aW5nIHN0ZXBzOgoKIyBU dXJuIHRoZSBwbHVnaW4gdG8gYWN0aXZlIC0gIlF1aWNrbGluayB0byBhY3RpdmF0ZSI6P2V2 ZW50PXBsdWdpbiZzdGVwPXN3aXRjaF9zdGF0dXMmc3RhdHVzPTAmbmFtZT1qbWNfZXZlbnRf bWFuYWdlcgojIEdvIHRvIENvbnRlbnQgYW5kIEV2ZW50IE1hbmFnZXIgdGFicyAtICJRdWlj a2xpbmsgdG8gRXZlbnQgTWFuYWdlciI6P2V2ZW50PWptY19ldmVudF9tYW5hZ2VyCiMgRG8g YSBsaXR0bGUgZGFuY2UgYW5kIHlvdSdsbCBmaW5kIHRoYXQgeW91J3JlIHJlYWR5IHRvIGdv IQoKaDMuIFVwZ3JhZGUgb24gUGFzdCBWZXJzaW9uCgpBcyB3aXRoIGFsbCB1cGRhdGVzLCBw bGVhc2UgYmFja3VwIHlvdXIgZGF0YWJhc2UsIHRoZW4gZ28gdGhyb3VnaCB0aGUgZm9sbG93 aW5nIHN0ZXBzOgoKIyBUaHJvdWdoIHlvdXIgZGF0YWJhc2UgYWRtaW4sIGFkZCB0aGUgZm9s bG93aW5nIGNvbHVtbnMgdG8gdGhlIDxwcmU+dHhwX2ptY19ldmVudDwvcHJlPiBhbmQgPHBy ZT50eHBfam1jX2V2ZW50X3ZlbnVlPC9wcmU+IHNldCBhcyBOVUxMIChvciBlcXVpdmFsZW50 IG9uIHlvdXIgVGV4dHBhdHRlcm4gaW5zdGFsbGF0aW9uKQojIEFjdGl2YXRlIHBsdWdpbiAt ICJRdWlja2xpbmsgdG8gYWN0aXZhdGUiOj9ldmVudD1wbHVnaW4mc3RlcD1zd2l0Y2hfc3Rh dHVzJnN0YXR1cz0wJm5hbWU9am1jX2V2ZW50X21hbmFnZXIKIyBHbyB0byBDb250ZW50IGFu ZCB0aGVuIEV2ZW50IE1hbmFnZXIgdGFiIC0gIlF1aWNrbGluayB0byBFdmVudCBNYW5hZ2Vy Ijo/ZXZlbnQ9am1jX2V2ZW50X21hbmFnZXIKIyBEbyBhIGxpdHRsZSBqaWcgYW5kIHlvdSBz aG91bGQgYmUgcmlnaHQgKyByZWFkeSB0byBnbyEKCmgyLiBJbnRyb2R1Y3Rpb24gdG8gdGhl IEV2ZW50IE1hbmFnZXIKClRoZSBldmVudCBtYW5hZ2VyIGhhcyB0d28gY29tcG9uZW50cyAt IHRoZSBhZG1pbiBzaWRlIGNvbnRyb2xzIGFuZCB0aGUgcHVibGljIHNpZGUgb3V0cHV0LiBP biBpbnN0YWxsYXRpb24gaXQgd2lsbCBlbnN1cmUgdGhhdCBhIGRhdGFiYXNlIGV4aXN0cywg dGhlIHRhYmxlcyBleGlzdCwgaW5zdGFsbGluZyBpZiB0aGV5J3JlIG1pc3NpbmcsIGFuZCB0 aGF0IGFuIGVudHJ5IGV4aXN0cyBpbiB0aGUgdGFibGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUg ZXZlbnQgbWFuYWdlciAoaW4gdGhpcyB3YXkgSSBjb25zaWRlciBpdCBhIGhhY2spLgoKaDIu IEV2ZW50IE1hbmFnZXIgVGFiCgpXaGVuIHlvdSBnbyB0byB0aGUgZXZlbnQgbWFuYWdlciB0 YWIgeW91IHdpbGwgYmUgcHJlc2VudGVkIHdpdGggYSBsaXN0IG9mIGV2ZW50cyB0aGF0IGhh dmUgYmVlbiBlbnRlcmVkLiBDdXJyZW50bHksIHRoZSAiZXZlbnRzIHBlciBwYWdlIiBpcyBh IG1pcnJvciBvZiB0aGF0IHVzZWQgb24gdGhlIGFydGljbGUgcGFnZSwgYW5kIGFueSBhbHRl cmF0aW9uIHRvIHRoZSAiZXZlbnRzIHBlciBwYWdlIiB3aWxsIGFsc28gYWx0ZXIgdGhlICJh cnRpY2xlcyBwZXIgcGFnZSIgdW5kZXIgdGhlICJhcnRpY2xlcyB0YWIiOj9ldmVudD1saXN0 IC4KClRoZXJlIGFyZSBjdXJyZW50bHkgZm91ciB0b3AgbGV2ZWwgYnV0dG9ucyBmb3IgdGhl IEV2ZW50IE1hbmFnZXI6CgoqICJFdmVudCBNYW5hZ2VyIjo/ZXZlbnQ9am1jX2V2ZW50X21h bmFnZXIgLSBNYW5hZ2VzIHRoZSBhY3R1YWwgZXZlbnRzCiogIlZlbnVlIE1hbmFnZXIiOj9l dmVudD1qbWNfZXZlbnRfbWFuYWdlciZzdGVwPXZlbnVlX21hbmFnZXIgLSBNYW5hZ2VzIHRo ZSB2ZW51ZXMgZm9yIHRoZSBldmVudHMuIEVhY2ggZXZlbnQgbXVzdCBiZSAiYXQiIGEgdmVu dWUKKiAiQ2F0ZWdvcnkgTWFuYWdlciI6P2V2ZW50PWptY19ldmVudF9tYW5hZ2VyJnN0ZXA9 Y2F0ZWdvcnlfbWFuYWdlciAtIE1hbmFnZXMgdGhlIG5ldyBjYXRlZ29yaWVzIGF2YWlsYWJs ZSBmb3IgdGhlIHBsdWdpbgoqICJSU1MgRmVlZCI6P2V2ZW50PWptY19ldmVudF9tYW5hZ2Vy JnN0ZXA9ZmVlZF9tYW5hZ2VyIC0gRm9yIGZ1dHVyZSB2ZXJzaW9ucyB3aWxsIGFsbG93IGFj Y2VzcyB0byBhbHRlcmF0aW9ucyB0byB0aGUgUlNTIGZvcm1hdAoKaDMuIEV2ZW50IE1hbmFn ZXIKClRoZSBkZWZhdWx0IHBhZ2Ugb2YgdGhlIHBsdWdpbidzIHRhYi4gR2l2ZXMgdHdvIG9w dGlvbnM6CgoqICJBZGQgRXZlbnQiOj9ldmVudD1qbWNfZXZlbnRfbWFuYWdlciZzdGVwPWV2 ZW50X2FkZAoqICJFdmVudCBMaXN0aW5nIChkZWZhdWx0KSI6P2V2ZW50PWptY19ldmVudF9t YW5hZ2VyCgpoNC4gQWRkIEV2ZW50CgpBbGxvd3MgdGhlIGFkbWluaXN0cmF0b3IgdG8gYWRk IGFuIGV2ZW50LiBVdGlsaXNlcyAibWljcm9mb3JtYXRzIjpodHRwOi8vbWljcm9mb3JtYXRz Lm9yZy8gc3R5bGUgImhDYWxlbmRhciI6aHR0cDovL21pY3JvZm9ybWF0cy5vcmcvd2lraS9o Y2FsZW5kYXIKCk9wdGlvbmFsOgoKKiBDYXRlZ29yeQoqIEV2ZW50IE5hbWUKKiBQcmljZQoq IE90aGVyIEJhbmRzCiogT3RoZXIgSW5mbwoKUmVxdWlyZWQ6CgoqIFN0YXJ0IERhdGUgKyBU aW1lCiogRmluaXNoIERhdGUgKyBUaW1lCiogVmVudWUKCipOb3RlKjogRXZlbnQgbXVzdCBG aW5pc2ggX2FmdGVyXyBpdCBiZWdpbnMuCgpoNC4gRXZlbnQgTGlzdGluZwoKQmFzaWMgbGlz dGluZyBvZiBhbGwgZXZlbnRzIHBhc3QsIHByZXNlbnQgYW5kIGZ1dHVyZS4KCmgzLiBWZW51 ZSBMaXN0aW5nCgpHaXZlcyB0d28gb3B0aW9uczoKCiogIkFkZCBWZW51ZSI6P2V2ZW50PWpt Y19ldmVudF9tYW5hZ2VyJnN0ZXA9dmVudWVfYWRkCiogIlZlbnVlIExpc3RpbmcgKGRlZmF1 bHQpIjo/ZXZlbnQ9am1jX2V2ZW50X21hbmFnZXImc3RlcD12ZW51ZV9tYW5hZ2VyCgpoNC4g QWRkIFZlbnVlCgpBbGxvd3MgdGhlIGFkbWluaXN0cmF0b3IgdG8gYWRkIGEgdmVudWUuIE9u bHkgdGhlIHZlbnVlIG5hbWUgaXMgcmVxdWlyZWQuIFV0aWxpc2VzICJtaWNyb2Zvcm1hdCI6 aHR0cDovL21pY3JvZm9ybWF0cy5vcmcvIHN0eWxlICJoQ2FyZCI6aHR0cDovL21pY3JvZm9y bWF0cy5vcmcvd2lraS9oY2FyZAoKaDQuIFZlbnVlIExpc3RpbmcKCkJhc2ljIGxpc3Rpbmcg b2YgYWxsIHZlbnVlcy4KCmgzLiBDYXRlZ29yeSBNYW5hZ2VyCgpHaXZlcyB0d28gb3B0aW9u czoKCiogIkFkZCBDYXRlZ29yeSI6P2V2ZW50PWptY19ldmVudF9tYW5hZ2VyJnN0ZXA9Y2F0 ZWdvcnlfYWRkCiogIkNhdGVnb3J5IExpc3RpbmcgKGRlZmF1bHQpIjo/ZXZlbnQ9am1jX2V2 ZW50X21hbmFnZXImc3RlcD1jYXRlZ29yeV9tYW5hZ2VyCgpoNC4gQWRkIENhdGVnb3J5CgpB bGxvd3MgdGhlIGFkbWluaXN0cmF0b3IgdG8gYWRkIGFuIGNhdGVnb3J5LiBPbmx5IHRoZSBj YXRlZ29yeSBuYW1lIGlzIHJlcXVpcmVkLgoKaDQuIENhdGVnb3J5IExpc3RpbmcKCkJhc2lj IGxpc3Rpbmcgb2YgYWxsIGNhdGVnb3JpZXMuCgpoMy4gUlNTIEZlZWQKClN0aWxsIHRvIGNv bWUgaW4gZnV0dXJlIHVwZGF0ZXMuIFVuc3VyZSBhcyBvZiB5ZXQgYXMgdG8gdGhlIGRlc2ln biwgbGF5b3V0IGFuZCBvcHRpb25zLiBJZiB5b3UgaGF2ZSBpZGVhcywgcGxlYXNlIGNvbnRh Y3QgbWUgdGhyb3VnaCB0aGUgImptY19ldmVudF9tYW5hZ2VyIHBsdWdpbiBmb3J1bSB0aHJl YWQiOmh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0xMTEz NwoKaDIuIENyZWF0aW5nIEV2ZW50IE1hbmFnZXIgT3V0cHV0CgpUaGUgam1jX2V2ZW50X21h bmFnZXIgdXNlcyB0aGUgZm9ybXMgaW4gdGV4dHBhdHRlcm4gdG8gY3JlYXRlIHRoZSB0ZW1w bGF0ZSBmb3IgdGhlIG91dHB1dC4gWW91IG1heSB1c2UgYW55IGZvcm0geW91IGxpa2UsIHBy b3ZpZGluZyB0aGF0IGl0IGhhcyB0aGUgcmVsZXZhbnQgZGV0YWlscywgaS5lLiB5b3UgY2Fu IGNhbGwgaXQgZnJvbSB3aXRoaW4gYW4gYXJ0aWNsZSwgZnJvbSBhIHBhZ2Ugb3IgZXZlbiBm cm9tIGEgZm9ybSBpdHNlbGYgKF95ZXQgdG8gYmUgdGVzdGVkXykuCgpoMy4gQ2FsbGluZyB0 aGUgRXZlbnQgTWFuYWdlcgoKSW4gb3JkZXIgdG8gY2FsbCB0aGUgZXZlbnQgbWFuYWdlciwg YSBzaW1wbGUgVGV4dHBhdHRlcm4gc3R5bGUgdGFnIGlzIHVzZWQgPHByZT48dHhwIDpqbWNf ZXZlbnRzIGZvcm09ImZvcm1fbmFtZSIgLz48L3ByZT4KClRoZSBmb3JtX25hbWUgaXMgdGhl IG5hbWUgb2YgdGhlIGZvcm0geW91IHdvdWxkIGxpa2UgdG8gY2FsbCBhcyB0aGUgdGVtcGxh dGUuIGptY19ldmVudHMgY3ljbGVzIHRocm91Z2ggX2FsbF8gZXZlbnRzIGFuc3dlcmluZyBp dHMgcmVzdHJpY3Rpb25zLCB0aGF0IGlzIGl0IGN5Y2xlcyB0aHJvdWdoIGVhY2ggcmVsZXZh bnQgZW50cnkuCgpUaGVyZSBhcmUgbWFueSBvcHRpb25zIGFzIHRvIGhvdyB0byBsaW1pdCB0 aGUgbnVtYmVyIGFuZCB0eXBlIG9mIGV2ZW50cyBiZWluZyBjYWxsZWQuIFRoZSBmb2xsb3dp bmcgYXJlIHRoZSBvcHRpb25zLCBnaXZlbiB3aXRoIGRldGFpbHMgYWxzbyBvZiB0aGUgZGVm YXVsdCAoaWYgYW55KS4KCkZvcm1hdHRpbmcgZm9yIHZlbnVlcyBpcyBkb25lIGluZGVwZW5k ZW50bHkgb2YsIG9yIHdpdGhpbiwgdGhlIGV2ZW50IGZvcm0uCgpoNC4gbGltaXQKClVzZWQg dG8gcmVzdHJpY3QgdGhlIG51bWJlciBvZiBldmVudHMuCgpFeGFtcGxlIHVzYWdlOgpMaW1p dCB0byB0ZW4gZXZlbnRzOiA8cHJlPjx0eHAgOmptY19ldmVudHMgZm9ybT0iZm9ybV9uYW1l IiBsaW1pdD0iMTAiIC8+PC9wcmU+CjxwcmU+dmFsdWVzOiAgMHwxPC9wcmU+CjxwcmU+ZGVm YXVsdDogMTwvcHJlPgoKaDQuIGZ1dHVyZQoKVXNlZCB0byByZXN0cmljdCB0aGUgZXZlbnRz IHRvIHRob3NlIHRoYXQgd2lsbCBzdGFydCBpbiB0aGUgZnV0dXJlLgoKRXhhbXBsZSB1c2Fn ZToKTGltaXQgdG8gZnV0dXJlOiA8cHJlPjx0eHAgOmptY19ldmVudHMgZm9ybT0iZm9ybV9u YW1lIiBmdXR1cmU9IjEiIC8+PC9wcmU+CjxwcmU+dmFsdWVzOiAgMHwxPC9wcmU+CjxwcmU+ ZGVmYXVsdDogMTwvcHJlPgoKaDQuIHBhc3QKClVzZWQgdG8gcmVzdHJpY3QgdGhlIGV2ZW50 cyB0byB0aG9zZSB0aGF0IHdpbGwgc3RhcnQgaW4gdGhlIHBhc3QuCgpFeGFtcGxlIHVzYWdl OgpQYXN0IG9ubHk6IDxwcmU+PHR4cCA6am1jX2V2ZW50cyBmb3JtPSJmb3JtX25hbWUiIHBh c3Q9IjEiIGZ1dHVyZT0iMCIgLz48L3ByZT4KUGFzdCBhbmQgZnV0dXJlOiA8cHJlPjx0eHAg OmptY19ldmVudHMgZm9ybT0iZm9ybV9uYW1lIiBwYXN0PSIxIiBmdXR1cmU9IjAiIC8+PC9w cmU+CjxwcmU+dmFsdWVzOiAgMHwxPC9wcmU+CjxwcmU+ZGVmYXVsdDogMTwvcHJlPgoKaDQu IGN1cnJlbnQKClVzZWQgdG8gcmVzdHJpY3QgdGhlIGV2ZW50cyB0byB0aG9zZSB0aGF0IHdp bGwgaGF2ZSBzdGFydGVkLCBidXQgaGF2ZSBub3QgeWV0IGZpbmlzaGVkLgoKRXhhbXBsZSB1 c2FnZToKQ3VycmVudCBvbmx5OiA8cHJlPjx0eHAgOmptY19ldmVudHMgZm9ybT0iZm9ybV9u YW1lIiBmdXR1cmU9IjAiIGN1cnJlbnQ9IjEiIC8+PC9wcmU+CkN1cnJlbnQgYW5kIGZ1dHVy ZTogPHByZT48dHhwIDpqbWNfZXZlbnRzIGZvcm09ImZvcm1fbmFtZSIgY3VycmVudD0iMSIg Lz48L3ByZT4KPHByZT52YWx1ZXM6ICAwfDE8L3ByZT4KPHByZT5kZWZhdWx0OiAwPC9wcmU+ CgpoNC4gY2F0ZWdvcnlfaWQKClVzZWQgdG8gcmVzdHJpY3QgdGhlIGV2ZW50cyB0byB0aG9z ZSBvZiBhIHBhcnRpY3VsYXIgY2F0ZWdvcnkgb3IgY2F0ZWdvcmllcy4KCkV4YW1wbGUgdXNh Z2U6ClNpbmdsZSBjYXRlZ29yeSAod2hlcmUgY2F0ZWdvcnkncyBJRD0yKTogPHByZT48dHhw IDpqbWNfZXZlbnRzIGZvcm09ImZvcm1fbmFtZSIgY2F0ZWdvcnlfaWQ9IjIiIC8+PC9wcmU+ Ck11bHRpcGxlIGNhdGVnb3JpZXMgKHdoZXJlIGNhdGVnb3J5J3MgSUQgaXMgaW4gYXJyYXko Miw0KSk6IDxwcmU+PHR4cCA6am1jX2V2ZW50cyBmb3JtPSJmb3JtX25hbWUiIGNhdGVnb3J5 X2lkPSIyLDQiIC8+PC9wcmU+CjxwcmU+dmFsdWVzOiAgVmFsaWQgSUQgZnJvbSB0eHBfam1j X2V2ZW50X2NhdGVnb3J5PC9wcmU+CjxwcmU+ZGVmYXVsdDogTlVMTDwvcHJlPgoKaDQuIHZl bnVlX2lkCgpVc2VkIHRvIHJlc3RyaWN0IHRoZSBldmVudHMgdG8gdGhvc2UgdGhhdCB3aWxs IG9jY3VyIGF0IGEgc3BlY2lmaWVkIHZlbnVlIG9yIHZlbnVlcy4KCkV4YW1wbGUgdXNhZ2U6 ClNpbmdsZSB2ZW51ZSAod2hlcmUgdmVudWUncyBJRD0yKTogPHByZT48dHhwIDpqbWNfZXZl bnRzIGZvcm09ImZvcm1fbmFtZSIgdmVudWVfaWQ9IjIiIC8+PC9wcmU+Ck11bHRpcGxlIHZl bnVlcyAod2hlcmUgdmVudWUncyBJRCBpcyBpbiBhcnJheSgyLDQpKTogPHByZT48dHhwIDpq bWNfZXZlbnRzIGZvcm09ImZvcm1fbmFtZSIgdmVudWVfaWQ9IjIsNCIgLz48L3ByZT4KPHBy ZT52YWx1ZXM6ICBWYWxpZCBJRCBmcm9tIHR4cF9qbWNfZXZlbnRfdmVudWU8L3ByZT4KPHBy ZT5kZWZhdWx0OiBOVUxMPC9wcmU+CgpoNC4gZXZlbnRfaWQKClVzZWQgdG8gcmVzdHJpY3Qg dGhlIGV2ZW50cyB0byBhIHBhcnRpY3VsYXIgZXZlbnQgb3IgZ3JvdXAgb2YgZXZlbnRzLiBQ bGVhc2Ugbm90ZSB0aGF0IHRoaXMgb3ZlcnJpZGVzICphbGwqIG90aGVyIHZhcmlhYmxlcyEK CkV4YW1wbGUgdXNhZ2U6ClNpbmdsZSBldmVudCAod2hlcmUgZXZlbnQncyBJRD0yKTogPHBy ZT48dHhwIDpqbWNfZXZlbnRzIGZvcm09ImZvcm1fbmFtZSIgY2F0ZWdvcnlfaWQ9IjIiIC8+ PC9wcmU+Ck11bHRpcGxlIGV2ZW50cyAod2hlcmUgZXZlbnQncyBJRCBpcyBpbiBhcnJheSgy LDQpKTogPHByZT48dHhwIDpqbWNfZXZlbnRzIGZvcm09ImZvcm1fbmFtZSIgY2F0ZWdvcnlf aWQ9IjIsNCIgLz48L3ByZT4KPHByZT52YWx1ZXM6ICBWYWxpZCBJRCBmcm9tIHR4cF9qbWNf ZXZlbnQ8L3ByZT4KPHByZT5kZWZhdWx0OiBOVUxMPC9wcmU+CgpoNC4gc29ydF9ieQoKUHV0 cyBpbiBwbGFjZSB0aGUgTXlTUUwgc29ydCBieSBhIHZhcmlhYmxlIG5hbWUuIFVzZWQgaW4g Y29uanVuY3Rpb24gd2l0aCBzb3J0X29yZGVyLgoKPHByZT52YWx1ZXM6CUlEIHwgbmFtZSB8 IHN0YXJ0X0RhdGVUaW1lIHwgZmluaXNoX0RhdGVUaW1lIHwgQXV0aG9ySUQgfCBMYXN0TW9k SUQgfAoJCQkJVmVudWVJRCB8IFByaWNlIHwgT3RoZXJCYW5kcyB8IE90aGVyQmFuZHNfaHRt bCB8IE90aGVySW5mbyB8CgkJCQlPdGhlckluZm9faHRtbCB8IENhdGVnb3J5SUQ8L3ByZT4K PHByZT5kZWZhdWx0OiBzdGFydF9EYXRlVGltZTwvcHJlPgoKaDQuIHNvcnRfb3JkZXIKCkRl dGVybWluZ3MgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBldmVudHMgd2lsbCBiZSBkaXNwbGF5 ZWQuCgo8cHJlPnZhbHVlczogYXNjfGRlc2M8L3ByZT4KPHByZT5kZWZhdWx0OiBhc2M8L3By ZT4KCmgyLiBGb3JtcwoKRXZlbnRzIGFuZCB2ZW51ZXMgZWFjaCBoYXZlIHRoZWlyIG93biBm b3JtcyB3aXRoIHRoZWlyIG93biB2YXJpYWJsZXMuCgpoMy4gRXZlbnQgRm9ybXMKCmg0LiBF dmVudCBOYW1lCgo8cHJlPjx0eHAgOmptY19ldmVudF9uYW1lIC8+PC9wcmU+CgpoNC4gRXZl bnQgSUQKCjxwcmU+PHR4cCA6am1jX2V2ZW50X2lkIC8+PC9wcmU+CgpoNC4gRXZlbnQgUHJp Y2UKCjxwcmU+PHR4cCA6am1jX2V2ZW50X3ByaWNlIC8+PC9wcmU+CgpoNC4gT3RoZXIgQmFu ZHMKCkluc2VydHMgdGhlIGh0bWwgZm9yIG90aGVyIGJhbmQgaW5mb3JtYXRpb24uCgo8cHJl Pjx0eHAgOmptY19ldmVudF9vdGhlcmJhbmRzIC8+PC9wcmU+CgpoNC4gT3RoZXIgSW5mb3Jt YXRpb24KCjxwcmU+PHR4cCA6am1jX2V2ZW50X290aGVyaW5mbyAvPjwvcHJlPgoKaDMuIFZl bnVlIEZvcm1zCgpWZW51ZSBmb3JtIG9wdGlvbnMgY2FuIGJlIGNhbGxlZCBlaXRoZXIgZnJv bSB0aGUgZXZlbnQgZm9ybSBkaXJlY3RseSwgb3IgZnJvbSBhIHNlcGFyYXRlIGZvcm0gdXNp bmcgdGhlIHRhZzogPHByZT48dHhwIDpqbWNfdmVudWUgZm9ybT0iZm9ybV9uYW1lIiAvPjwv cHJlPgoKaDQuIFZlbnVlIE5hbWUKCjxwcmU+PHR4cCA6am1jX3ZlbnVlX25hbWUgLz48L3By ZT4KCmg0LiBWZW51ZSBJRAoKPHByZT48dHhwIDpqbWNfdmVudWVfaWQgLz48L3ByZT4KCmg0 LiBWZW51ZSBBZGRyZXNzIDEKCjxwcmU+PHR4cCA6am1jX3ZlbnVlX2FkZHJlc3MxIC8+PC9w cmU+CgpoNC4gVmVudWUgQWRkcmVzcyAyCgo8cHJlPjx0eHAgOmptY192ZW51ZV9hZGRyZXNz MiAvPjwvcHJlPgoKaDQuIFZlbnVlIFN1YnVyYgoKPHByZT48dHhwIDpqbWNfdmVudWVfc3Vi dXJiIC8+PC9wcmU+CgpoNC4gVmVudWUgU3RhdGUKCjxwcmU+PHR4cCA6am1jX3ZlbnVlX3N0 YXRlIC8+PC9wcmU+CgpoNC4gVmVudWUgQ291bnRyeQoKPHByZT48dHhwIDpqbWNfdmVudWVf Y291bnRyeSAvPjwvcHJlPgoKaDQuIFZlbnVlIFBvc3Rjb2RlCgo8cHJlPjx0eHAgOmptY192 ZW51ZV9wb3N0Y29kZSAvPjwvcHJlPgoKaDQuIFZlbnVlIFBob25lCgo8cHJlPjx0eHAgOmpt Y192ZW51ZV9waG9uZSAvPjwvcHJlPgoKaDQuIFZlbnVlIFVSTAoKPHByZT48dHhwIDpqbWNf dmVudWVfdXJsIC8+PC9wcmU+CgpoNC4gVmVudWUgRW1haWwKCjxwcmU+PHR4cCA6am1jX3Zl bnVlX2VtYWlsIC8+PC9wcmU+CgpoNC4gVmVudWUgT3RoZXIgSW5mb3JtYXRpb24KCjxwcmU+ PHR4cCA6am1jX3ZlbnVlX290aGVyaW5mbyAvPjwvcHJlPgoKaDMuIFVzZWZ1bCBGdW5jdGlv bgoKSW4gb3JkZXIgdG8gZXhlY3V0ZSBhIGZldyBtb3JlIG9wdGlvbnMsIHRoZXJlIGlzIGEg cmVxdWlyZW1lbnQgdG8gbWFuaXB1bGF0ZSB0aGluZ3Mgc3VjaCBhcyBkYXRlcy4KCmg0LiBF dmVudCBUaW1lcwoKRXZlbnQgdGltZXMgZ2l2ZSBvdXRwdXQgb2YgZWl0aGVyIHRoZSBzdGFy dCBvciBmaW5pc2ggZGF0ZSBhbmQgdGltZSBvZiBhbiBldmVudCBhbmQgdXNlcyB0aGUgIlBI UCBEYXRlVGltZSBmdW5jdGlvbmFsaXR5IjpodHRwOi8vd3d3LnBocC5uZXQvZGF0ZXRpbWUg Zm9yIGZvcm1hdHRpbmcuCgo8cHJlPjx0eHAgOmptY19ldmVudF90aW1lIHBocF9kYXRlPSJw aHBEYXRlRnVuY3Rpb24iIC8+PC9wcmU+CgpPcHRpb25zOgpzdGFydCAoaWYgc3RhcnQ9MCB0 aGVuIGdpdmVzIGZpbmlzaCB0aW1lKQo8cHJlPnZhbHVlczogMHwxPC9wcmU+CjxwcmU+ZGVm YXVsdDogMTwvcHJlPgoKaDQuIElmIFZhcmlhYmxlCgpDaGVja3MgdG8gc2VlIGlmIGEgdmFy aWFibGUgZXhpc3RzLiBJZiBpdCBkb2VzIG5vdCwgdGhlbiBkZWxldGVzIHdoYXQgdGhlIHRh Z3MgZW5jbG9zZS4KCjxkaXYgc3R5bGU9Im1hcmdpbjogMTBweCA1MHB4OyBwYWRkaW5nOiAx MHB4OyBib3JkZXI6IDFweCByZWQgc29saWQ7IGNvbG9yOiBkYXJrcmVkOyBiYWNrZ3JvdW5k OiAjZmVlOyI+Kldhcm5pbmcqOiBFeHBlcmltZW50YWwgKHN0aWxsLCBzb3JyeSBndXlzIG89 KSApPC9kaXY+Cgo8cHJlPjx0eHAgOmptY19pZl92YXJpYWJsZSB2YXJpYWJsZT0idmFyaWFi bGVOYW1lIj48IC90eHA6am1jX2lmX3ZhcmlhYmxlPjwvdHhwPjwvcHJlPgoKT3B0aW9uczoK dmFyaWFibGUKPHByZT52YWx1ZXM6IGFueSBpbiB0aGUgZGF0YWJhc2UgZm9yIGEgcGFydGlj dWxhciBldmVudCBvciB2ZW51ZTwvcHJlPgo8cHJlPmRlZmF1bHQ6IE5VTEw8L3ByZT4KCmg0 LiBJZiBOb3QgVmFyaWFibGUKCkNoZWNrcyB0byBzZWUgaWYgYSB2YXJpYWJsZSBkb2VzIF9u b3RfIGV4aXN0cy4gSWYgaXQgZG9lcywgdGhlbiBkZWxldGVzIHdoYXQgdGhlIHRhZ3MgZW5j bG9zZS4KCjxkaXYgc3R5bGU9Im1hcmdpbjogMTBweCA1MHB4OyBwYWRkaW5nOiAxMHB4OyBi b3JkZXI6IDFweCByZWQgc29saWQ7IGNvbG9yOiBkYXJrcmVkOyBiYWNrZ3JvdW5kOiAjZmVl OyI+Kldhcm5pbmcqOiBFeHBlcmltZW50YWwgKHN0aWxsLCBzb3JyeSBndXlzIG89KSApPC9k aXY+CgpoMi4gRnV0dXJlIFVwZGF0ZXMKClRoZSBmb2xsb3dpbmcgZnV0dXJlIHVwZGF0ZXMg YXJlIGJlaW5nIGNvbnNpZGVyZWQgb3Igd29ya2VkIG9uOgoKKiBSU1MgZmVlZCBmb3IgdGhl IEV2ZW50IE1hbmFnZXIgKG1hbnkgb2YgeW91IHdpbGwgZmluZCB0aGlzIGEgYmlnIGJvbnVz ISkKKiBQcm9wZXIgQWRtaW4gUGFuZWwgKHRoaXMgd2lsbCBkZWFsIHdpdGggc29tZSB0aW1l IGlzc3Vlcywgd2hlcmUgY3VycmVudGx5IGhhdmUgYWxsb3dlZCBvbmx5IDAwLCAxNSwgMzAg YW5kIDQ1IG1pbnV0ZXMgZm9yIHRoZSB0aW1lLCBmdXR1cmUgb3B0aW9ucyB3aWxsIGFsbG93 IHRoZSBhZG1pbmlzdHJhdG9ycyB0byBkZWNpZGVkIGhvdyB0aGV5IHdhbnQgdGhlIG1pbnV0 ZXMgdG8gYmUgbGltaXRlZCkuCiogVmVudWUgZHJvcGRvd24gYW5kIGxpc3RzIGJ5IF9jb3Vu dHJ5XyB0aGVuIF9zdGF0ZV8gKHdoZXJlIGFwcGxpY2FibGUpLgoqIERyb3Bkb3duIGluIEFk ZCBWZW51ZSB0byB1c2UgX2NvdW50cnkgY29kZXNfLgoqIEluc3RhbGwgcGFjayhzKSB3aXRo IE5ldyBTb3V0aCBXYWxlcyBhbmQgVmljdG9yaWFuIGxpdmUgbXVzaWMgdmVudWVzIChJJ20g YW4gYXVzc2llIGFmdGVyIGFsbCEpLgoKaDIuIEFkZGl0aW9uYWwgRmVhdHVyZXMgYW5kIEJ1 ZyBGaXhlcwoKVGhlIGZvbGxvd2luZyBidWdzIGhhdmUgYmVlbiBmaXhlZCBhbmQgZmVhdHVy ZXMgYWRkZWQ6CgpoMy4gdjAuMiBiZXRhCgoqIENhdGVnb3JpZXMKKiBDdXJyZW50IGV2ZW50 IG9wdGlvbiBmb3IgY2FsbGluZyBvZiA8cHJlPjx0eHAgOmptY19ldmVudHMgLz48L3ByZT4i O3M6NDoiY29kZSI7czo2MjY1ODoiLy8gUGx1Z2luIGNvZGUgZ29lcyBoZXJlLiAgTm8gbmVl ZCB0byBlc2NhcGUgcXVvdGVzLgoKCS8vIEFkZCBhIG5ldyB0YWIgdG8gdGhlIENvbnRlbnQg YXJlYS4KCS8vICJ0ZXN0IiBpcyB0aGUgbmFtZSBvZiB0aGUgYXNzb2NpYXRlZCBldmVudDsg InRlc3RpbmciIGlzIHRoZSBkaXNwbGF5ZWQgdGl0bGUKCWlmIChAdHhwaW50ZXJmYWNlID09 ICdhZG1pbicpIHsKCQkvLyBBZGQgbmV3IHRhYnMgdW5kZXIgIkdpZyBHdWlkZSIgZm9yICJH aWdzIiwgIkFkZCBhIEdpZyIsICJWZW51ZSIgYW5kICJBZGQgYSBWZW51ZSIKCgkJYWRkX3By aXZzKCdqbWNfZXZlbnRfbWFuYWdlcicsJzEsMiwzLDQsNSw2Jyk7CgkJcmVnaXN0ZXJfdGFi KCJjb250ZW50IiwgImptY19ldmVudF9tYW5hZ2VyIiwgImV2ZW50IG1hbmFnZXIiKTsKCgkJ cmVnaXN0ZXJfY2FsbGJhY2soImptY19ldmVudF9tYW5hZ2VyIiwgImptY19ldmVudF9tYW5h Z2VyIik7CgkJcmVnaXN0ZXJfY2FsbGJhY2soImptY19ldmVudF9tYW5hZ2VyIiwgImptY19l dmVudF9jYXRlZ29yaWVzIik7CgkJcmVnaXN0ZXJfY2FsbGJhY2soImptY19ldmVudF9tYW5h Z2VyIiwgImptY19ldmVudF9tYW5hZ2VyX3ZlbnVlIik7CgoJCWFkZF9wcml2cygndGFiLmpt Y19ldmVudF9tYW5hZ2VyX3ByZWZzJywnMSwyJyk7CgkJcmVnaXN0ZXJfdGFiKCJleHRlbnNp b25zIiwgImptY19ldmVudF9tYW5hZ2VyX3ByZWZzIiwgImV2ZW50IG1hbmFnZXIgcHJlZnMi KTsKCQlyZWdpc3Rlcl9jYWxsYmFjaygiam1jX2V2ZW50X21hbmFnZXJfcHJlZnMiLCAiam1j X2V2ZW50X21hbmFnZXJfcHJlZnMiKTsKCgkJLy8gQ3JlYXRlIGhhbmRsZXJzIGZvciB0aGUg R2lnIGd1aWRlIHRhYnMKCX0KCgkvLyBNYWluIGZ1bmN0aW9uIG1hbmFnZXIgLSBhY3RzIGVz c2VudGlhbGx5IGFzIGEgZ2lhbnQgc3dpdGNoCglmdW5jdGlvbiBqbWNfZXZlbnRfbWFuYWdl cigkZXZlbnQsICRzdGVwKSB7CgkJLy8gRGVjbGFyZSBnbG9iYWwgdmFyaWFibGUgYXJyYXlz CgkJZ2xvYmFsICR2YXJzX2V2ZW50cywgJHZhcnNfdmVudWVzLCAkdmFyc19jYXRlZ29yaWVz OwoJCSR2YXJzX2V2ZW50cyA9IGFycmF5KCJJRCIsICJDYXRlZ29yeUlEIiwgInNEYXRlVGlt ZSIsICJmRGF0ZVRpbWUiLCAibmFtZSIsICJBdXRob3JJRCIsICJMYXN0TW9kIiwgIkxhc3RN b2RJRCIsICJWZW51ZUlEIiwgIlByaWNlIiwgIk90aGVyQmFuZHMiLCAiT3RoZXJCYW5kc19o dG1sIiwgIk90aGVySW5mbyIsICJPdGhlckluZm9faHRtbCIsICJjb21tZW50c19jb3VudCIp OwoJCSR2YXJzX3ZlbnVlcyA9IGFycmF5KCJJRCIsICJDYXRlZ29yeUlEIiwgImltYWdlSUQi LCAibmFtZSIsICJhZGRyZXNzMSIsICJhZGRyZXNzMiIsICJzdWJ1cmIiLCAic3RhdGUiLCAi Y291bnRyeSIsICJwb3N0Y29kZSIsICJwaG9uZSIsICJ1cmwiLCAiZW1haWwiLCAiT3RoZXJJ bmZvIiwgIk90aGVySW5mb19odG1sIiwgImNvbW1lbnRzX2NvdW50Iik7CgkJJHZhcnNfY2F0 ZWdvcmllcyA9IGFycmF5KCJJRCIsICJuYW1lIiwgIk90aGVySW5mbyIsICJPdGhlckluZm9f aHRtbCIpOwoKCQkvLyBDcmVhdGUgdGhlIHRvcCBtZW51IGFycmF5cwoJCSR0b3BfbWVudSA9 IGFycmF5KCk7CgkJJHRvcF9tZW51WydtYWluJ10gPSB0cih0ZGNzKCIiLDQpKS50cih0ZCgi PGEgaHJlZj1cIj9ldmVudD1qbWNfZXZlbnRfbWFuYWdlclwiIGNsYXNzPVwibmF2bGlua1wi PkV2ZW50IE1hbmFnZXI8L2E+IikudGQoIjxhIGhyZWY9XCI/ZXZlbnQ9am1jX2V2ZW50X21h bmFnZXImIzM4O3N0ZXA9dmVudWVfbWFuYWdlclwiIGNsYXNzPVwibmF2bGlua1wiPlZlbnVl IE1hbmFnZXI8L2E+IikudGQoIjxhIGhyZWY9XCI/ZXZlbnQ9am1jX2V2ZW50X21hbmFnZXIm IzM4O3N0ZXA9Y2F0ZWdvcnlfbWFuYWdlclwiIGNsYXNzPVwibmF2bGlua1wiPkNhdGVnb3J5 IE1hbmFnZXI8L2E+IikudGQoIjxhIGhyZWY9XCI/ZXZlbnQ9am1jX2V2ZW50X21hbmFnZXIm IzM4O3N0ZXA9ZmVlZF9tYW5hZ2VyXCIgY2xhc3M9XCJuYXZsaW5rXCI+UlNTIEZlZWQ8L2E+ IikpOwoJCSR0b3BfbWVudVsnZXZlbnRzJ10gPSB0cih0ZCgiIikudGQoIjxhIGhyZWY9XCI/ ZXZlbnQ9am1jX2V2ZW50X21hbmFnZXImIzM4O3N0ZXA9ZXZlbnRfYWRkXCIgY2xhc3M9XCJu YXZsaW5rXCI+QWRkIEV2ZW50PC9hPiIpLnRkKCI8YSBocmVmPVwiP2V2ZW50PWptY19ldmVu dF9tYW5hZ2VyXCIgY2xhc3M9XCJuYXZsaW5rXCI+RXZlbnQgTGlzdGluZzwvYT4iKS50ZCgi IikpOwoJCSR0b3BfbWVudVsndmVudWVzJ10gPSB0cih0ZCgiIikudGQoIjxhIGhyZWY9XCI/ ZXZlbnQ9am1jX2V2ZW50X21hbmFnZXImIzM4O3N0ZXA9dmVudWVfYWRkXCIgY2xhc3M9XCJu YXZsaW5rXCI+QWRkIFZlbnVlPC9hPiIpLnRkKCI8YSBocmVmPVwiP2V2ZW50PWptY19ldmVu dF9tYW5hZ2VyJiMzODtzdGVwPXZlbnVlX21hbmFnZXJcIiBjbGFzcz1cIm5hdmxpbmtcIj5W ZW51ZSBMaXN0aW5nPC9hPiIpLnRkKCIiKSk7CgkJJHRvcF9tZW51WydjYXRlZ29yaWVzJ10g PSB0cih0ZCgiIikudGQoIjxhIGhyZWY9XCI/ZXZlbnQ9am1jX2V2ZW50X21hbmFnZXImIzM4 O3N0ZXA9Y2F0ZWdvcnlfYWRkXCIgY2xhc3M9XCJuYXZsaW5rXCI+QWRkIENhdGVnb3J5PC9h PiIpLnRkKCI8YSBocmVmPVwiP2V2ZW50PWptY19ldmVudF9tYW5hZ2VyJiMzODtzdGVwPWNh dGVnb3J5X21hbmFnZXJcIiBjbGFzcz1cIm5hdmxpbmtcIj5DYXRlZ29yeSBMaXN0aW5nPC9h PiIpLnRkKCIiKSk7CgkJJHRvcF9tZW51Wydyc3NfZmVlZHMnXSA9IHRyKHRkY3MoIlRoaXMg ZmVhdHVyZSBpcyB5ZXQgdG8gYmUgaW1wbGVtZW50ZWQuIFNvcnJ5IGd1eXMgOigiLDQpKTsK CgkJLy8gT3V0cHV0IHRoZSB0b3AgZm9yIGRlYnVnZ2luZyAtIHdpbGwgc3RheSBVTlRJTCBm dWxsIHJlbGVhc2UKCQlwYWdldG9wKCJUZXh0cGF0dGVybiIsICJFdmVudDogJGV2ZW50OyBT dGVwOiAkc3RlcC4iKTsKCgkJLy8gSHVnIGV2ZXJ5dGhpbmcgaW4gYSBuaWNlIGxpdHRsZSBE SVYhCgkJZWNobyAiPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6M2VtOyBtYXJnaW46IGF1dG87 IHRleHQtYWxpZ246IGNlbnRlclwiPlxyXG4iOwoKCQkvLyBSdW4gdGhlIGluc3RhbGxlciB0 byBlbnN1cmUgdGhhdCB0YWJsZXMgZXhpc3QhCgkJLy8gUmV0dXJucyBlcnJvcnMgKGlmIGFu eSkKCQllY2hvIGptY19ldmVudF9tYW5hZ2VyX2luc3RhbGwoKTsKCgkJLyogQ2FzZSBHdWlk ZQoJCQlWZW51ZXMKCQkJCXZlbnVlX21hbmFnZXIKCQkJCQlMaXN0aW5nIG9mIHZlbnVlcyBh bmQgc3VibGluayB0byBhZGQgc2VjdGlvbnMKCQkJCXZlbnVlX2FkZAoJCQkJCUFkZCBhIG5l dyB2ZW51ZSB0byB0aGUgZXhpc3RpbmcgbGlzdAoJCQkJdmVudWVfcG9zdAoJCQkJCU5ldyB2 ZW51ZSBpcyBlbnRlcmVkIGludG8gdGhlIGRhdGFiYXNlCgkJCQl2ZW51ZV9lZGl0CgkJCQkJ RWRpdCBhbiBleGlzdGluZyBlbnRyeQoJCQkJdmVudWVfc2F2ZQoJCQkJCVVwb24gY29tcGxl dGlvbiBvZiBlZGl0aW5nIHdpbGwgc2F2ZSBjb250ZW50cwoJCQkJdmVudWVfbXVsdGlfZWRp dAoJCQkJCURlbGV0aW5nIG9mIHZlbnVlcwoJCQlFdmVudHMKCQkJCWRlZmF1bHQKCQkJCQlM aXN0aW5nIG9mIGV2ZW50cyAoZGVmYXVsdCBwYWdlIGZvciB0aGUgcGx1Z2luKS4KCgkJKi8K CQlzd2l0Y2goJHN0ZXApCgkJewoJCQkvKiBfLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t XyAqLwoJCQkvKiAJCVZFTlVFICAgICAgIE1BTkFHRVIJCSAqLwoJCQkvKiAtXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLSAqLwoJCQljYXNlICJ2ZW51ZV9tYW5hZ2VyIjoKCQkJCWVj aG8gdGFnKCJWZW51ZSBNYW5hZ2VyIiwgImgyIik7CgkJCQllY2hvIHN0YXJ0VGFibGUoJ2xp c3QnKTsKCQkJCWVjaG8gJHRvcF9tZW51WydtYWluJ107CgkJCQllY2hvICR0b3BfbWVudVsn dmVudWVzJ107CgkJCQllY2hvIGVuZFRhYmxlKCk7CgkJCQllY2hvIHRhZygiVmVudWVzIiwg ImgzIik7CgkJCQlqbWNfZXZlbnRfbWFuYWdlcl92ZW51ZXMoKTsKCQkJCWJyZWFrOwoJCQlj YXNlICJ2ZW51ZV9hZGQiOgoJCQkJZWNobyB0YWcoIlZlbnVlIE1hbmFnZXIiLCAiaDIiKTsK CQkJCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOwoJCQkJZWNobyAkdG9wX21lbnVbJ21haW4n XTsKCQkJCWVjaG8gJHRvcF9tZW51Wyd2ZW51ZXMnXTsKCQkJCWVjaG8gZW5kVGFibGUoKTsK CQkJCWVjaG8gdGFnKCJWZW51ZXMiLCAiaDMiKTsKCQkJCWptY19ldmVudF9tYW5hZ2VyX3Zl bnVlX2Zvcm0oJHN0ZXApOwoJCQkJYnJlYWs7CgkJCWNhc2UgInZlbnVlX3Bvc3QiOgoJCQkJ ZWNobyB0YWcoIlZlbnVlIE1hbmFnZXIiLCAiaDIiKTsKCQkJCWVjaG8gc3RhcnRUYWJsZSgn bGlzdCcpOwoJCQkJZWNobyAkdG9wX21lbnVbJ21haW4nXTsKCQkJCWVjaG8gJHRvcF9tZW51 Wyd2ZW51ZXMnXTsKCQkJCWVjaG8gZW5kVGFibGUoKTsKCQkJCWlmKCFqbWNfZXZlbnRfbWFu YWdlcl92ZW51ZV9wb3N0KCkpCgkJCQl7CgkJCQkJZWNobyB0YWcoIkVycm9yIFNhdmluZyBU cnkgQWdhaW4iLCAiaDMiKTsKCQkJCQlqbWNfZXZlbnRfbWFuYWdlcl92ZW51ZV9mb3JtKCRz dGVwLCB0cnVlKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvIHRhZygiVmVudWUg TGlzdGluZyIsICJoMyIpOwoJCQkJCWptY19ldmVudF9tYW5hZ2VyX3ZlbnVlcygpOwoJCQkJ fQoJCQkJYnJlYWs7CgkJCWNhc2UgInZlbnVlX2VkaXQiOgoJCQkJZWNobyB0YWcoIlZlbnVl IE1hbmFnZXIiLCAiaDIiKTsKCQkJCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOwoJCQkJZWNo byAkdG9wX21lbnVbJ21haW4nXTsKCQkJCWVjaG8gJHRvcF9tZW51Wyd2ZW51ZXMnXTsKCQkJ CWVjaG8gZW5kVGFibGUoKTsKCQkJCWVjaG8gdGFnKCJFZGl0IFZlbnVlIiwgImgzIik7CgkJ CQlqbWNfZXZlbnRfbWFuYWdlcl92ZW51ZV9mb3JtKCRzdGVwLCB0cnVlKTsKCQkJCWJyZWFr OwoJCQljYXNlICJ2ZW51ZV9zYXZlIjoKCQkJCWVjaG8gdGFnKCJWZW51ZSBNYW5hZ2VyIiwg ImgyIik7CgkJCQllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsKCQkJCWVjaG8gJHRvcF9tZW51 WydtYWluJ107CgoJCQkJZWNobyAkdG9wX21lbnVbJ3ZlbnVlcyddOwoJCQkJZWNobyBlbmRU YWJsZSgpOwoJCQkJaWYoIWptY19ldmVudF9tYW5hZ2VyX3ZlbnVlX3NhdmUoKSkKCQkJCXsK CQkJCQllY2hvIHRhZygiRXJyb3IgU2F2aW5nIFRyeSBBZ2FpbiIsICJoMyIpOwoJCQkJCWpt Y19ldmVudF9tYW5hZ2VyX3ZlbnVlX2Zvcm0oJHN0ZXAsIHRydWUpOwoJCQkJfQoJCQkJZWxz ZQoJCQkJewoJCQkJCWVjaG8gdGFnKCJWZW51ZSBMaXN0aW5nIiwgImgzIik7CgkJCQkJam1j X2V2ZW50X21hbmFnZXJfdmVudWVzKCk7CgkJCQl9CgkJCQlicmVhazsKCQkJY2FzZSAidmVu dWVfbXVsdGlfZWRpdCI6CgkJCQlldmVudF9tdWx0aV9lZGl0KCJ0eHBfam1jX2V2ZW50X3Zl bnVlIiwgIklEIik7CgkJCQllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsKCQkJCWVjaG8gJHRv cF9tZW51WydtYWluJ107CgkJCQllY2hvICR0b3BfbWVudVsndmVudWVzJ107CgkJCQllY2hv IGVuZFRhYmxlKCk7CgkJCQllY2hvIHRhZygiQ2F0ZWdvcnkgTGlzdGluZyIsICJoMyIpOwoJ CQkJam1jX2V2ZW50X21hbmFnZXJfdmVudWVzKCk7CgkJCQlicmVhazsKCQkJY2FzZSAiZXZl bnRfdmVudWVfY29tbWVudHMiOgoJCQkJZWNobyB0cih0ZCgiVG8gY29tZSIpKTsKCQkJCWJy ZWFrOwoJCQkvKiBfLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJCQkvKiAJCUNB VEVHT1JZICAgTUFOQUdFUgkJICovCgkJCS8qIC1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tICovCgkJCWNhc2UgImNhdGVnb3J5X21hbmFnZXIiOgoJCQkJZWNobyB0YWcoIkNhdGVn b3J5IE1hbmFnZXIiLCAiaDIiKTsKCQkJCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOwoJCQkJ ZWNobyAkdG9wX21lbnVbJ21haW4nXTsKCQkJCWVjaG8gJHRvcF9tZW51WydjYXRlZ29yaWVz J107CgkJCQllY2hvIGVuZFRhYmxlKCk7CgkJCQllY2hvIHRhZygiQ2F0ZWdvcmllcyIsICJo MyIpOwoJCQkJam1jX2V2ZW50X21hbmFnZXJfY2F0ZWdvcmllcygpOwoJCQkJYnJlYWs7CgkJ CWNhc2UgImNhdGVnb3J5X2FkZCI6CgkJCQllY2hvIHRhZygiVmVudWUgTWFuYWdlciIsICJo MiIpOwoJCQkJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7CgkJCQllY2hvICR0b3BfbWVudVsn bWFpbiddOwoJCQkJZWNobyAkdG9wX21lbnVbJ2NhdGVnb3JpZXMnXTsKCQkJCWVjaG8gZW5k VGFibGUoKTsKCQkJCWVjaG8gdGFnKCJWZW51ZXMiLCAiaDMiKTsKCQkJCWptY19ldmVudF9t YW5hZ2VyX2NhdGVnb3J5X2Zvcm0oJHN0ZXApOwoJCQkJYnJlYWs7CgkJCWNhc2UgImNhdGVn b3J5X3Bvc3QiOgoJCQkJZWNobyB0YWcoIlZlbnVlIE1hbmFnZXIiLCAiaDIiKTsKCQkJCWVj aG8gc3RhcnRUYWJsZSgnbGlzdCcpOwoJCQkJZWNobyAkdG9wX21lbnVbJ21haW4nXTsKCQkJ CWVjaG8gJHRvcF9tZW51WydjYXRlZ29yaWVzJ107CgkJCQllY2hvIGVuZFRhYmxlKCk7CgkJ CQlpZigham1jX2V2ZW50X21hbmFnZXJfY2F0ZWdvcnlfcG9zdCgpKQoJCQkJewoJCQkJCWVj aG8gdGFnKCJFcnJvciBTYXZpbmcgVHJ5IEFnYWluIiwgImgzIik7CgkJCQkJam1jX2V2ZW50 X21hbmFnZXJfY2F0ZWdvcnlfZm9ybSgkc3RlcCwgdHJ1ZSk7CgkJCQl9CgkJCQllbHNlCgkJ CQl7CgkJCQkJZWNobyB0YWcoIlZlbnVlIExpc3RpbmciLCAiaDMiKTsKCQkJCQlqbWNfZXZl bnRfbWFuYWdlcl9jYXRlZ29yaWVzKCk7CgkJCQl9CgkJCQlicmVhazsKCQkJY2FzZSAiY2F0 ZWdvcnlfZWRpdCI6CgkJCQllY2hvIHRhZygiVmVudWUgTWFuYWdlciIsICJoMiIpOwoJCQkJ ZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7CgkJCQllY2hvICR0b3BfbWVudVsnbWFpbiddOwoJ CQkJZWNobyAkdG9wX21lbnVbJ2NhdGVnb3JpZXMnXTsKCQkJCWVjaG8gZW5kVGFibGUoKTsK CQkJCWVjaG8gdGFnKCJFZGl0IFZlbnVlIiwgImgzIik7CgkJCQlqbWNfZXZlbnRfbWFuYWdl cl9jYXRlZ29yeV9mb3JtKCRzdGVwLCB0cnVlKTsKCQkJCWJyZWFrOwoJCQljYXNlICJjYXRl Z29yeV9zYXZlIjoKCQkJCWVjaG8gdGFnKCJWZW51ZSBNYW5hZ2VyIiwgImgyIik7CgkJCQll Y2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsKCQkJCWVjaG8gJHRvcF9tZW51WydtYWluJ107CgkJ CQllY2hvICR0b3BfbWVudVsnY2F0ZWdvcmllcyddOwoJCQkJZWNobyBlbmRUYWJsZSgpOwoJ CQkJaWYoIWptY19ldmVudF9tYW5hZ2VyX2NhdGVnb3J5X3NhdmUoKSkKCQkJCXsKCQkJCQll Y2hvIHRhZygiRXJyb3IgU2F2aW5nIFRyeSBBZ2FpbiIsICJoMyIpOwoJCQkJCWptY19ldmVu dF9tYW5hZ2VyX2NhdGVnb3J5X2Zvcm0oJHN0ZXAsIHRydWUpOwoJCQkJfQoJCQkJZWxzZQoJ CQkJewoJCQkJCWVjaG8gdGFnKCJWZW51ZSBMaXN0aW5nIiwgImgzIik7CgkJCQkJam1jX2V2 ZW50X21hbmFnZXJfY2F0ZWdvcmllcygpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCWNhc2UgImNh dGVnb3J5X211bHRpX2VkaXQiOgoJCQkJZXZlbnRfbXVsdGlfZWRpdCgidHhwX2ptY19ldmVu dF9jYXRlZ29yeSIsICJJRCIpOwoJCQkJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7CgkJCQll Y2hvICR0b3BfbWVudVsnbWFpbiddOwoJCQkJZWNobyAkdG9wX21lbnVbJ2NhdGVnb3J5J107 CgkJCQllY2hvIGVuZFRhYmxlKCk7CgkJCQllY2hvIHRhZygiQ2F0ZWdvcnkgTGlzdGluZyIs ICJoMyIpOwoJCQkJam1jX2V2ZW50X21hbmFnZXJfdmVudWVzKCk7CgkJCQlicmVhazsKCQkJ LyogXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8gKi8KCQkJLyogCQlDQVRFR09SWSAg IE1BTkFHRVIJCSAqLwoJCQkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLSAqLwoJ CQljYXNlICJmZWVkX21hbmFnZXIiOgoJCQkJZWNobyB0YWcoIlJTUyBNYW5nZW1lbnQiLCAi aDIiKTsKCQkJCWVjaG8gdGFnKCJTb3JyeSBndXlzLCBzdGlsbCBkZXZlbG9waW5nIHRoaXMg b25lIGFuZCBpcyBzdGlsbCB0byBjb21lLiBJZiB5b3UndmUgZ290IGFueSBpZGVhcyBwbGVh c2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCBldXBoZW1pemVbYXRdZ21haWwuY29tIiwi cCIpOwoJCQkJZWNobyB0YWcoIlJlZ2FyZHMsIEpvZWwgKDxhIGhyZWY9XCJodHRwOi8vZXVw aGVtaXplLm5ldC9cIj5ldXBoZW1pemUubmV0PC9hPikuIiwicCIpOwoJCQkJYnJlYWs7CgkJ CS8qIF8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICovCgkJCS8qIAkJRVZFTlQgICAg ICAgTUFOQUdFUgkJICovCgkJCS8qIC1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tICov CgkJCWNhc2UgImV2ZW50X2FkZCI6CgkJCQllY2hvIHRhZygiRXZlbnQgTWFuYWdlciIsICJo MiIpOwoJCQkJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7CgkJCQllY2hvICR0b3BfbWVudVsn bWFpbiddOwoJCQkJZWNobyAkdG9wX21lbnVbJ2V2ZW50cyddOwoJCQkJZWNobyBlbmRUYWJs ZSgpOwoJCQkJZWNobyB0YWcoIkFkZCBFdmVudCIsICJoMyIpOwoJCQkJam1jX2V2ZW50X21h bmFnZXJfZXZlbnRfZm9ybSgkc3RlcCk7CgkJCQlicmVhazsKCQkJY2FzZSAiZXZlbnRfcG9z dCI6CgkJCQllY2hvIHRhZygiRXZlbnQgTWFuYWdlciIsICJoMiIpOwoJCQkJZWNobyBzdGFy dFRhYmxlKCdsaXN0Jyk7CgkJCQllY2hvICR0b3BfbWVudVsnbWFpbiddOwoJCQkJZWNobyAk dG9wX21lbnVbJ2V2ZW50cyddOwoJCQkJZWNobyBlbmRUYWJsZSgpOwoJCQkJaWYoIWptY19l dmVudF9tYW5hZ2VyX2V2ZW50X3Bvc3QoKSkKCQkJCXsKCQkJCQllY2hvIHRhZygiRXJyb3Ig Q3JlYXRpbmcgVHJ5IEFnYWluIiwgImgzIiwgImVycm9yX3dhcm5pbmciKTsKCQkJCQlqbWNf ZXZlbnRfbWFuYWdlcl9ldmVudF9mb3JtKCRzdGVwKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsK CQkJCQllY2hvIHRhZygiRXZlbnQgTGlzdGluZyIsICJoMyIpOwoJCQkJCWptY19ldmVudF9t YW5hZ2VyX2V2ZW50cygpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCWNhc2UgImV2ZW50X2VkaXQi OgoJCQkJZWNobyB0YWcoIkV2ZW50IE1hbmFnZXIiLCAiaDIiKTsKCQkJCWVjaG8gc3RhcnRU YWJsZSgnbGlzdCcpOwoJCQkJZWNobyAkdG9wX21lbnVbJ21haW4nXTsKCQkJCWVjaG8gJHRv cF9tZW51WydldmVudHMnXTsKCQkJCWVjaG8gZW5kVGFibGUoKTsKCQkJCWVjaG8gdGFnKCJF ZGl0IEV2ZW50IiwgImgzIik7CgkJCQlqbWNfZXZlbnRfbWFuYWdlcl9ldmVudF9mb3JtKCRz dGVwLCB0cnVlKTsKCQkJCWJyZWFrOwoJCQljYXNlICJldmVudF9zYXZlIjoKCQkJCWVjaG8g dGFnKCJFdmVudCBNYW5hZ2VyIiwgImgyIik7CgkJCQllY2hvIHN0YXJ0VGFibGUoJ2xpc3Qn KTsKCQkJCWVjaG8gJHRvcF9tZW51WydtYWluJ107CgkJCQllY2hvICR0b3BfbWVudVsnZXZl bnRzJ107CgkJCQllY2hvIGVuZFRhYmxlKCk7CgkJCQlpZigham1jX2V2ZW50X21hbmFnZXJf ZXZlbnRfc2F2ZSgpKQoJCQkJewoJCQkJCWVjaG8gdGFnKCJFcnJvciBTYXZpbmcgVHJ5IEFn YWluIiwgImgzIik7CgkJCQkJam1jX2V2ZW50X21hbmFnZXJfZXZlbnRfZm9ybSgkc3RlcCwg dHJ1ZSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJZWNobyB0YWcoIkV2ZW50IExpc3Rp bmciLCAiaDMiKTsKCQkJCQlqbWNfZXZlbnRfbWFuYWdlcl9ldmVudHMoKTsKCQkJCX0KCQkJ CWJyZWFrOwoJCQljYXNlICJldmVudF9tdWx0aV9lZGl0IjoKCQkJCWVjaG8gdGFnKCJFdmVu dCBNYW5hZ2VyIiwgImgyIik7CgkJCQlldmVudF9tdWx0aV9lZGl0KCJ0eHBfam1jX2V2ZW50 IiwgIklEIik7CgkJCQllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsKCQkJCWVjaG8gJHRvcF9t ZW51WydtYWluJ107CgkJCQllY2hvICR0b3BfbWVudVsnZXZlbnRzJ107CgkJCQllY2hvIGVu ZFRhYmxlKCk7CgkJCQllY2hvIHRhZygiRXZlbnQgTGlzdGluZyIsICJoMyIpOwoJCQkJam1j X2V2ZW50X21hbmFnZXJfZXZlbnRzKCk7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCWVj aG8gdGFnKCJFdmVudCBNYW5hZ2VyIiwgImgyIik7CgkJCQllY2hvIHN0YXJ0VGFibGUoJ2xp c3QnKTsKCQkJCWVjaG8gJHRvcF9tZW51WydtYWluJ107CgkJCQllY2hvICR0b3BfbWVudVsn ZXZlbnRzJ107CgkJCQllY2hvIGVuZFRhYmxlKCk7CgkJCQllY2hvIHRhZygiRXZlbnQgTGlz dGluZyIsICJoMyIpOwoJCQkJam1jX2V2ZW50X21hbmFnZXJfZXZlbnRzKCk7CgkJCQlicmVh azsKCQl9CgoJCWVjaG8gIjwvZGl2PlxyXG4iOwoJfQoKCS8qIC1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy0gKi8KCS8vIEZ1bmN0aW9uOgkJam1j X2V2ZW50X21hbmFnZXJfZXZlbnRzKCkKCS8vIFVzZToJCQkJRWNob2VzIG91dCB0aGUgYmFz aWMgbGlzdCBvZgoJLy8JCQkJZXZlbnRzIHNlZW4gd2hlbiBmb3IgZGVmYXVsdCBzY3JlZW4K CS8vCQkJCW9mIGptY19ldmVudF9tYW5hZ2VyLgoJLy8gSW5wdXRzOgkJCU5VTEwKCS8vIE91 dHB1dHM6CQkJTlVMTCAoZWNob3MgcmVzcG9uc2VzKQoJLyogXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJZnVuY3Rpb24gam1jX2V2ZW50 X21hbmFnZXJfZXZlbnRzKCkKCXsKCQkvLyBUYWtlbiBmcm9tIGV4aXN0aW5nIFRYUCBDb2Rl CgkJZXh0cmFjdChnZXRfcHJlZnMoKSk7CgkJJGx2YXJzID0gYXJyYXkoInBhZ2UiLCJzb3J0 IiwiZGlyIiwiY3JpdCIsJ21ldGhvZCcpOwoJCWV4dHJhY3QoZ3BzYSgkbHZhcnMpKTsKCQln bG9iYWwgJHN0ZXA7CgoJCS8vIERlZmF1bHQgc29ydCBzdGFydF9EYXRlVGltZSAodGltZSBv ZiBldmVudCBzdGFydGluZykKCQlpZiAoISRzb3J0KSAkc29ydCA9ICJzdGFydF9EYXRlVGlt ZSI7CgkJLy8gRGVmYXVsdCBkaXJlY3Rpb24gb2Ygc29ydDogZGVzY2VuZGluZwoJCWlmICgh JGRpcikgJGRpciA9ICJkZXNjIjsKCQkvLyBTZXQgdGhlIGxpbmsgZm8gaGVhZGVycyB0byB0 aGUgb3Bwb3NpdGUgb2YgdGhlIGRpcmVjdGlvbiAoY291bGQgYmUgb3B0aW1pc2VkKQoJCWlm ICgkZGlyID09ICJkZXNjIikgeyAkbGlua2RpciA9ICJhc2MiOyB9IGVsc2UgeyAkbGlua2Rp ciA9ICJkZXNjIjsgfQoKCQkvLyBHZXQgbnVtYmVyIG9mIGV2ZW50cwoJCSR0b3RhbCA9IGdl dENvdW50KCd0eHBfam1jX2V2ZW50JywiSUQiKTsKCQkvLyBMaW1pdCBjdXJyZW50bHkgc2V0 IHVzaW5nIHBhZ2UncyBsaW1pdAoJCSRsaW1pdCA9ICgkYXJ0aWNsZV9saXN0X3BhZ2VieSkg PyAkYXJ0aWNsZV9saXN0X3BhZ2VieSA6IDI1OwoJCS8vIE51bWVyIG9mIHBhZ2VzIGlzIHRo ZSByb3VuZGVkIHVwIHZhbHVlIG9mIHRoZSB0b3RhbCBlbnRyaWVzIGRpdmlkZWQgYnkgcGFn ZSBsaW1pdAoJCSRudW1QYWdlcyA9IGNlaWwoJHRvdGFsLyRsaW1pdCk7CgkJLy8gU2V0IGRl ZmF1bHQgcGFnZQoJCSRwYWdlID0gKCEkcGFnZSkgPyAxIDogJHBhZ2U7CgoJCS8vIE9mZnNl dCBpcyBzbGlnaHRseSBkaWZmZXJlbnQgdG8gdGhlIHBhZ2UgKHNpbmNlIHdlIHN0YXJ0IHdp dGggdGhlIHplcm90aCByZWNvcmQgb24gcGFnZSBvbmUpCgkJJG9mZnNldCA9ICgkcGFnZSAt IDEpICogJGxpbWl0OwoKCQllY2hvIGptY19uYXZfZm9ybSgnam1jX2V2ZW50X21hbmFnZXIn LCAnJywgJHBhZ2UsICRudW1QYWdlcywgJHNvcnQsICRkaXIpOwoKCQkvLyBTdGFydCBnZXR0 aW5nIHJvd3MKCQkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoCgkJCSIqLCB1bml4X3RpbWVzdGFt cChzdGFydF9EYXRlVGltZSkgYXMgdVN0YXJ0LCB1bml4X3RpbWVzdGFtcChmaW5pc2hfRGF0 ZVRpbWUpIGFzIHVGaW5pc2giLAoJCQkidHhwX2ptY19ldmVudCIsCgkJCSJJRCBvcmRlciBi eSAkc29ydCAkZGlyIGxpbWl0ICRvZmZzZXQsJGxpbWl0IgoJCSk7CgoJCS8vIElmIHRoZXJl IGFyZSByb3dzIHdlJ2xsIG1ha2Ugb3VyIHRhYmxlLiBJdCdkIGJlIG5pY2UgZm9yIGV2ZXJ5 IHNlY29uZCBvbmUgdG8gYmUgYSBsaXR0bGUgYmV0dGVyIHB1dCB0b2dldGhlcgoJCWlmICgk cnMpIHsKCQkJLy8gU3RhcnQgdGhlIGZvcm0gZm9yIG11bHRpIGVkaXRpbmcKCQkJLy8gU3Rh cnQgYSB0YWJsZSB3aXRoIHRoZSBjbGFzcyAnbGlzdCcKCQkJLy8gU2V0IHVwIHRoZSBoZWFk ZXJzIGZvciB0aGUgY29sdW1ucwoJCQllY2hvICc8Zm9ybSBhY3Rpb249ImluZGV4LnBocCIg bWV0aG9kPSJwb3N0IiBuYW1lPSJsb25nZm9ybSIgb25zdWJtaXQ9InJldHVybiB2ZXJpZnko XCcnLmdUeHQoJ2FyZV95b3Vfc3VyZScpLidcJykiPicsCgkJCXN0YXJ0VGFibGUoJ2xpc3Qn KSwKCQkJJzx0cj4nLAoJCQkJam1jX2V2ZW50X2NvbHVtbl9oZWFkKCdDYXRlZ29yeScsICdD YXRlZ29yeUlEJywgJ2ptY19ldmVudF9tYW5hZ2VyJywgMSwgJGxpbmtkaXIpLAoJCQkJam1j X2V2ZW50X2NvbHVtbl9oZWFkKCdFdmVudCcsICduYW1lJywgJ2ptY19ldmVudF9tYW5hZ2Vy JywgMSwgJGxpbmtkaXIpLAoJCQkJam1jX2V2ZW50X2NvbHVtbl9oZWFkKCdTdGFydCcsICdz dGFydF9EYXRlVGltZScsICdqbWNfZXZlbnRfbWFuYWdlcicsIDEsICRsaW5rZGlyKSwKCQkJ CWptY19ldmVudF9jb2x1bW5faGVhZCgnRmluaXNoJywgJ3N0YXJ0X0RhdGVUaW1lJywgJ2pt Y19ldmVudF9tYW5hZ2VyJywgMSwgJGxpbmtkaXIpLAoJCQkJam1jX2V2ZW50X2NvbHVtbl9o ZWFkKCdWZW51ZScsICdWZW51ZUlEJywgJ2ptY19ldmVudF9tYW5hZ2VyJywgMSwgJGxpbmtk aXIpLAoJCQkJam1jX2V2ZW50X2NvbHVtbl9oZWFkKCdQcmljZScsICdQcmljZScsICdqbWNf ZXZlbnRfbWFuYWdlcicsIDEsICRsaW5rZGlyKSwKCQkJCWptY19ldmVudF9jb2x1bW5faGVh ZCgnUG9zdGVkIEJ5JywgJ0F1dGhvcklEJywgJ2ptY19ldmVudF9tYW5hZ2VyJywgMSwgJGxp bmtkaXIpLAoJCQkJdGQoKSwKCQkJJzwvdHI+JzsKCQkJLy8gRm9yZWFjaCBvZiB0aGUgZW50 cmllcyBjcmVhdGUgaXQncyBpbmZvcm1hdGlvbiBpbiB0aGUgcmVsZXZhbnQgY29sdW1ucwoJ CQl3aGlsZSAoJGEgPSBuZXh0Um93KCRycykpIHsKCQkJCWV4dHJhY3QoJGEpOwoKCQkJCS8v IEdldCB0aGUgdmVudWUgJ25hbWUnIGZyb20gaXQncyBJRAoJCQkJaWYoJHZlbnVlID0gc2Fm ZV9yb3dzKCJuYW1lIiwgInR4cF9qbWNfZXZlbnRfdmVudWUiLCAiSUQgPSAkVmVudWVJRCIp KQoJCQkJCSR2ZW51ZV9uYW1lID0gJHZlbnVlWzBdWyduYW1lJ107CgkJCQllbHNlCgkJCQkJ JHZlbnVlX25hbWUgPSAnJzsKCgkJCQkkYXV0aG9yX25hbWUgPSAkQXV0aG9ySUQ7CgoJCQkJ aWYoJENhdGVnb3J5ID0gc2FmZV9yb3coIm5hbWUiLCJ0eHBfam1jX2V2ZW50X2NhdGVnb3J5 IiwgIklEID0gJENhdGVnb3J5SUQiKSkKCQkJCQkkQ2F0ZWdvcnkgPSAkQ2F0ZWdvcnlbJ25h bWUnXTsKCQkJCWVsc2UKCQkJCQkkQ2F0ZWdveSA9ICIiOwoKCQkJCS8vIEV2ZW50IHN0YXJ0 aW5nIHRpbWVzIGFuZCBkYXRlcyB3aXRoIG9mZnNldAoJCQkJJHN0YXJ0X2V2ZW50ZGF0ZSA9 IGRhdGUoImQgTSB5IiwkdVN0YXJ0ICsgdHpfb2Zmc2V0KCkpOwoJCQkJJHN0YXJ0X2V2ZW50 dGltZSA9IGRhdGUoImc6aSBhIiwkdVN0YXJ0ICsgdHpfb2Zmc2V0KCkpOwoJCQkJLy8gRXZl bnQgZmluaXNoIHRpbWVzIGFuZCBkYXRlcyB3aXRoIG9mZnNldAoJCQkJJGZpbmlzaF9ldmVu dGRhdGUgPSBkYXRlKCJkIE0geSIsJHVGaW5pc2ggKyB0el9vZmZzZXQoKSk7CgkJCQkkZmlu aXNoX2V2ZW50dGltZSA9IGRhdGUoImc6aSBhIiwkdUZpbmlzaCArIHR6X29mZnNldCgpKTsK CgkJCQkvLyBTZXR1cCB0aGUgbGlua3MgdG8gZWRpdGluZy4uLgoJCQkJJGV2ZW50bGluayA9 IGVMaW5rKCdqbWNfZXZlbnRfbWFuYWdlcicsJ2V2ZW50X2VkaXQnLCdJRCcsJElELCRuYW1l KTsKCQkJCSRzdGFydF9ldmVudERhdGVUaW1lID0gZUxpbmsoJ2ptY19ldmVudF9tYW5hZ2Vy JywnZXZlbnRfZWRpdCcsJ0lEJywkSUQsJHN0YXJ0X2V2ZW50ZGF0ZSkuIiBhdCAiLiRzdGFy dF9ldmVudHRpbWU7CgkJCQkkZmluaXNoX2V2ZW50RGF0ZVRpbWUgPSBlTGluaygnam1jX2V2 ZW50X21hbmFnZXInLCdldmVudF9lZGl0JywnSUQnLCRJRCwkZmluaXNoX2V2ZW50ZGF0ZSku IiBhdCAiLiRmaW5pc2hfZXZlbnR0aW1lOwoJCQkJJHZsaW5rID0gZUxpbmsoJ2ptY19ldmVu dF9tYW5hZ2VyJywnZXZlbnRfZWRpdCcsJ0lEJywkSUQsJHZlbnVlX25hbWUpOwoJCQkJJG1v ZGJveCA9IGZJbnB1dCgnY2hlY2tib3gnLCdzZWxlY3RlZFtdJywkSUQsJycsJycsJycsJycs JycsJElEKTsKCgkJCQkvLyBPdXRwdXQgdGhlIHJvdwoJCQkJZWNobyAiPHRyPiIubiwKCQkJ CQl0ZCgkQ2F0ZWdvcnkpLAoJCQkJCXRkKCRldmVudGxpbmspLAoJCQkJCXRkKCRzdGFydF9l dmVudERhdGVUaW1lKSwKCQkJCQl0ZCgkZmluaXNoX2V2ZW50RGF0ZVRpbWUpLAoJCQkJCXRk KCR2bGluaywxMDApLAoJCQkJCXRkKCRQcmljZSw3NSksCgkJCQkJdGQoJGF1dGhvcl9uYW1l KSwKCQkJCQl0ZCgkbW9kYm94KSwKCQkJCSc8L3RyPicubjsKCQkJfQoJCQkvLyBNb2RpZmll ZCBtdWx0aWVkaXQgZm9ybSBiYXNlZCBvbiBleGlzdGluZyBvbmUgYnV0IHdpdGggbW9yZSBv cHRpb25zCgkJCWVjaG8gdHIodGRhKHNlbGVjdF9idXR0b25zKCkuam1jX2V2ZW50X21hbmFn ZXJfbXVsdGllZGl0X2Zvcm0oJ2ptY19ldmVudF9tYW5hZ2VyJywgJ2V2ZW50X211bHRpX2Vk aXQnKSwnIGNvbHNwYW49IjciIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O2JvcmRlcjowcHgi JykpOwoJCQllY2hvICI8L3RhYmxlPjwvZm9ybT4iOwoJCQkvLyBQYWdlYnkgZm9ybQoJCQll Y2hvIHBhZ2VieV9mb3JtKCdsaXN0JywkYXJ0aWNsZV9saXN0X3BhZ2VieSk7CgkJCS8vIFVu c3VyZSB3aHkgLSB3YXMgaW4gdGhlIGFydGljbGUgbGlzdCB2ZXJzaW9uLi4uCgkJCXVuc2V0 KCRzb3J0KTsKCQl9CgkJLy8gSWYgdGhlcmUgZXhpc3RzIG5vIGVudHJpZXMsIGRvbid0IGJv dGggd2l0aCBhbnl0aGluZwoJCWVsc2UKCQkJZWNobyAnQWRkaW5nIEZha2UgRW50cnkuJzsK CX0KCgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tICovCgkvLyBGdW5jdGlvbjoJCWptY19ldmVudF9tYW5hZ2VyX2V2ZW50X2Zvcm0KCS8v IFVzZToJCQkJQ3JlYXRlcywgYW5kIHdoZXJlIGFwcGxpY2FibGUKCS8vCQkJCWZpbGxzIHRo ZSBmb3JtIGZvciBuZXcvdXBkYXRpbmcKCS8vCQkJCWV4aXN0aW5nIGV2ZW50LgoJLy8gSW5w dXRzOgkJCSRzdGVwCQkJVFhQCgkvLwkJCQkJJGV4aXN0aW5nX2luZm8JdHJ1ZXxmYWxzZQoJ Ly8gT3V0cHV0czoJCQlOVUxMIChlY2hvcyByZXNwb25zZXMpCgkvKiBfLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICovCglmdW5jdGlvbiBqbWNf ZXZlbnRfbWFuYWdlcl9ldmVudF9mb3JtKCRzdGVwLCAkZXhpc3RpbmdfaW5mbyA9IGZhbHNl KQoJewoJCS8vIEdldCBJRCBpbmZvcm1hdGlvbiAoaWYgYW55KQoJCWdsb2JhbCAkdmFyc19l dmVudHM7CgkJJGlkID0gKGdwcygnSUQnKT9ncHMoJ0lEJyk6JycpOwoJCS8vIElmIHRoZXJl IGlzIGFuIGlkIGFuZCBlZGl0aW5nIG9yIHNhdmluZyBvciBwb3N0aW5nCgkJaWYoJGlkICYm ICgkc3RlcCA9PSAnZXZlbnRfZWRpdCcgfHwgJHN0ZXAgPT0gJ2V2ZW50X3NhdmUnIHx8ICRz dGVwID09ICdldmVudF9wb3N0JykpIHsKCQkJJHJvdyA9IHNhZmVfcm93KCIqLCB1bml4X3Rp bWVzdGFtcChzdGFydF9EYXRlVGltZSkgYXMgc0RhdGVUaW1lLCB1bml4X3RpbWVzdGFtcChm aW5pc2hfRGF0ZVRpbWUpIGFzIGZEYXRlVGltZSwgdW5peF90aW1lc3RhbXAoTGFzdE1vZCkg YXMgc0xhc3RNb2QiLCAidHhwX2ptY19ldmVudCIsICJJRCA9ICRpZCIpOwoJCQlmb3JlYWNo KCRyb3cgYXMgJG49PiR2KQoJCQkJJCRuID0gc3RyaXBzbGFzaGVzKCR2KTsKCQl9CgkJLy8g SWYgbm8gZXhpc3RpbmcgaW5mb3JtYXRpb24gcmVzZXQgdGhlIHZhcmlhYmxlcwoJCWlmICgh JGV4aXN0aW5nX2luZm8gJiYoJHN0ZXAgPT0gJ2V2ZW50X2FkZCcgb3IgJHN0ZXA9PSdldmVu dF9wb3N0JyBvciAkc3RlcCA9PSAnZXZlbnRfc2F2ZScpKXsKCQkJZm9yZWFjaCgkdmFyc19l dmVudHMgYXMgJHZhcikgewoJCQkJJCR2YXIgPSAnJzsKCQkJfQoJCQkvLyBSZXN0YXJ0IHRo ZSB0aW1lCgkJCSRzRGF0ZVRpbWUgPSB0aW1lKCkgKyB0el9vZmZzZXQoKTsKCQkJJGZEYXRl VGltZSA9IHRpbWUoKSArIHR6X29mZnNldCgpOwoJCX0KCQllbHNlewoJCQkkc0RhdGVUaW1l ICs9IHR6X29mZnNldCgpOwoJCQkkZkRhdGVUaW1lICs9IHR6X29mZnNldCgpOwoJCX0KCgkJ Ly8gQ3JlYXRlIFRleHRib3hlcyBmb3IgdGhlIG90aGVyIGluZm9ybWF0aW9uCgkJJG90aGVy X2JhbmRzID0gJzx0ZXh0YXJlYSBuYW1lPSJPdGhlckJhbmRzIiBjb2xzPSI0MCIgcm93cz0i NyIgdGFiaW5kZXg9IjQiPicuJE90aGVyQmFuZHMuJzwvdGV4dGFyZWE+JzsKCQkkb3RoZXJf aW5mbyA9ICc8dGV4dGFyZWEgbmFtZT0iT3RoZXJJbmZvIiBjb2xzPSI0MCIgcm93cz0iNyIg dGFiaW5kZXg9IjQiPicuJE90aGVySW5mby4nPC90ZXh0YXJlYT4nOwoKCQkvLyBFY2hvIHN0 YXJ0IG9mIGZvcm0gKFJFVklTRSkKCQllY2hvICc8Zm9ybSBhY3Rpb249ImluZGV4LnBocCIg bWV0aG9kPSJwb3N0Ij4nOwoJCWVjaG8gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImV2 ZW50IiB2YWx1ZT0iam1jX2V2ZW50X21hbmFnZXIiIC8+JzsKCQllY2hvICc8aW5wdXQgdHlw ZT0iaGlkZGVuIiBuYW1lPSJzdGVwIiB2YWx1ZT0iJy4oJGlkPydldmVudF9zYXZlJzonZXZl bnRfcG9zdCcpLiciIC8+JzsKCQllY2hvICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJ RCIgdmFsdWU9IicuKCRJRD8kSUQ6JycpLiciIC8+JzsKCgkJLy8gSW5wdXQgSW5mb3JtYXRp b24KCQllY2hvIHN0YXJ0VGFibGUoJ2VkaXQnKTsKCQllY2hvICI8dHI+PHRkPkNhdGVnb3J5 PC90ZD48dGQ+Ii5jYXRlZ29yeWRyb3Bkb3duKCRDYXRlZ29yeUlELCAnNCcpLiI8L3RkPjx0 ZD48L3RkPjwvdHI+IjsKCQllY2hvICI8dHI+PHRkPkV2ZW50IE5hbWU8L3RkPjx0ZD4iLmZJ bnB1dCgndGV4dCcsICduYW1lJywgJG5hbWUsICcnLCAnJywgJycsICc1MCUnLCAnNCcpLiI8 L3RkPjwvdHI+IjsKCQllY2hvICI8dHI+PHRkPlN0YXJ0IERhdGU8L3RkPjx0ZD4iLmRhdGV0 aW1lZHJvcGRvd24oImRheSIsICJldmVudF9zdGFydF9kYXkiLCBkYXRlKCdkJywkc0RhdGVU aW1lKSwgJzQnKS5kYXRldGltZWRyb3Bkb3duKCJtb250aCIsICJldmVudF9zdGFydF9tb250 aCIsIGRhdGUoJ20nLCRzRGF0ZVRpbWUpLCAnNCcpLmRhdGV0aW1lZHJvcGRvd24oInllYXIi LCAiZXZlbnRfc3RhcnRfeWVhciIsIGRhdGUoJ1knLCRzRGF0ZVRpbWUpLCAnNCcpLiI8L3Rk PjwvdHI+IjsKCQllY2hvICI8dHI+PHRkPlN0YXJ0IFRpbWU8L3RkPjx0ZD4iLmRhdGV0aW1l ZHJvcGRvd24oImhvdXIiLCAiZXZlbnRfc3RhcnRfaG91ciIsIGRhdGUoJ0gnLCRzRGF0ZVRp bWUpLCAnNCcpLmRhdGV0aW1lZHJvcGRvd24oIm1pbnV0ZSIsICJldmVudF9zdGFydF9taW51 dGUiLCBkYXRlKCdpJywkc0RhdGVUaW1lKSwgJzQnKS4iPC90ZD48L3RyPiI7CgkJZWNobyAi PHRyPjx0ZD5GaW5pc2ggRGF0ZTwvdGQ+PHRkPiIuZGF0ZXRpbWVkcm9wZG93bigiZGF5Iiwg ImV2ZW50X2ZpbmlzaF9kYXkiLCBkYXRlKCdkJywkZkRhdGVUaW1lKSwgJzQnKS5kYXRldGlt ZWRyb3Bkb3duKCJtb250aCIsICJldmVudF9maW5pc2hfbW9udGgiLCBkYXRlKCdtJywkZkRh dGVUaW1lKSwgJzQnKS5kYXRldGltZWRyb3Bkb3duKCJ5ZWFyIiwgImV2ZW50X2ZpbmlzaF95 ZWFyIiwgZGF0ZSgnWScsJGZEYXRlVGltZSksICc0JykuIjwvdGQ+PC90cj4iOwoJCWVjaG8g Ijx0cj48dGQ+RmluaXNoIFRpbWU8L3RkPjx0ZD4iLmRhdGV0aW1lZHJvcGRvd24oImhvdXIi LCAiZXZlbnRfZmluaXNoX2hvdXIiLCBkYXRlKCdIJywkZkRhdGVUaW1lKSwgJzQnKS5kYXRl dGltZWRyb3Bkb3duKCJtaW51dGUiLCAiZXZlbnRfZmluaXNoX21pbnV0ZSIsIGRhdGUoJ2kn LCRmRGF0ZVRpbWUpLCAnNCcpLiI8L3RkPjwvdHI+IjsKCQllY2hvICI8dHI+PHRkPlZlbnVl PC90ZD48dGQ+Ii52ZW51ZWRyb3Bkb3duKCRWZW51ZUlELCAnNCcpLiI8L3RkPjx0ZD48L3Rk PjwvdHI+IjsKCQllY2hvICI8dHI+PHRkPlByaWNlPC90ZD48dGQ+Ii5mSW5wdXQoJ3RleHQn LCAnUHJpY2UnLCAkUHJpY2UsICcnLCAnJywgJycsICc1MCUnLCAnNCcpLiI8L3RkPjwvdHI+ IjsKCQllY2hvICI8dHI+PHRkPk90aGVyIEJhbmRzPC90ZD48dGQ+Ii4kb3RoZXJfYmFuZHMu IjwvdGQ+PC90cj4iOwoJCWVjaG8gIjx0cj48dGQ+T3RoZXIgSW5mbzwvdGQ+PHRkPiIuJG90 aGVyX2luZm8uIjwvdGQ+PC90cj4iOwoJCWVjaG8gIjx0cj48dGQgY29sc3Bhbj1cIjJcIiBz dHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj4iLmZJbnB1dCgnc3VibWl0JywgJycsICgk SUQ/J1NhdmUgRXZlbnQnOidBZGQgRXZlbnQnKSwgJycsICcnLCAnJywgJzUwJScsICc0Jyku IjwvdGQ+PC90cj4iOwoKICAgIAllY2hvICc8L3RhYmxlPjwvZm9ybT4nOwoJfQoKCS8qIC1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy0gKi8KCS8v IEZ1bmN0aW9uOgkJam1jX2V2ZW50X21hbmFnZXJfZXZlbnRfc2F2ZQoJLy8gVXNlOgkJCQlV cGRhdGVzIGFuIGV4aXN0aW5nIGV2ZW50J3MKCS8vCQkJCWluZm9ybWF0aW9uLgoJLy8gSW5w dXRzOgkJCU5VTEwKCS8vIE91dHB1dHM6CQkJdHJ1ZXxmYWxzZQoJLyogXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJZnVuY3Rpb24gam1j X2V2ZW50X21hbmFnZXJfZXZlbnRfc2F2ZSgpCgl7CgkJZ2xvYmFsICR0eHBfdXNlciwkdmFy cywkdHhwY2ZnOwoJCWdsb2JhbCAkdmFyc19ldmVudHM7CgkJJGNhbGVuZGFyX3N0YXJ0ID0g YXJyYXkoJ2V2ZW50X3N0YXJ0X3llYXInLCAnZXZlbnRfc3RhcnRfbW9udGgnLCAnZXZlbnRf c3RhcnRfZGF5JywgJ2V2ZW50X3N0YXJ0X2hvdXInLCAnZXZlbnRfc3RhcnRfbWludXRlJyk7 CgkJJGNhbGVuZGFyX2ZpbmlzaCA9IGFycmF5KCdldmVudF9maW5pc2hfeWVhcicsICdldmVu dF9maW5pc2hfbW9udGgnLCAnZXZlbnRfZmluaXNoX2RheScsICdldmVudF9maW5pc2hfaG91 cicsICdldmVudF9maW5pc2hfbWludXRlJyk7CgoJCWluY2x1ZGVfb25jZSAkdHhwY2ZnWyd0 eHBhdGgnXS4nL2xpYi9jbGFzc1RleHRpbGUucGhwJzsKCQkkdGV4dGlsZSA9IG5ldyBUZXh0 aWxlKCk7CgoJCWV4dHJhY3QoZ3BzYShhcnJheV9tZXJnZSgkdmFyc19ldmVudHMsJGNhbGVu ZGFyX3N0YXJ0LCRjYWxlbmRhcl9maW5pc2gpKSk7CgoJCSRDYXRlZ29yeUlEID0gJENhdGVn b3J5SUQ/JENhdGVnb3J5SUQ6MDsKCQkkT3RoZXJCYW5kc19odG1sID0gJE90aGVyQmFuZHM/ JHRleHRpbGUtPlRleHRpbGVUaGlzKCRPdGhlckJhbmRzKToiIjsKCQkkT3RoZXJJbmZvX2h0 bWwgPSAkT3RoZXJJbmZvPyR0ZXh0aWxlLT5UZXh0aWxlVGhpcygkT3RoZXJJbmZvKToiIjsK CgkJaWYoIWNoZWNrZGF0ZSgkZXZlbnRfc3RhcnRfbW9udGgsICRldmVudF9zdGFydF9kYXks ICRldmVudF9zdGFydF95ZWFyKSAmJiAhY2hlY2tkYXRlKCRldmVudF9maW5pc2hfbW9udGgs ICRldmVudF9maW5pc2hfZGF5LCAkZXZlbnRfZmluaXNoX3llYXIpKQoJCXsKCQkJZWNobyAi PHNwYW4gY2xhc3M9XCJlcnJvcl93YXJuaW5nXCI+PHN0cm9uZz5EYXRlIEVycm9yOjwvc3Ry b25nPiBUaGVyZSBpcyBub3QgJGV2ZW50X2RheSBkYXlzIGluICRldmVudF9tb250aCAuIFRo ZSBkYXkgaGFzIGJlZW4gcm91bmRlZCB0byB0aGUgbGFzdCBkYXkgb2YgJGV2ZW50X21vbnRo Ljwvc3Bhbj4iOwoJCQkvLyBUbyBkbyB0aGUgZnVuY3Rpb24gaGVyZS4uLgoJCX0KCQkkc0Rh dGVUaW1lVSA9IHN0cnRvdGltZSgkZXZlbnRfc3RhcnRfeWVhci4nLScuJGV2ZW50X3N0YXJ0 X21vbnRoLictJy4kZXZlbnRfc3RhcnRfZGF5LicgJy4kZXZlbnRfc3RhcnRfaG91ci4nOicu JGV2ZW50X3N0YXJ0X21pbnV0ZS4iOjAwIiktdHpfb2Zmc2V0KCk7CgkJJHNEYXRlVGltZSA9 ICJmcm9tX3VuaXh0aW1lKCRzRGF0ZVRpbWVVKSI7CgkJJHNEYXRlVGltZSA9ICJzdGFydF9E YXRlVGltZT0kc0RhdGVUaW1lIjsKCgkJJGZEYXRlVGltZVUgPSBzdHJ0b3RpbWUoJGV2ZW50 X2ZpbmlzaF95ZWFyLictJy4kZXZlbnRfZmluaXNoX21vbnRoLictJy4kZXZlbnRfZmluaXNo X2RheS4nICcuJGV2ZW50X2ZpbmlzaF9ob3VyLic6Jy4kZXZlbnRfZmluaXNoX21pbnV0ZS4i OjAwIiktdHpfb2Zmc2V0KCk7CgkJJGZEYXRlVGltZSA9ICJmcm9tX3VuaXh0aW1lKCRmRGF0 ZVRpbWVVKSI7CgkJJGZEYXRlVGltZSA9ICJmaW5pc2hfRGF0ZVRpbWU9JGZEYXRlVGltZSI7 CgoJCWlmKCRmRGF0ZVRpbWVVID49ICRzRGF0ZVRpbWVVKQoJCXsKCQkJc2FmZV91cGRhdGUo InR4cF9qbWNfZXZlbnQiLAoJCQkJIiRzRGF0ZVRpbWUsCgkJCQkkZkRhdGVUaW1lLAoJCQkJ Q2F0ZWdvcnlJRCA9ICRDYXRlZ29yeUlELAoJCQkJbmFtZSA9ICciLmFkZHNsYXNoZXMoJG5h bWUpLiInLAoJCQkJTGFzdE1vZCA9IG5vdygpLAoJCQkJTGFzdE1vZElEID0gJyIuYWRkc2xh c2hlcygkdHhwX3VzZXIpLiInLAoJCQkJVmVudWVJRCA9ICRWZW51ZUlELAoJCQkJUHJpY2Ug PSAnIi5hZGRzbGFzaGVzKCRQcmljZSkuIicsCgkJCQlPdGhlckJhbmRzID0gJyIuYWRkc2xh c2hlcygkT3RoZXJCYW5kcykuIicsCgkJCQlPdGhlckJhbmRzX2h0bWwgPSAnJE90aGVyQmFu ZHNfaHRtbCcsCgkJCQlPdGhlckluZm8gPSAnIi5hZGRzbGFzaGVzKCRPdGhlckluZm8pLiIn LAoJCQkJT3RoZXJJbmZvX2h0bWwgPSAnJE90aGVySW5mb19odG1sJyIsCgkJCQkiSUQgPSAn JElEJyIpOwoJCX0KCQllbHNlewoJCQllY2hvICI8c3BhbiBjbGFzcz1cImVycm9yX3dhcm5p bmdcIj48c3Ryb25nPkRhdGUgRXJyb3I6PC9zdHJvbmc+IEZpbmlzaCB0aW1lIGJlZm9yZSBz dGFydCB0aW1lLjwvc3Bhbj4iOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlyZXR1cm4gdHJ1 ZTsKCX0KCgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tICovCgkvLyBGdW5jdGlvbjoJCWptY19ldmVudF9tYW5hZ2VyX2V2ZW50X3Bvc3QK CS8vIFVzZToJCQkJQ3JlYXRlcyBhIG5ldyBldmVudCB3aXRoIHVzZXIKCS8vCQkJCWluZm9y bWF0aW9uLgoJLy8gSW5wdXRzOgkJCU5VTEwKCS8vIE91dHB1dHM6CQkJdHJ1ZXxmYWxzZQoJ LyogXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAq LwoJZnVuY3Rpb24gam1jX2V2ZW50X21hbmFnZXJfZXZlbnRfcG9zdCgpCgl7CgkJZ2xvYmFs ICR0eHBfdXNlciwkdmFycywkdHhwY2ZnOwoJCWdsb2JhbCAkdmFyc19ldmVudHM7CgkJJGNh bGVuZGFyX3N0YXJ0ID0gYXJyYXkoJ2V2ZW50X3N0YXJ0X3llYXInLCAnZXZlbnRfc3RhcnRf bW9udGgnLCAnZXZlbnRfc3RhcnRfZGF5JywgJ2V2ZW50X3N0YXJ0X2hvdXInLCAnZXZlbnRf c3RhcnRfbWludXRlJyk7CgkJJGNhbGVuZGFyX2ZpbmlzaCA9IGFycmF5KCdldmVudF9maW5p c2hfeWVhcicsICdldmVudF9maW5pc2hfbW9udGgnLCAnZXZlbnRfZmluaXNoX2RheScsICdl dmVudF9maW5pc2hfaG91cicsICdldmVudF9maW5pc2hfbWludXRlJyk7CgoJCWluY2x1ZGVf b25jZSAkdHhwY2ZnWyd0eHBhdGgnXS4nL2xpYi9jbGFzc1RleHRpbGUucGhwJzsKCQkkdGV4 dGlsZSA9IG5ldyBUZXh0aWxlKCk7CgoJCWV4dHJhY3QoZ3BzYShhcnJheV9tZXJnZSgkdmFy c19ldmVudHMsJGNhbGVuZGFyX3N0YXJ0LCRjYWxlbmRhcl9maW5pc2gpKSk7CgoJCSRDYXRl Z29yeUlEID0gJENhdGVnb3J5SUQ/JENhdGVnb3J5SUQ6MDsKCQkkT3RoZXJCYW5kc19odG1s ID0gJE90aGVyQmFuZHM/JHRleHRpbGUtPlRleHRpbGVUaGlzKCRPdGhlckJhbmRzKToiIjsK CQkkT3RoZXJJbmZvX2h0bWwgPSAkT3RoZXJJbmZvPyR0ZXh0aWxlLT5UZXh0aWxlVGhpcygk T3RoZXJJbmZvKToiIjsKCgkJaWYoIWNoZWNrZGF0ZSgkZXZlbnRfc3RhcnRfbW9udGgsICRl dmVudF9zdGFydF9kYXksICRldmVudF9zdGFydF95ZWFyKSAmJiAhY2hlY2tkYXRlKCRldmVu dF9maW5pc2hfbW9udGgsICRldmVudF9maW5pc2hfZGF5LCAkZXZlbnRfZmluaXNoX3llYXIp KQoJCXsKCQkJZWNobyAiPHNwYW4gY2xhc3M9XCJlcnJvcl93YXJuaW5nXCI+PHN0cm9uZz5E YXRlIEVycm9yOjwvc3Ryb25nPiBUaGVyZSBpcyBub3QgJGV2ZW50X2RheSBkYXlzIGluICRl dmVudF9tb250aCAuIFRoZSBkYXkgaGFzIGJlZW4gcm91bmRlZCB0byB0aGUgbGFzdCBkYXkg b2YgJGV2ZW50X21vbnRoLjwvc3Bhbj4iOwoJCQkvLyBUbyBkbyB0aGUgZnVuY3Rpb24gaGVy ZS4uLgoJCX0KCQkkc0RhdGVUaW1lID0gc3RydG90aW1lKCRldmVudF9zdGFydF95ZWFyLict Jy4kZXZlbnRfc3RhcnRfbW9udGguJy0nLiRldmVudF9zdGFydF9kYXkuJyAnLiRldmVudF9z dGFydF9ob3VyLic6Jy4kZXZlbnRfc3RhcnRfbWludXRlLiI6MDAiKS10el9vZmZzZXQoKTsK CQkkc0RhdGVUaW1lID0gImZyb21fdW5peHRpbWUoJHNEYXRlVGltZSkiOwoJCSRzRGF0ZVRp bWUgPSAic3RhcnRfRGF0ZVRpbWU9JHNEYXRlVGltZSI7CgoJCSRmRGF0ZVRpbWUgPSBzdHJ0 b3RpbWUoJGV2ZW50X2ZpbmlzaF95ZWFyLictJy4kZXZlbnRfZmluaXNoX21vbnRoLictJy4k ZXZlbnRfZmluaXNoX2RheS4nICcuJGV2ZW50X2ZpbmlzaF9ob3VyLic6Jy4kZXZlbnRfZmlu aXNoX21pbnV0ZS4iOjAwIiktdHpfb2Zmc2V0KCk7CgkJJGZEYXRlVGltZSA9ICJmcm9tX3Vu aXh0aW1lKCRmRGF0ZVRpbWUpIjsKCQkkZkRhdGVUaW1lID0gImZpbmlzaF9EYXRlVGltZT0k ZkRhdGVUaW1lIjsKCgkJc2FmZV9pbnNlcnQoInR4cF9qbWNfZXZlbnQiLAoJCSIkc0RhdGVU aW1lLAoJCSRmRGF0ZVRpbWUsCgkJQ2F0ZWdvcnlJRCA9ICRDYXRlZ29yeUlELAoJCW5hbWUg PSAnIi5hZGRzbGFzaGVzKCRuYW1lKS4iJywKCQlBdXRob3JJRCA9ICciLmFkZHNsYXNoZXMo JHR4cF91c2VyKS4iJywKCQlWZW51ZUlEID0gJFZlbnVlSUQsCgkJUHJpY2UgPSAnIi5hZGRz bGFzaGVzKCRQcmljZSkuIicsCgkJT3RoZXJCYW5kcyA9ICciLmFkZHNsYXNoZXMoJE90aGVy QmFuZHMpLiInLAoJCU90aGVyQmFuZHNfaHRtbCA9ICckT3RoZXJCYW5kc19odG1sJywKCQlP dGhlckluZm8gPSAnIi5hZGRzbGFzaGVzKCRPdGhlckluZm8pLiInLAoJCU90aGVySW5mb19o dG1sID0gJyRPdGhlckluZm9faHRtbCciKTsKCgkJcmV0dXJuIHRydWU7Cgl9CgoJLyogLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLSAqLwoJLy8g RnVuY3Rpb246CQlqbWNfZXZlbnRfbWFuYWdlcl92ZW51ZXMoKQoJLy8gVXNlOgkJCQlFY2hv ZXMgb3V0IHRoZSBiYXNpYyBsaXN0IG9mCgkvLwkJCQl2ZW51ZXMuCgkvLyBJbnB1dHM6CQkJ TlVMTAoJLy8gT3V0cHV0czoJCQlOVUxMIChlY2hvcyByZXNwb25zZXMpCgkvKiBfLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICovCglmdW5jdGlv biBqbWNfZXZlbnRfbWFuYWdlcl92ZW51ZXMoKQoJewoJCWV4dHJhY3QoZ2V0X3ByZWZzKCkp OwoJCSRsdmFycyA9IGFycmF5KCJwYWdlIiwic29ydCIsImRpciIsImNyaXQiLCdtZXRob2Qn KTsKCQlleHRyYWN0KGdwc2EoJGx2YXJzKSk7CgkJZ2xvYmFsICRzdGVwOwoKCQlpZiAoISRz b3J0KSAkc29ydCA9ICJuYW1lIjsKCQlpZiAoISRkaXIpICRkaXIgPSAiYXNjIjsKCQlpZiAo JGRpciA9PSAiYXNjIikgeyAkbGlua2RpciA9ICJkZXNjIjsgfSBlbHNlIHsgJGxpbmtkaXIg PSAiYXNjIjsgfQoKCQkkdG90YWwgPSBnZXRDb3VudCgndHhwX2ptY19ldmVudF92ZW51ZScs IjEiKTsKCQkkbGltaXQgPSAoJGFydGljbGVfbGlzdF9wYWdlYnkpID8gJGFydGljbGVfbGlz dF9wYWdlYnkgOiAyNTsKCQkkbnVtUGFnZXMgPSBjZWlsKCR0b3RhbC8kbGltaXQpOwoJCSRw YWdlID0gKCEkcGFnZSkgPyAxIDogJHBhZ2U7CgoJCSRvZmZzZXQgPSAoJHBhZ2UgLSAxKSAq ICRsaW1pdDsKCgkJZWNobyBqbWNfbmF2X2Zvcm0oJ2ptY19ldmVudF9tYW5hZ2VyJywgJ3Zl bnVlX21hbmFnZXInLCAkcGFnZSwgJG51bVBhZ2VzLCAkc29ydCwgJGRpcik7CgoJCSRycyA9 IHNhZmVfcm93c19zdGFydCgKCQkJIioiLAoJCQkidHhwX2ptY19ldmVudF92ZW51ZSIsCgkJ CSJJRCBvcmRlciBieSAkc29ydCAkZGlyIGxpbWl0ICRvZmZzZXQsJGxpbWl0IgoJCSk7CgoJ CWlmICgkcnMpIHsKCQkJZWNobyAnPGZvcm0gYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0i cG9zdCIgbmFtZT0ibG9uZ2Zvcm0iIG9uc3VibWl0PSJyZXR1cm4gdmVyaWZ5KFwnJy5nVHh0 KCdhcmVfeW91X3N1cmUnKS4nXCcpIj4nLAoJCQlzdGFydFRhYmxlKCdsaXN0JyksCgkJCSc8 dHI+JywKCQkJCWptY19ldmVudF9jb2x1bW5faGVhZCgnQ2F0ZWdvcnknLCAnQ2F0ZWdvcnlJ RCcsICdqbWNfZXZlbnRfbWFuYWdlcicsIDAsICRsaW5rZGlyLCAndmVudWVfbWFuYWdlcicp LAoJCQkJam1jX2V2ZW50X2NvbHVtbl9oZWFkKCdJbWFnZScsICdpbWFnZVRodW1iJywgJ2pt Y19ldmVudF9tYW5hZ2VyJywgMCwgJGxpbmtkaXIsICd2ZW51ZV9tYW5hZ2VyJyksCgkJCQlq bWNfZXZlbnRfY29sdW1uX2hlYWQoJ1ZlbnVlJywgJ25hbWUnLCAnam1jX2V2ZW50X21hbmFn ZXInLCAxLCAkbGlua2RpciwgJ3ZlbnVlX21hbmFnZXInKSwKCQkJCWptY19ldmVudF9jb2x1 bW5faGVhZCgnU3RhdGUnLCAnc3RhdGUnLCAnam1jX2V2ZW50X21hbmFnZXInLCAxLCAkbGlu a2RpciwgJ3ZlbnVlX21hbmFnZXInKSwKCQkJCWptY19ldmVudF9jb2x1bW5faGVhZCgnUGhv bmUnLCAncGhvbmUnLCAnam1jX2V2ZW50X21hbmFnZXInLCAxLCAkbGlua2RpciwgJ3ZlbnVl X21hbmFnZXInKSwKCQkJCWptY19ldmVudF9jb2x1bW5faGVhZCgnZW1haWwnLCAnZW1haWwn LCAnam1jX2V2ZW50X21hbmFnZXInLCAxLCAkbGlua2RpciwgJ3ZlbnVlX21hbmFnZXInKSwK CQkJCWptY19ldmVudF9jb2x1bW5faGVhZCgnV2ViIFBhZ2UnLCAndXJsJywgJ2ptY19ldmVu dF9tYW5hZ2VyJywgMSwgJGxpbmtkaXIsICd2ZW51ZV9tYW5hZ2VyJyksCgkJCQl0ZCgpLAoJ CQknPC90cj4nOwoJCQl3aGlsZSAoJGEgPSBuZXh0Um93KCRycykpIHsKCQkJCWV4dHJhY3Qo JGEpOwoKCQkJCWlmKCRDYXRlZ29yeSA9IHNhZmVfcm93KCJuYW1lIiwidHhwX2ptY19ldmVu dF9jYXRlZ29yeSIsICJJRCA9ICRDYXRlZ29yeUlEIikpCgkJCQkJJENhdGVnb3J5ID0gJENh dGVnb3J5WyduYW1lJ107CgkJCQllbHNlCgkJCQkJJENhdGVnb3kgPSAiIjsKCgkJCQkkaW1h Z2UgPSBpbWFnZXRhZygkaW1hZ2VJRCk7CgoJCQkJJGltYWdlbGluayA9IGVMaW5rKCdqbWNf ZXZlbnRfbWFuYWdlcicsJ3ZlbnVlX2VkaXQnLCdJRCcsJElELCRpbWFnZSk7OwoJCQkJJG5h bWVsaW5rID0gZUxpbmsoJ2ptY19ldmVudF9tYW5hZ2VyJywndmVudWVfZWRpdCcsJ0lEJywk SUQsJG5hbWUpOwoJCQkJJG1vZGJveCA9IGZJbnB1dCgnY2hlY2tib3gnLCdzZWxlY3RlZFtd JywkSUQsJycsJycsJycsJycsJycsJElEKTsKCgkJCQllY2hvICI8dHI+Ii5uLAoJCQkJCXRk KCRDYXRlZ29yeSksCgkJCQkJdGQoJGltYWdlbGluayksCgkJCQkJdGQoJG5hbWVsaW5rKSwK CQkJCQl0ZCgkc3RhdGUpLAoJCQkJCXRkKCRwaG9uZSksCgkJCQkJdGQoKCRlbWFpbD8iPGEg aHJlZj1cIm1haWx0bzokZW1haWxcIj5lbWFpbCBsaW5rPC9hPiI6IiIpKSwKCQkJCQl0ZCgo JHVybD8iPGEgaHJlZj1cIiR1cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIj5leHRlcm5hbCBsaW5r PC9hPiI6IiIpKSwKCQkJCQl0ZCgkbW9kYm94KSwKCQkJCSc8L3RyPicubjsKCQkJfQoJCQll Y2hvIHRyKHRkYShzZWxlY3RfYnV0dG9ucygpLmptY19ldmVudF9tYW5hZ2VyX211bHRpZWRp dF9mb3JtKCdqbWNfZXZlbnRfbWFuYWdlcicsICd2ZW51ZV9tdWx0aV9lZGl0JyksJyBjb2xz cGFuPSI3IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDtib3JkZXI6MHB4IicpKTsKCQkJZWNo byAiPC90YWJsZT48L2Zvcm0+IjsKCQkJZWNobyBwYWdlYnlfZm9ybSgnbGlzdCcsJGFydGlj bGVfbGlzdF9wYWdlYnkpOwoJCQl1bnNldCgkc29ydCk7CgkJfQoJCWVsc2UKCQkJZWNobyAn Tm8gZW50cmllcyBhdmFpbGFibGUuJzsKCX0KCgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tICovCgkvLyBGdW5jdGlvbjoJCWptY19ldmVu dF9tYW5hZ2VyX3ZlbnVlX2Zvcm0KCS8vIFVzZToJCQkJQ3JlYXRlcywgYW5kIHdoZXJlIGFw cGxpY2FibGUKCS8vCQkJCWZpbGxzIHRoZSBmb3JtIGZvciBuZXcvdXBkYXRpbmcKCS8vCQkJ CWV4aXN0aW5nIHZlbnVlLgoJLy8gSW5wdXRzOgkJCSRzdGVwCQkJVFhQCgkvLwkJCQkJJGV4 aXN0aW5nX2luZm8JdHJ1ZXxmYWxzZQoJLy8gT3V0cHV0czoJCQlOVUxMIChlY2hvcyByZXNw b25zZXMpCgkvKiBfLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fICovCglmdW5jdGlvbiBqbWNfZXZlbnRfbWFuYWdlcl92ZW51ZV9mb3JtKCRzdGVw LCAkZXhpc3RpbmdfaW5mbyA9IGZhbHNlKQoJewoJCWdsb2JhbCAkdmFyc192ZW51ZXM7CgkJ JGlkID0gKGdwcygnSUQnKT9ncHMoJ0lEJyk6JycpOwoJCWlmKCRpZCAmJiAoJHN0ZXA9PSd2 ZW51ZV9lZGl0JyB8fCAkc3RlcD09J3ZlbnVlX3NhdmUnIHx8ICRzdGVwPT0ndmVudWVfcG9z dCcpKSB7CgkJCSRyb3cgPSAoc2FmZV9yb3coIioiLCAidHhwX2ptY19ldmVudF92ZW51ZSIs ICJJRCA9ICckaWQnIikpOwoJCQlmb3JlYWNoKCRyb3cgYXMgJG49PiR2KQoJCQkJJCRuID0g c3RyaXBzbGFzaGVzKCR2KTsKCQl9CgoJCWlmICghJGV4aXN0aW5nX2luZm8pewoJCQlmb3Jl YWNoKCR2YXJzX3ZlbnVlcyBhcyAkdmFyKSB7CgkJCQkkJHZhciA9ICcnOwoJCQl9CgkJCSRz RGF0ZVRpbWUgPSB0aW1lKCk7CgkJfQoKCQkkb3RoZXJfaW5mbyA9ICc8dGV4dGFyZWEgbmFt ZT0iT3RoZXJJbmZvIiBjb2xzPSI0MCIgcm93cz0iNyIgdGFiaW5kZXg9IjQiPicuJE90aGVy SW5mby4nPC90ZXh0YXJlYT4nOwoKCQllY2hvICc8Zm9ybSBhY3Rpb249ImluZGV4LnBocCIg bWV0aG9kPSJwb3N0Ij4nOwoJCWVjaG8gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImV2 ZW50IiB2YWx1ZT0iam1jX2V2ZW50X21hbmFnZXIiIC8+JzsKCQllY2hvICc8aW5wdXQgdHlw ZT0iaGlkZGVuIiBuYW1lPSJzdGVwIiB2YWx1ZT0iJy4oJGV4aXN0aW5nX2luZm8/J3ZlbnVl X3NhdmUnOid2ZW51ZV9wb3N0JykuJyIgLz4nOwoJCWVjaG8gJzxpbnB1dCB0eXBlPSJoaWRk ZW4iIG5hbWU9IklEIiB2YWx1ZT0iJy4oJElEPyRJRDonJykuJyIgLz4nOwoKCQllY2hvIHN0 YXJ0VGFibGUoJ2VkaXQnKTsKCQllY2hvICI8dHI+PHRkPkNhdGVnb3J5PC90ZD48dGQ+Ii5j YXRlZ29yeWRyb3Bkb3duKCRDYXRlZ29yeUlELCAnNCcpLiI8L3RkPjx0ZD48L3RkPjwvdHI+ IjsKCQllY2hvICI8dHI+PHRkPk5hbWU8L3RkPjx0ZD4iLmZJbnB1dCgndGV4dCcsICduYW1l JywgJG5hbWUsICcnLCAnJywgJycsICc1MCUnLCAnNCcpLiI8L3RkPjwvdHI+IjsKCQllY2hv ICI8dHI+PHRkPkFkZHJlc3MgMTwvdGQ+PHRkPiIuZklucHV0KCd0ZXh0JywgJ2FkZHJlc3Mx JywgJGFkZHJlc3MxLCAnJywgJycsICcnLCAnNTAlJywgJzQnKS4iPC90ZD48L3RyPiI7CgkJ ZWNobyAiPHRyPjx0ZD5BZGRyZXNzIDI8L3RkPjx0ZD4iLmZJbnB1dCgndGV4dCcsICdhZGRy ZXNzMicsICRhZGRyZXNzMiwgJycsICcnLCAnJywgJzUwJScsICc0JykuIjwvdGQ+PC90cj4i OwoJCWVjaG8gIjx0cj48dGQ+U3VidXJiPC90ZD48dGQ+Ii5mSW5wdXQoJ3RleHQnLCAnc3Vi dXJiJywgJHN1YnVyYiwgJycsICcnLCAnJywgJzUwJScsICc0JykuIjwvdGQ+PC90cj4iOwoJ CWVjaG8gIjx0cj48dGQ+U3RhdGU8L3RkPjx0ZD4iLmZJbnB1dCgndGV4dCcsICdzdGF0ZScs ICRzdGF0ZSwgJycsICcnLCAnJywgJzUwJScsICc0JykuIjwvdGQ+PC90cj4iOwoJCWVjaG8g Ijx0cj48dGQ+Q291bnRyeTwvdGQ+PHRkPiIuZklucHV0KCd0ZXh0JywgJ2NvdW50cnknLCAk Y291bnRyeSwgJycsICcnLCAnJywgJzUwJScsICc0JykuIjwvdGQ+PC90cj4iOwoJCWVjaG8g Ijx0cj48dGQ+UG9zdGNvZGU8L3RkPjx0ZD4iLmZJbnB1dCgndGV4dCcsICdwb3N0Y29kZScs ICRwb3N0Y29kZSwgJycsICcnLCAnJywgJzUwJScsICc0JykuIjwvdGQ+PC90cj4iOwoJCWVj aG8gIjx0cj48dGQ+UGhvbmU8L3RkPjx0ZD4iLmZJbnB1dCgndGV4dCcsICdwaG9uZScsICRw aG9uZSwgJycsICcnLCAnJywgJzUwJScsICc0JykuIjwvdGQ+PC90cj4iOwoJCWVjaG8gIjx0 cj48dGQ+ZW1haWw8L3RkPjx0ZD4iLmZJbnB1dCgndGV4dCcsICdlbWFpbCcsICRlbWFpbCwg JycsICcnLCAnJywgJzUwJScsICc0JykuIjwvdGQ+PC90cj4iOwoJCWVjaG8gIjx0cj48dGQ+ dXJsPC90ZD48dGQ+Ii5mSW5wdXQoJ3RleHQnLCAndXJsJywgJHVybCwgJycsICcnLCAnJywg JzUwJScsICc0JykuIjwvdGQ+PC90cj4iOwoJCWVjaG8gIjx0cj48dGQ+T3RoZXIgSW5mbzwv dGQ+PHRkPiIuJG90aGVyX2luZm8uIjwvdGQ+PC90cj4iOwoJCWVjaG8gIjx0cj48dGQgY29s c3Bhbj1cIjJcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj4iLmZJbnB1dCgnc3Vi bWl0JywgJycsICgkSUQ/J1NhdmUgVmVudWUnOidBZGQgVmVudWUnKSwgJycsICcnLCAnJywg JzUwJScsICc0JykuIjwvdGQ+PC90cj4iOwoKICAgIAllY2hvICc8L3RhYmxlPjwvZm9ybT4n OwoJfQoKCS8qIC1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy0gKi8KCS8vIEZ1bmN0aW9uOgkJam1jX2V2ZW50X21hbmFnZXJfdmVudWVfc2F2ZQoJ Ly8gVXNlOgkJCQlVcGRhdGVzIGFuIGV4aXN0aW5nIHZlbnVlJ3MKCS8vCQkJCWluZm9ybWF0 aW9uLgoJLy8gSW5wdXRzOgkJCU5VTEwKCS8vIE91dHB1dHM6CQkJdHJ1ZXxmYWxzZQoJLyog Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJ ZnVuY3Rpb24gam1jX2V2ZW50X21hbmFnZXJfdmVudWVfc2F2ZSgpCgl7CgkJZ2xvYmFsICR0 eHBfdXNlciwkdmFycywkdHhwY2ZnOwoJCWdsb2JhbCAkdmFyc192ZW51ZXM7CgoJCWluY2x1 ZGVfb25jZSAkdHhwY2ZnWyd0eHBhdGgnXS4nL2xpYi9jbGFzc1RleHRpbGUucGhwJzsKCQkk dGV4dGlsZSA9IG5ldyBUZXh0aWxlKCk7CgoJCWV4dHJhY3QoZ3BzYShhcnJheV9tZXJnZSgk dmFyc192ZW51ZXMpKSk7CgoJCSRDYXRlZ29yeUlEID0gJENhdGVnb3J5SUQ/JENhdGVnb3J5 SUQ6MDsKCQkkT3RoZXJJbmZvX2h0bWwgPSAkdGV4dGlsZS0+VGV4dGlsZVRoaXMoJE90aGVy SW5mbyk7CgoJCXNhZmVfdXBkYXRlKCJ0eHBfam1jX2V2ZW50X3ZlbnVlIiwKCQkibmFtZSA9 ICciLmFkZHNsYXNoZXMoJG5hbWUpLiInLAoJCUNhdGVnb3J5SUQgPSAkQ2F0ZWdvcnlJRCwK CQlhZGRyZXNzMSA9ICciLmFkZHNsYXNoZXMoJGFkZHJlc3MxKS4iJywKCQlhZGRyZXNzMiA9 ICciLmFkZHNsYXNoZXMoJGFkZHJlc3MyKS4iJywKCQlzdWJ1cmIgPSAnIi5hZGRzbGFzaGVz KCRzdWJ1cmIpLiInLAoJCXN0YXRlID0gJyIuYWRkc2xhc2hlcygkc3RhdGUpLiInLAoJCWNv dW50cnkgPSAnIi5hZGRzbGFzaGVzKCRjb3VudHJ5KS4iJywKCQlwb3N0Y29kZSA9ICciLmFk ZHNsYXNoZXMoJHBvc3Rjb2RlKS4iJywKCQlwaG9uZSA9ICciLmFkZHNsYXNoZXMoJHBob25l KS4iJywKCQllbWFpbCA9ICciLmFkZHNsYXNoZXMoJGVtYWlsKS4iJywKCQl1cmwgPSAnIi5h ZGRzbGFzaGVzKCR1cmwpLiInLAoJCU90aGVySW5mbyA9ICciLmFkZHNsYXNoZXMoJE90aGVy SW5mbykuIicsCgkJT3RoZXJJbmZvX2h0bWwgPSAnJE90aGVySW5mb19odG1sJyIsCgkJIklE ID0gJyRJRCciKTsKCgkJcmV0dXJuIHRydWU7Cgl9CgoJLyogLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLSAqLwoJLy8gRnVuY3Rpb246CQlqbWNf ZXZlbnRfbWFuYWdlcl92ZW51ZV9wb3N0CgkvLyBVc2U6CQkJCUNyZWF0ZXMgYSBuZXcgdmVu dWUgd2l0aCB1c2VyCgkvLwkJCQlpbmZvcm1hdGlvbi4KCS8vIElucHV0czoJCQlOVUxMCgkv LyBPdXRwdXRzOgkJCXRydWV8ZmFsc2UKCS8qIF8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8gKi8KCWZ1bmN0aW9uIGptY19ldmVudF9tYW5hZ2Vy X3ZlbnVlX3Bvc3QoKQoJewoJCWdsb2JhbCAkdHhwX3VzZXIsJHZhcnMsJHR4cGNmZzsKCQln bG9iYWwgJHZhcnNfdmVudWVzOwoKCQlpbmNsdWRlX29uY2UgJHR4cGNmZ1sndHhwYXRoJ10u Jy9saWIvY2xhc3NUZXh0aWxlLnBocCc7CgkJJHRleHRpbGUgPSBuZXcgVGV4dGlsZSgpOwoK CQlleHRyYWN0KGdwc2EoYXJyYXlfbWVyZ2UoJHZhcnNfdmVudWVzKSkpOwoKCQkkQ2F0ZWdv cnlJRCA9ICRDYXRlZ29yeUlEPyRDYXRlZ29yeUlEOjA7CgkJJE90aGVySW5mb19odG1sID0g JHRleHRpbGUtPlRleHRpbGVUaGlzKCRPdGhlckluZm8pOwoKCQlzYWZlX2luc2VydCgidHhw X2ptY19ldmVudF92ZW51ZSIsCgkJIm5hbWUgPSAnIi5hZGRzbGFzaGVzKCRuYW1lKS4iJywK CQlDYXRlZ29yeUlEID0gJENhdGVnb3J5SUQsCgkJYWRkcmVzczEgPSAnIi5hZGRzbGFzaGVz KCRhZGRyZXNzMSkuIicsCgkJYWRkcmVzczIgPSAnIi5hZGRzbGFzaGVzKCRhZGRyZXNzMiku IicsCgkJc3VidXJiID0gJyIuYWRkc2xhc2hlcygkc3VidXJiKS4iJywKCQlzdGF0ZSA9ICci LmFkZHNsYXNoZXMoJHN0YXRlKS4iJywKCQljb3VudHJ5ID0gJyIuYWRkc2xhc2hlcygkY291 bnRyeSkuIicsCgkJcG9zdGNvZGUgPSAnIi5hZGRzbGFzaGVzKCRwb3N0Y29kZSkuIicsCgkJ cGhvbmUgPSAnIi5hZGRzbGFzaGVzKCRwaG9uZSkuIicsCgkJZW1haWwgPSAnIi5hZGRzbGFz aGVzKCRlbWFpbCkuIicsCgkJdXJsID0gJyIuYWRkc2xhc2hlcygkdXJsKS4iJywKCQlPdGhl ckluZm8gPSAnIi5hZGRzbGFzaGVzKCRPdGhlckluZm8pLiInLAoJCU90aGVySW5mb19odG1s ID0gJyRPdGhlckluZm9faHRtbCciKTsKCgkJcmV0dXJuIHRydWU7Cgl9CgoJLyogLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLSAqLwoJLy8gRnVu Y3Rpb246CQlqbWNfZXZlbnRfbWFuYWdlcl9jYXRlZ29yaWVzKCkKCS8vIFVzZToJCQkJRWNo b2VzIG91dCB0aGUgYmFzaWMgbGlzdCBvZgoJLy8JCQkJY2F0ZWdvcmllcy4KCS8vIElucHV0 czoJCQlOVUxMCgkvLyBPdXRwdXRzOgkJCU5VTEwgKGVjaG9zIHJlc3BvbnNlcykKCS8qIF8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8gKi8KCWZ1 bmN0aW9uIGptY19ldmVudF9tYW5hZ2VyX2NhdGVnb3JpZXMoKQoJewoJCS8vIEdldCB0aGUg Z2xvYmFscyBmcm9tIHRleHRwYXR0ZXJuCgkJZXh0cmFjdChnZXRfcHJlZnMoKSk7CgkJJGx2 YXJzID0gYXJyYXkoInBhZ2UiLCJzb3J0IiwiZGlyIiwiY3JpdCIsJ21ldGhvZCcpOwoJCWV4 dHJhY3QoZ3BzYSgkbHZhcnMpKTsKCQlnbG9iYWwgJHN0ZXA7CgoJCS8vIFNldCB0aGUgc29y dCBieSBhbmQgZGlyZWN0aW9uIHZhcmlhYmxlcwoJCWlmICghJHNvcnQpICRzb3J0ID0gIm5h bWUiOwoJCWlmICghJGRpcikgJGRpciA9ICJhc2MiOwoJCWlmICgkZGlyID09ICJhc2MiKSB7 ICRsaW5rZGlyID0gImRlc2MiOyB9IGVsc2UgeyAkbGlua2RpciA9ICJhc2MiOyB9CgoJCS8v IFdvcmsgb3V0IG51bWJlciBvZiBwYWdlcwoJCSR0b3RhbCA9IGdldENvdW50KCJ0eHBfam1j X2V2ZW50X2NhdGVnb3J5IiwiMSIpOwoJCSRsaW1pdCA9ICgkYXJ0aWNsZV9saXN0X3BhZ2Vi eSkgPyAkYXJ0aWNsZV9saXN0X3BhZ2VieSA6IDI1OwoJCSRudW1QYWdlcyA9IGNlaWwoJHRv dGFsLyRsaW1pdCk7CgkJJHBhZ2UgPSAoISRwYWdlKSA/IDEgOiAkcGFnZTsKCgkJLy8gRGVm aW5lIG9mZnNldCBmb3IgY3VycmVudCBwYWdlCgkJJG9mZnNldCA9ICgkcGFnZSAtIDEpICog JGxpbWl0OwoKCQkvLyBDcmVhdGUgdG9wIGxldmVsIHBhZ2UgYmFzZWQgbmF2IGZvcm0KCQll Y2hvIGptY19uYXZfZm9ybSgnam1jX2V2ZW50X21hbmFnZXInLCAnY2F0ZWdvcnlfbWFuYWdl cicsICRwYWdlLCAkbnVtUGFnZXMsICRzb3J0LCAkZGlyKTsKCgkJJHJzID0gc2FmZV9yb3dz X3N0YXJ0KAoJCQkiKiIsCgkJCSJ0eHBfam1jX2V2ZW50X2NhdGVnb3J5IiwKCQkJIklEIG9y ZGVyIGJ5ICRzb3J0ICRkaXIgbGltaXQgJG9mZnNldCwkbGltaXQiCgkJKTsKCgkJaWYgKCRy cykgewoJCQllY2hvICc8Zm9ybSBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0IiBu YW1lPSJsb25nZm9ybSIgb25zdWJtaXQ9InJldHVybiB2ZXJpZnkoXCcnLmdUeHQoJ2FyZV95 b3Vfc3VyZScpLidcJykiPicsCgkJCXN0YXJ0VGFibGUoJ2xpc3QnKSwKCQkJJzx0cj4nLAoJ CQkJam1jX2V2ZW50X2NvbHVtbl9oZWFkKCdDYXRlZ29yeScsICduYW1lJywgJ2ptY19ldmVu dF9tYW5hZ2VyJywgMCwgJGxpbmtkaXIsICdjYXRlZ29yeV9tYW5hZ2VyJyksCgkJCQl0ZCgp LAoJCQknPC90cj4nOwoJCQl3aGlsZSAoJGEgPSBuZXh0Um93KCRycykpIHsKCQkJCWV4dHJh Y3QoJGEpOwoKCQkJCSRuYW1lbGluayA9IGVMaW5rKCdqbWNfZXZlbnRfbWFuYWdlcicsJ2Nh dGVnb3J5X2VkaXQnLCdJRCcsJElELCRuYW1lKTsKCQkJCSRtb2Rib3ggPSBmSW5wdXQoJ2No ZWNrYm94Jywnc2VsZWN0ZWRbXScsJElELCcnLCcnLCcnLCcnLCcnLCRJRCk7CgoJCQkJZWNo byAiPHRyPiIubiwKCQkJCQl0ZCgkbmFtZWxpbmspLAoJCQkJCXRkKCRtb2Rib3gpLAoJCQkJ JzwvdHI+Jy5uOwoJCQl9CgkJCWVjaG8gdHIodGRhKHNlbGVjdF9idXR0b25zKCkuam1jX2V2 ZW50X21hbmFnZXJfbXVsdGllZGl0X2Zvcm0oJ2ptY19ldmVudF9tYW5hZ2VyJywgJ2NhdGVn b3J5X211bHRpX2VkaXQnKSwnIGNvbHNwYW49IjciIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0 O2JvcmRlcjowcHgiJykpOwoJCQllY2hvICI8L3RhYmxlPjwvZm9ybT4iOwoJCQllY2hvIHBh Z2VieV9mb3JtKCdsaXN0JywkYXJ0aWNsZV9saXN0X3BhZ2VieSk7CgkJCXVuc2V0KCRzb3J0 KTsKCQl9CgkJZWxzZQoJCQllY2hvICdObyBlbnRyaWVzIGF2YWlsYWJsZS4nOwoJfQoKCS8q IC1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy0gKi8K CS8vIEZ1bmN0aW9uOgkJam1jX2V2ZW50X21hbmFnZXJfY2F0ZWdvcnlfZm9ybQoJLy8gVXNl OgkJCQlDcmVhdGVzLCBhbmQgd2hlcmUgYXBwbGljYWJsZQoJLy8JCQkJZmlsbHMgdGhlIGZv cm0gZm9yIG5ldy91cGRhdGluZwoJLy8JCQkJZXhpc3RpbmcgY2F0ZWdvcnkuCgkvLyBJbnB1 dHM6CQkJJHN0ZXAJCQlUWFAKCS8vCQkJCQkkZXhpc3RpbmdfaW5mbwl0cnVlfGZhbHNlCgkv LyBPdXRwdXRzOgkJCU5VTEwgKGVjaG9zIHJlc3BvbnNlcykKCS8qIF8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8gKi8KCWZ1bmN0aW9uIGptY19l dmVudF9tYW5hZ2VyX2NhdGVnb3J5X2Zvcm0oJHN0ZXAsICRleGlzdGluZ19pbmZvID0gZmFs c2UpCgl7CgkJLy8gT2J0YWluIGdsb2JhbCB2YXJpYWJsZXMKCQlnbG9iYWwgJHZhcnNfY2F0 ZWdvcmllczsKCQkkaWQgPSAoZ3BzKCdJRCcpP2dwcygnSUQnKTonJyk7CgkJaWYoJGlkICYm ICgkc3RlcD09J2NhdGVnb3J5X2VkaXQnIHx8ICRzdGVwPT0nY2F0ZWdvcnlfc2F2ZScgfHwg JHN0ZXA9PSdjYXRlZ29yeV9wb3N0JykpIHsKCQkJJHJvdyA9IChzYWZlX3JvdygiKiIsICJ0 eHBfam1jX2V2ZW50X2NhdGVnb3J5IiwgIklEID0gJyRpZCciKSk7CgkJCWZvcmVhY2goJHJv dyBhcyAkbj0+JHYpCgkJCQkkJG4gPSBzdHJpcHNsYXNoZXMoJHYpOwoJCX0KCgkJaWYgKCEk ZXhpc3RpbmdfaW5mbyl7CgkJCWZvcmVhY2goJHZhcnNfY2F0ZWdvcmllcyBhcyAkdmFyKSB7 CgkJCQkkJHZhciA9ICcnOwoJCQl9CgkJfQoKCQkkb3RoZXJfaW5mbyA9ICc8dGV4dGFyZWEg bmFtZT0iT3RoZXJJbmZvIiBjb2xzPSI0MCIgcm93cz0iNyIgdGFiaW5kZXg9IjQiPicuJE90 aGVySW5mby4nPC90ZXh0YXJlYT4nOwoKCQllY2hvICc8Zm9ybSBhY3Rpb249ImluZGV4LnBo cCIgbWV0aG9kPSJwb3N0Ij4nOwoJCWVjaG8gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9 ImV2ZW50IiB2YWx1ZT0iam1jX2V2ZW50X21hbmFnZXIiIC8+JzsKCQllY2hvICc8aW5wdXQg dHlwZT0iaGlkZGVuIiBuYW1lPSJzdGVwIiB2YWx1ZT0iJy4oJGV4aXN0aW5nX2luZm8/J2Nh dGVnb3J5X3NhdmUnOidjYXRlZ29yeV9wb3N0JykuJyIgLz4nOwoJCWVjaG8gJzxpbnB1dCB0 eXBlPSJoaWRkZW4iIG5hbWU9IklEIiB2YWx1ZT0iJy4oJElEPyRJRDonJykuJyIgLz4nOwoK CQllY2hvIHN0YXJ0VGFibGUoJ2VkaXQnKTsKCQllY2hvICI8dHI+PHRkPk5hbWU8L3RkPjx0 ZD4iLmZJbnB1dCgndGV4dCcsICduYW1lJywgJG5hbWUsICcnLCAnJywgJycsICc1MCUnLCAn NCcpLiI8L3RkPjwvdHI+IjsKCQllY2hvICI8dHI+PHRkPk90aGVyIEluZm88L3RkPjx0ZD4i LiRvdGhlcl9pbmZvLiI8L3RkPjwvdHI+IjsKCQllY2hvICI8dHI+PHRkIGNvbHNwYW49XCIy XCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+Ii5mSW5wdXQoJ3N1Ym1pdCcsICcn LCAoJElEPydTYXZlIENhdGVnb3J5JzonQWRkIENhdGVnb3J5JyksICcnLCAnJywgJycsICc1 MCUnLCAnNCcpLiI8L3RkPjwvdHI+IjsKCiAgICAJZWNobyAnPC90YWJsZT48L2Zvcm0+JzsK CX0KCgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tICovCgkvLyBGdW5jdGlvbjoJCWptY19ldmVudF9tYW5hZ2VyX2NhdGVnb3J5X3NhdmUK CS8vIFVzZToJCQkJVXBkYXRlcyBhbiBleGlzdGluZyBjYXRlZ29yeSdzCgkvLwkJCQlpbmZv cm1hdGlvbi4KCS8vIElucHV0czoJCQlOVUxMCgkvLyBPdXRwdXRzOgkJCXRydWV8ZmFsc2UK CS8qIF8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8g Ki8KCWZ1bmN0aW9uIGptY19ldmVudF9tYW5hZ2VyX2NhdGVnb3J5X3NhdmUoKQoJewoJCWds b2JhbCAkdHhwX3VzZXIsJHZhcnMsJHR4cGNmZzsKCQlnbG9iYWwgJHZhcnNfY2F0ZWdvcmll czsKCgkJaW5jbHVkZV9vbmNlICR0eHBjZmdbJ3R4cGF0aCddLicvbGliL2NsYXNzVGV4dGls ZS5waHAnOwoJCSR0ZXh0aWxlID0gbmV3IFRleHRpbGUoKTsKCgkJZXh0cmFjdChncHNhKGFy cmF5X21lcmdlKCR2YXJzX2NhdGVnb3JpZXMpKSk7CgoJCSRPdGhlckluZm9faHRtbCA9ICR0 ZXh0aWxlLT5UZXh0aWxlVGhpcygkT3RoZXJJbmZvKTsKCgkJc2FmZV91cGRhdGUoInR4cF9q bWNfZXZlbnRfY2F0ZWdvcnkiLAoJCSJuYW1lID0gJyIuYWRkc2xhc2hlcygkbmFtZSkuIics CgkJT3RoZXJJbmZvID0gJyIuYWRkc2xhc2hlcygkT3RoZXJJbmZvKS4iJywKCQlPdGhlcklu Zm9faHRtbCA9ICckT3RoZXJJbmZvX2h0bWwnIiwKCQkiSUQgPSAnJElEJyIpOwoKCQlyZXR1 cm4gdHJ1ZTsKCX0KCgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tICovCgkvLyBGdW5jdGlvbjoJCWptY19ldmVudF9tYW5hZ2VyX2NhdGVn b3J5X3Bvc3QKCS8vIFVzZToJCQkJQ3JlYXRlcyBhIG5ldyBjYXRlZ29yeSB3aXRoIHVzZXIK CS8vCQkJCWluZm9ybWF0aW9uLgoJLy8gSW5wdXRzOgkJCU5VTEwKCS8vIE91dHB1dHM6CQkJ dHJ1ZXxmYWxzZQoJLyogXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXyAqLwoJZnVuY3Rpb24gam1jX2V2ZW50X21hbmFnZXJfY2F0ZWdvcnlfcG9z dCgpCgl7CgkJZ2xvYmFsICR0eHBfdXNlciwkdmFycywkdHhwY2ZnOwoJCWdsb2JhbCAkdmFy c19jYXRlZ29yaWVzOwoKCQlpbmNsdWRlX29uY2UgJHR4cGNmZ1sndHhwYXRoJ10uJy9saWIv Y2xhc3NUZXh0aWxlLnBocCc7CgkJJHRleHRpbGUgPSBuZXcgVGV4dGlsZSgpOwoKCQlleHRy YWN0KGdwc2EoYXJyYXlfbWVyZ2UoJHZhcnNfY2F0ZWdvcmllcykpKTsKCgkJJE90aGVySW5m b19odG1sID0gJHRleHRpbGUtPlRleHRpbGVUaGlzKCRPdGhlckluZm8pOwoKCQlzYWZlX2lu c2VydCgidHhwX2ptY19ldmVudF9jYXRlZ29yeSIsCgkJIm5hbWUgPSAnIi5hZGRzbGFzaGVz KCRuYW1lKS4iJywKCQlPdGhlckluZm8gPSAnIi5hZGRzbGFzaGVzKCRPdGhlckluZm8pLiIn LAoJCU90aGVySW5mb19odG1sID0gJyRPdGhlckluZm9faHRtbCciKTsKCgkJcmV0dXJuIHRy dWU7Cgl9CgoKCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgkvKgkJVVNF RlVMIEZVTkNUSU9OUwkJKi8KCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K CgoJLyogLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LSAqLwoJLy8gRnVuY3Rpb246CQlqbWNfZXZlbnRfbWFuYWdlcl9wcmVmcwoJLy8gVXNlOgoJ Ly8gSW5wdXRzOgkJCSRldmVudAlUWFAKCS8vCQkJCQkkc3RlcAlUWFAKCS8vIE91dHB1dHM6 CQkJTlVMTCAoZWNob3MpCgkvKiBfLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fICovCglmdW5jdGlvbiBqbWNfZXZlbnRfbWFuYWdlcl9wcmVmcygk ZXZlbnQsICRzdGVwKSB7CgkJZ2xvYmFsICRqbWNfZXZlbnRfbWFuYWdlcl9wcmVmczsKCQkk am1jX2V2ZW50X21hbmFnZXJfcHJlZnMgPSBhcnJheSgpOwoKCQkvLyBXaGF0IGRvIGkgbmVl ZCBmb3IgcHJlZmVyZW5jZXM/CgoJCS8vIHBzKCkgcmV0dXJucyB0aGUgY29udGVudHMgb2Yg UE9TVCB2YXJzLCBpZiBhbnkKCQlwYWdldG9wKCJFdmVudCBNYW5hZ2VyIFByZWZlcmVuY2Vz IiwgIlByZWZlcmVuY2VzIik7CgoJCS8vIEluc3RhbGwgdGhlIGV2ZW50IG1hbmFnZXIKCQll Y2hvIGptY19ldmVudF9tYW5hZ2VyX2luc3RhbGwoKTsKCgkJZWNobyB0YWcoIkdpZyBMaXN0 aW5nIiwgImgzIik7CgoJCS8vIFRoZSBlSW5wdXQvc0lucHV0IHBhcnQgb2YgdGhlIGZvcm0g aXMgaW1wb3J0YW50LCBzZXR0aW5nIHRoZSBldmVudCBhbmQgc3RlcCByZXNwZWN0aXZlbHkK CX0KCgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tICovCgkvLyBGdW5jdGlvbjoJCWptY19uYXZfZm9ybQoJLy8gVXNlOgkJCQlDcmVhdGUg dGhlIHJvbGxpbmcgcGFnZXMuCgkvLyBJbnB1dHM6CQkJJGV2ZW50CQlUWFAKCS8vCQkJCQkk c3RlcAkJVFhQCgkvLwkJCQkJJHBhZ2UJCXBhZ2UgYmVpbmcgdmlld2VkCgkvLwkJCQkJJG51 bVBhZ2VzCXRvdGFsIG51bWJlciBvZiBwYWdlcwoJLy8JCQkJCSRzb3J0CQlzb3J0IGJ5IHdo YXQKCS8vCQkJCQkkZGlyCQlzb3J0IGRpcmVjdGlvbgoJLy8gT3V0cHV0czoJCQlUaGUgbmF2 aWdhdGlvbiBidXR0b24gc2V0IGZvcgoJLy8JCQkJbXVsdGlwYWdlIHNvcnRpbmcuCgkvKiBf LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICovCglm dW5jdGlvbiBqbWNfbmF2X2Zvcm0oJGV2ZW50LCAkc3RlcCwgJHBhZ2UsICRudW1QYWdlcywg JHNvcnQsICRkaXIpCgl7CgkJJG5hdltdID0gKCRwYWdlID4gMSkKCQkJPwlqbWNfUHJldk5l eHRMaW5rKCRldmVudCwgJHN0ZXAsICRwYWdlLTEsZ1R4dCgncHJldicpLCdwcmV2Jywkc29y dCwgJGRpcikKCQkJOgknJzsKCgkJJG5hdltdID0gc3Auc21hbGwoJHBhZ2UuICcvJy4kbnVt UGFnZXMpLnNwOwoKCQkkbmF2W10gPSAoJHBhZ2UgIT0gJG51bVBhZ2VzKQoJCQk/CWptY19Q cmV2TmV4dExpbmsoJGV2ZW50LCAkc3RlcCwgJHBhZ2UrMSxnVHh0KCduZXh0JyksJ25leHQn LCRzb3J0LCAkZGlyKQoJCQk6CScnOwoKCQlpZiAoJG5hdikgcmV0dXJuIGdyYWYoam9pbign JywkbmF2KSwnIGFsaWduPSJjZW50ZXIiJyk7Cgl9CgoJLyogLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLSAqLwoJLy8gRnVuY3Rpb246CQlqbWNf UHJldk5leHRMaW5rCgkvLyBVc2U6CQkJCUNyZWF0ZSB0aGUgYnV0dG9ucyBmb3IgdGhlCgkv LwkJCQlyb2xsaW5nIHBhZ2VzLgoJLy8gSW5wdXRzOgkJCSRldmVudAkJVFhQCgkvLwkJCQkJ JHN0ZXAJCVRYUAoJLy8JCQkJCSR0b3BhZ2UJCWxpbmtlZCBwYWdlCgkvLwkJCQkJJGxhYmVs CQlsYWJlbCB1c2VkIChlZyAnbmV4dCcpCgkvLwkJCQkJJHR5cGUJCXByZXYvbmV4dCBidXR0 b24KCS8vCQkJCQkkc29ydAkJc29ydCBieSB3aGF0CgkvLwkJCQkJJGRpcgkJc29ydCBkaXJl Y3Rpb24KCS8vIE91dHB1dHM6CQkJVGhlIG5hdmlnYXRpb24gYnV0dG9uIGZvciBuZXh0IG9y CgkvLwkJCQlwcmV2aW91cyBwYWdlcy4KCS8qIF8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8gKi8KCWZ1bmN0aW9uIGptY19QcmV2TmV4dExpbmso JGV2ZW50LCRzdGVwLCR0b3BhZ2UsJGxhYmVsLCR0eXBlLCRzb3J0PScnLCRkaXI9JycpCgl7 CgkJcmV0dXJuIGpvaW4oJycsYXJyYXkoCgkJCSc8YSBocmVmPSI/ZXZlbnQ9Jy4kZXZlbnQu YS4nc3RlcD0nLiRzdGVwLmEuJ3BhZ2U9Jy4kdG9wYWdlLAoJCQkoJHNvcnQpID8gYS4nc29y dD0nLiRzb3J0IDogJycsCgkJCSgkZGlyKSA/IGEuJ2Rpcj0nLiRkaXIgOiAnJywKCQkJJyIg Y2xhc3M9Im5hdmxpbmsiPicsCgkJCSgkdHlwZT09InByZXYiKSA/ICcmIzgyNDk7Jy5zcC4k bGFiZWwgOiAkbGFiZWwuc3AuJyYjODI1MDsnLAoJCQknPC9hPicKCQkpKTsKCX0KCgkvKiAt Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tICovCgkv LyBGdW5jdGlvbjoJCWptY19ldmVudF9tYW5hZ2VyX2luc3RhbGwKCS8vIFVzZToJCQkJSW5z dGFsbCB0aGUgZXZlbnQgbWFuYWdlciBhbmQKCS8vCQkJCWNyZWF0ZSBkdW1teSBlbnRyaWVz LgoJLy8gSW5wdXRzOgkJCU5VTEwKCS8vIE91dHB1dHM6CQkJTlVMTCAgKGVjaG9zKQoJLyog Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJ ZnVuY3Rpb24gam1jX2V2ZW50X21hbmFnZXJfaW5zdGFsbCgpCgl7CgkJLy8gU1FMIERCIElu Zm9ybWF0aW9uCgkJZ2xvYmFsICREQiwkdHhwY2ZnLCAkcWNvdW50LCAkcHJvZHVjdGlvbl9z dGF0dXM7CgoJCS8vIENoZWNrIHRvIHNlZSBpZiB0aGUgZXZlbnQgbGlzdGluZyB0YWJsZSBy ZXF1aXJlcyBpbnN0YWxsYXRpb24KCQlpZighc2FmZV9jb3VudCgidHhwX2ptY19ldmVudCIs ICdJRCcpKQoJCQkkaW5zdGFsbFsnZXZlbnQnXSA9IHRydWU7CgkJZWxzZQoJCQkkaW5zdGFs bFsnZXZlbnQnXSA9IGZhbHNlOwoKCQkvLyBDaGVjayB0byBzZWUgaWYgdGhlIHZlbnVlIGxp c3RpbmcgdGFibGUgcmVxdWlyZXMgaW5zdGFsbGF0aW9uCgkJaWYoIXNhZmVfY291bnQoInR4 cF9qbWNfZXZlbnRfdmVudWUiLCAnSUQnKSkKCQkJJGluc3RhbGxbJ3ZlbnVlJ10gPSB0cnVl OwoJCWVsc2UKCQkJJGluc3RhbGxbJ3ZlbnVlJ10gPSBmYWxzZTsKCgkJLy8gQ2hlY2sgdG8g c2VlIGlmIHRoZSBjYXRlZ29yeSB0YWJsZSByZXF1aXJlcyBpbnN0YWxsYXRpb24KCQlpZigh c2FmZV9jb3VudCgidHhwX2ptY19ldmVudF9jYXRlZ29yeSIsICdJRCcpKQoJCQkkaW5zdGFs bFsnY2F0ZWdvcnknXSA9IHRydWU7CgkJZWxzZQoJCQkkaW5zdGFsbFsnY2F0ZWdvcnknXSA9 IGZhbHNlOwoKCQkvLyBJZiB0YWJsZXMgZXhpc3QgKGNoZWNrIGlzIHZpYSBlbnRyeSBhbmQg bmVlZHMgdG8gYmUgdXBkYXRlZCB0byBwcm9wZXJseSByZWZsZWN0IHRoZSBmYWN0IHRoYXQg dGhlcmUgbWF5IGJlIGFuIGVtcHR5IHRhYmxlKQoJCWlmKCEkaW5zdGFsbFsnZXZlbnQnXSAm JiAhJGluc3RhbGxbJ3ZlbnVlJ10gJiYgISRpbnN0YWxsWydjYXRlZ29yeSddKQoJCQlyZXR1 cm47CgoJCS8vIChjKSBDaHJpcyBEZWFuIFRleHRwYXR0ZXJuIGRhdGFiYXNlIGNoZWNrZXIK CQkvLyBTVEFSVAoJCSR2ZXJzaW9uID0gbXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCk7CgkJLy9V c2UgIkVOR0lORSIgaWYgdmVyc2lvbiBvZiBNeVNRTCA+ICg0LjAuMTggb3IgNC4xLjIpCgkJ JHRhYmxldHlwZSA9ICggaW50dmFsKCR2ZXJzaW9uWzBdKSA+PSA1IHx8IHByZWdfbWF0Y2go JyNeNFwuKDBcLlsyLTldfCgxWzg5XSkpfCgxXC5bMi05XSkjJywkdmVyc2lvbikpCgkJCQkJ CT8gIiAgIgoJCQkJCQk6ICIgVFlQRT1NeUlTQU0gIjsKCgkJLy8gT24gNC4xIG9yIGdyZWF0 ZXIgdXNlIHV0ZjgtdGFibGVzCgkJaWYgKCBpc3NldCgkZGJjaGFyc2V0KSAmJiAoaW50dmFs KCR2ZXJzaW9uWzBdKSA+PSA1IHx8IHByZWdfbWF0Y2goJyNeNFwuWzEtOV0jJywkdmVyc2lv bikpKQoJCXsKCQkJJHRhYmxldHlwZSAuPSAiIENIQVJBQ1RFUiBTRVQgPSAkZGJjaGFyc2V0 ICI7CgkJCWlmIChpc3NldCgkZGJjb2xsYXRlKSkKCQkJCSR0YWJsZXR5cGUgLj0gIiBDT0xM QVRFICRkYmNvbGxhdGUgIjsKCQkJbXlzcWxfcXVlcnkoIlNFVCBOQU1FUyAiLiRkYmNoYXJz ZXQpOwoJCX0KCgkJLy8gRGVmYXVsdCB0byBtZXNzeSBVUkxzIGlmIHdlIGtub3cgdGhleSB3 b24ndCB3b3JrCgkJJHBlcm1saW5rX21vZGUgPSAnc2VjdGlvbl9pZF90aXRsZSc7CgkJaWYg KGlzX2NhbGxhYmxlKCdhcGFjaGVfZ2V0X21vZHVsZXMnKSkgewoJCQkkbW9kdWxlcyA9IGFw YWNoZV9nZXRfbW9kdWxlcygpOwoJCQlpZiAoIWluX2FycmF5KCdtb2RfcmV3cml0ZScsICRt b2R1bGVzKSkKCQkJCSRwZXJtbGlua19tb2RlID0gJ21lc3N5JzsKCQl9CgkJZWxzZSB7CgkJ CSRzZXJ2ZXJfc29mdHdhcmUgPSAoQCRfU0VSVkVSWydTRVJWRVJfU09GVFdBUkUnXSB8fCBA JF9TRVJWRVJbJ0hUVFBfSE9TVCddKQoJCQkJPyAoIChAJF9TRVJWRVJbJ1NFUlZFUl9TT0ZU V0FSRSddKSA/ICBAJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddIDogICRfU0VSVkVSWydI VFRQX0hPU1QnXSApCgkJCQk6ICcnOwoJCSAgIGlmICghc3RyaXN0cigkc2VydmVyX3NvZnR3 YXJlLCAnQXBhY2hlJykpCgkJCQkkcGVybWxpbmtfbW9kZSA9ICdtZXNzeSc7CgkJfQoKCQkv LyBFTkQKCgkJLy8gQ3JlYXRlIHRoZSBTUUwgQ29tbWFuZCBhcnJheQoJCSRjcmVhdGVfc3Fs ID0gYXJyYXkoKTsKCgkJLy8gSWYgdGhlIGV2ZW50IHRhYmxlIG5lZWRzIGluc3RhbGxpbmcs IGFkZCBTUUwgY29tbWFuZHMgdG8gJGNyZWF0ZV9zcWwKCQlpZigkaW5zdGFsbFsnZXZlbnQn XSkKCQl7CgkJCSRjcmVhdGVfc3FsW10gPSJDUkVBVEUgVEFCTEUgYCIuUEZYLiJ0eHBfam1j X2V2ZW50YCAoCiAgYElEYCBpbnQoMTEpIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogIGBD YXRlZ29yeUlEYCB2YXJjaGFyKDY0KSBOT1QgTlVMTCBkZWZhdWx0ICcnLAogIGBuYW1lYCB2 YXJjaGFyKDI1NSkgTlVMTCBkZWZhdWx0ICcnLAogIGBzdGFydF9EYXRlVGltZWAgZGF0ZXRp bWUgTk9UIE5VTEwgZGVmYXVsdCAnMDAwMC0wMC0wMCAwMDowMDowMCcsCiAgYGZpbmlzaF9E YXRlVGltZWAgZGF0ZXRpbWUgTk9UIE5VTEwgZGVmYXVsdCAnMDAwMC0wMC0wMCAwMDowMDow MCcsCiAgYEF1dGhvcklEYCB2YXJjaGFyKDY0KSBOT1QgTlVMTCBkZWZhdWx0ICcnLAogIGBM YXN0TW9kYCBkYXRldGltZSBOT1QgTlVMTCBkZWZhdWx0ICcwMDAwLTAwLTAwIDAwOjAwOjAw JywKICBgTGFzdE1vZElEYCB2YXJjaGFyKDY0KSBOT1QgTlVMTCBkZWZhdWx0ICcnLAogIGBW ZW51ZUlEYCB2YXJjaGFyKDY0KSBOT1QgTlVMTCBkZWZhdWx0ICcnLAogIGBQcmljZWAgdmFy Y2hhcigyNTUpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgYE90aGVyQmFuZHNgIG1lZGl1bXRl eHQgTk9UIE5VTEwsCiAgYE90aGVyQmFuZHNfaHRtbGAgbWVkaXVtdGV4dCBOT1QgTlVMTCwK ICBgT3RoZXJJbmZvYCB0ZXh0IE5PVCBOVUxMLAogIGBPdGhlckluZm9faHRtbGAgbWVkaXVt dGV4dCBOT1QgTlVMTCwKICBgY29tbWVudHNfY291bnRgIGludCg4KSBOT1QgTlVMTCBkZWZh dWx0ICcwJywKICBQUklNQVJZIEtFWSAgKGBJRGApLAogIEtFWSBgc3RhcnRfRGF0ZVRpbWVg IChgc3RhcnRfRGF0ZVRpbWVgKSwKICBLRVkgYGZpbmlzaF9EYXRlVGltZWAgKGBmaW5pc2hf RGF0ZVRpbWVgKSwKICBGVUxMVEVYVCBLRVkgYHNlYXJjaGluZ2AgKGBPdGhlckJhbmRzYCxg T3RoZXJJbmZvYCkKKSAkdGFibGV0eXBlIFBBQ0tfS0VZUz0xIEFVVE9fSU5DUkVNRU5UPTIg IjsKCQl9CgoJCS8vIElmIHRoZSB2ZW51ZSB0YWJsZSBuZWVkcyBpbnN0YWxsaW5nLCBhZGQg U1FMIGNvbW1hbmRzIHRvICRjcmVhdGVfc3FsCgkJaWYoJGluc3RhbGxbJ3ZlbnVlJ10pCgkJ ewoJCQkkY3JlYXRlX3NxbFtdID0iQ1JFQVRFIFRBQkxFIGAiLlBGWC4idHhwX2ptY19ldmVu dF92ZW51ZWAgKAogIGBJRGAgaW50KDExKSBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKICBg Q2F0ZWdvcnlJRGAgdmFyY2hhcig2NCkgTk9UIE5VTEwgZGVmYXVsdCAnJywKICBgbmFtZWAg dmFyY2hhcigyNTUpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgYGltYWdlSURgIHZhcmNoYXIo NjQpIE5VTEwgZGVmYXVsdCAnJywKICBgYWRkcmVzczFgIHZhcmNoYXIoMjU1KSBOT1QgTlVM TCBkZWZhdWx0ICcnLAogIGBhZGRyZXNzMmAgdmFyY2hhcigyNTUpIE5PVCBOVUxMIGRlZmF1 bHQgJycsCiAgYHN1YnVyYmAgdmFyY2hhcigyNTUpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAg YHN0YXRlYCB2YXJjaGFyKDI1NSkgTk9UIE5VTEwgZGVmYXVsdCAnJywKICBgY291bnRyeWAg dmFyY2hhcigyNTUpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgYHBvc3Rjb2RlYCB2YXJjaGFy KDEwKSBOT1QgTlVMTCBkZWZhdWx0ICcnLAogIGBwaG9uZWAgdmFyY2hhcigyNTUpIE5PVCBO VUxMIGRlZmF1bHQgJycsCiAgYHVybGAgdmFyY2hhcigyNTUpIE5PVCBOVUxMIGRlZmF1bHQg JycsCiAgYGVtYWlsYCB2YXJjaGFyKDI1NSkgTk9UIE5VTEwgZGVmYXVsdCAnJywKICBgT3Ro ZXJJbmZvYCB0ZXh0IE5PVCBOVUxMLAogIGBPdGhlckluZm9faHRtbGAgbWVkaXVtdGV4dCBO T1QgTlVMTCwKICBgY29tbWVudHNfY291bnRgIGludCg4KSBOT1QgTlVMTCBkZWZhdWx0ICcw JywKICBQUklNQVJZIEtFWSAgKGBJRGApLAogIEtFWSBgbmFtZWAgKGBuYW1lYCksCiAgRlVM TFRFWFQgS0VZIGBzZWFyY2hpbmdgIChgT3RoZXJJbmZvYCkKKSAkdGFibGV0eXBlIFBBQ0tf S0VZUz0xIEFVVE9fSU5DUkVNRU5UPTIgIjsKCQl9CgkJLy8gSWYgdGhlIHZlbnVlIHRhYmxl IG5lZWRzIGluc3RhbGxpbmcsIGFkZCBTUUwgY29tbWFuZHMgdG8gJGNyZWF0ZV9zcWwKCQlp ZigkaW5zdGFsbFsnY2F0ZWdvcnknXSkKCQl7CgkJCSRjcmVhdGVfc3FsW10gPSJDUkVBVEUg VEFCTEUgYCIuUEZYLiJ0eHBfam1jX2V2ZW50X2NhdGVnb3J5YCAoCiAgYElEYCBpbnQoMTEp IE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogIGBuYW1lYCB2YXJjaGFyKDI1NSkgTk9UIE5V TEwgZGVmYXVsdCAnJywKICBgT3RoZXJJbmZvYCB0ZXh0IE5PVCBOVUxMLAogIGBPdGhlcklu Zm9faHRtbGAgbWVkaXVtdGV4dCBOT1QgTlVMTCwKICBQUklNQVJZIEtFWSAgKGBJRGApLAog IEtFWSBgbmFtZWAgKGBuYW1lYCksCiAgRlVMTFRFWFQgS0VZIGBzZWFyY2hpbmdgIChgT3Ro ZXJJbmZvYCkKKSAkdGFibGV0eXBlIFBBQ0tfS0VZUz0xIEFVVE9fSU5DUkVNRU5UPTIgIjsK CQl9CgkJLy8gRXJyb3IgUmV0dXJuIHZhcmlhYmxlCgkJJGVycm9ycyA9ICIiOwoKCQkvLyBG b3JlYWNoIFNRTCBjb21tYW5kIGRvIHF1ZXJ5IGFuZCBhZGQgZXJyb3JzIChpZiBhbnkpIGZv ciByZXR1cm4KCQlmb3JlYWNoICgkY3JlYXRlX3NxbCBhcyAkcXVlcnkpCgkJewoJCQkkcmVz dWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTsKCQkJaWYgKCEkcmVzdWx0KQoJCQl7CgkJCQkk ZXJyb3JzIC49ICghJGVycm9ycz90YWcoIkV2ZW50IENyZWF0ZSBUYWJsZXMgTXlTUUwgRXJy b3JzIiwiaDMiKS4iPG9sPlxyXG4iOiIiKTsKCQkJCSRlcnJvcnMgLj0gdGFnKG15c3FsX2Vy cm9yKCksImxpIik7CgkJCQkkZXJyb3JzIC49ICI8IS0tXHJcbiAkcXVlcnkgXHJcbi0tPlxy XG4iOwoJCQl9CgkJfQoKCQlpZiAoJGluc3RhbGxbJ2V2ZW50J10pCgkJCXNhZmVfaW5zZXJ0 KCJ0eHBfam1jX2V2ZW50IiwKCQkJIkNhdGVnb3J5SUQgPSAnMScsCgkJCW5hbWUgPSAnQW4g ZXZlbnQnLAoJCQlzdGFydF9EYXRlVGltZSA9IG5vdygpLAoJCQlmaW5pc2hfRGF0ZVRpbWUg PSBub3coKSwKCQkJQXV0aG9ySUQgPSAnam1jX2V2ZW50X21hbmFnZXInLAoJCQlWZW51ZUlE ID0gJzEnLAoJCQlQcmljZSA9ICdIb3cgbXVjaD8nLAoJCQlPdGhlckJhbmRzID0gJycsCgkJ CU90aGVyQmFuZHNfaHRtbCA9ICcnLAoJCQlPdGhlckluZm8gPSAnJywKCQkJT3RoZXJJbmZv X2h0bWwgPSAnJyIpOwoJCWlmICgkaW5zdGFsbFsndmVudWUnXSkKCQkJc2FmZV9pbnNlcnQo InR4cF9qbWNfZXZlbnRfdmVudWUiLAoJCQkiSUQgPSAxLAoJCQlDYXRlZ29yeUlEID0gJzEn LAoJCQluYW1lID0gJ0EgdmVudWUnLAoJCQlpbWFnZUlEID0gJycsCgkJCWFkZHJlc3MxID0g JycsCgkJCWFkZHJlc3MyID0gJycsCgkJCXN1YnVyYiA9ICcnLAoJCQlzdGF0ZSA9ICcnLAoJ CQljb3VudHJ5ID0gJycsCgkJCXBvc3Rjb2RlID0gJycsCgkJCXBob25lID0gJzE4MDAgMDAw IDAwMCcsCgkJCXVybCA9ICdodHRwOi8vd3d3LnRoZXVybC5jb20nLAoJCQllbWFpbCA9ICdp bmZvQHRoZXVybC5jb20nLAoJCQlPdGhlckluZm8gPSAnJywKCQkJT3RoZXJJbmZvX2h0bWwg PSAnJywKCQkJY29tbWVudHNfY291bnQgPSAnJyIKCQkJKTsKCQlpZiAoJGluc3RhbGxbJ2Nh dGVnb3J5J10pCgkJCXNhZmVfaW5zZXJ0KCJ0eHBfam1jX2V2ZW50X2NhdGVnb3J5IiwKCQkJ IklEID0gMSwKCQkJbmFtZSA9ICdBIENhdGVnb3J5JywKCQkJT3RoZXJJbmZvID0gJ1NvbWV0 aGluZyBnb3J5IScsCgkJCU90aGVySW5mb19odG1sID0gJzxwPlNvbWV0aGluZyBHb3J5ITwv cD4nIgoJCQkpOwoKCgkJLy8gSWYgbm8gZXJyb3JzLCBzZXQgZXJyb3JzIHRvIGZhbHNlCgkJ JGVycm9ycyA9ICghJGVycm9ycz9mYWxzZTokZXJyb3JzLiI8L29sPiIpOwoJCS8vIFJldHVy biBlcnJvcnMgdG8gY2FsbGVyIChlaXRoZXIgZmFsc2UgaWYgbm9uZSBvciBlcnJvciBpbmZv cm1hdGlvbiBpZiBub3QKCQlyZXR1cm4gdGFnKHRhZygkZXJyb3JzLCJ0ZCIpLCJ0ciIpOwoK CQkvLyBFdmVudAoJCS8vIFRhYmxlOgkJdHhwX2ptY19ldmVudAoJCS8vIFRpbWU6CgkJLy8g RGF0ZToKCQkvLyBMb2NhdGlvbjoJdkNhcmQgb2YgU1FMIEV2ZW50IExvY2F0aW9uCgkJLy8g UHJpY2U6CgkJLy8gT3RoZXIgQmFuZHM6CgkJLy8gT3RoZXIgSW5mb3JtYXRpb246CgoJCS8v IFZlbnVlCgkJLy8gVGFibGU6CQl0eHBfam1jX2V2ZW50X3ZlbnVlCgkJLy8gTmFtZToKCQkv LyBBZGRyZXNzOgoJCS8vIFBob25lOgoJCS8vIHVybDoKCQkvLyBlbWFpbDoKCQkvLyBPdGhl ciBJbmZvcm1hdGlvbjoKCgkJLy8gQ2F0ZWdvcmllcwoJCS8vIFRhYmxlOgkJdHhwX2ptY19l dmVudF9jYXRlZ29yeQoJCS8vIE5hbWU6CgkJLy8gS2V5OgoJCS8vIFR5cGU6CgkJLy8gSW5m b3JtYXRpb246Cgl9CgoJLyogLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLSAqLwoJLy8gRnVuY3Rpb246CQlqbWNfZXZlbnRfbWFuYWdlcl9pbnN0 YWxsCgkvLyBVc2U6CQkJCUNvbHVtbiBoZWFkZXIgY3JlYXRvci4KCS8vIElucHV0czoJCQkk dmFsdWUJCQlOYW1lIG9mIFRICgkvLwkJCQkJJHNvcnQJCQlzb3J0IGJ5ID8KCS8vCQkJCQkk Y3VycmVudF9ldmVudAlUWFAKCS8vCQkJCQkkaXNsaW5rCQkJaWYgaXQgaXMgYSBsaW5rCgkv LwkJCQkJJGRpcgkJCWRpcmVjdGlvbiBvZiBzb3J0CgkvLwkJCQkJJGN1cnJlbnRfc3RlcAlU WFAgKGFrYSAkc3RlcCkKCS8vIE91dHB1dHM6CQkJJG91dHB1dF9odG1sCWh0bWwgdG8gYmUg b3V0cHV0CgkvLyBOb3RlczoJCQlIYWNrZWQgdmVyc2lvbnMgZnJvbSBUWFAKCS8qIF8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8gKi8KCWZ1bmN0 aW9uIGptY19ldmVudF9jb2x1bW5faGVhZCgkdmFsdWUsICRzb3J0PScnLCAkY3VycmVudF9l dmVudD0nJywgJGlzbGluaz0nJywgJGRpcj0nJywgJGN1cnJlbnRfc3RlcD0nJykKCXsKCQkk b3V0cHV0X2h0bWwgPSAnPHRoIGNsYXNzPSJzbWFsbCI+PHN0cm9uZz4nOwoJCQlpZiAoJGlz bGluaykgewoJCQkJJG91dHB1dF9odG1sIC49ICc8YSBocmVmPSJpbmRleC5waHAnOwoJCQkJ JG91dHB1dF9odG1sIC49ICgkc29ydCkgPyAiP3NvcnQ9JHNvcnQiOicnOwoJCQkJJG91dHB1 dF9odG1sIC49ICgkZGlyKSA/IGEuImRpcj0kZGlyIjonJzsKCQkJCSRvdXRwdXRfaHRtbCAu PSAoJGN1cnJlbnRfZXZlbnQpID8gYS4iZXZlbnQ9JGN1cnJlbnRfZXZlbnQiOicnOwoJCQkJ JG91dHB1dF9odG1sIC49IGEuInN0ZXA9JGN1cnJlbnRfc3RlcFwiPiI7CgkJCX0KCQkkb3V0 cHV0X2h0bWwgLj0gZ1R4dCgkdmFsdWUpOwoJCQlpZiAoJGlzbGluaykgeyAkb3V0cHV0X2h0 bWwgLj0gIjwvYT4iOyB9CgkJJG91dHB1dF9odG1sIC49ICc8L3N0cm9uZz48L3RoPic7CgkJ cmV0dXJuICRvdXRwdXRfaHRtbDsKCX0KCgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tICovCgkvLyBGdW5jdGlvbjoJCWltYWdldGFnCgkv LyBVc2U6CQkJCUNyZWF0ZSBpbWFnZSB0YWcKCS8vIElucHV0czoJCQkkaW1hZ2VfaWQJCUlE IG9mIGltYWdlIHRvIGdldAoJLy8gT3V0cHV0czoJCQkkcmV0dXJuIGNvZGUJaHRtbCB0byBi ZSBvdXRwdXQKCS8vIE5vdGVzOgkJCVlFVCBUTyBCRSBJTVBMRU1FTlRFRCEhIQoJLyogXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJZnVu Y3Rpb24gaW1hZ2V0YWcoJGltYWdlX2lkKQoJewoJCWdsb2JhbCAkc2l0ZXVybCwgJGltZ19k aXI7CgoJCSRpbWFnZSA9IHNhZmVfcm93cygiKiIsICJ0eHBfaW1hZ2UiLCAiaWQgPSAkaW1h Z2VfaWQiKTsKCQlpZigkaW1hZ2UpCgkJewoJCQlleHRyYWN0KCRpbWFnZVswXSk7CgoJCQkk cmV0dXJuX2NvZGUgPSAiPGltZyBzcmM9XCJodHRwOi8vIi4kc2l0ZXVybC4nLycuJGltZ19k aXIuJy8nLiRpZC4idC5qcGdcIiBhbHQ9XCIkYWx0XCIgLz4iOwoKCQkJcmV0dXJuICRyZXR1 cm5fY29kZTsKCQl9CgkJZWxzZQoJCQlyZXR1cm4gIiI7Cgl9CgoJLyogLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLSAqLwoJLy8gRnVuY3Rpb246 CQl2ZW51ZWRyb3Bkb3duCgkvLyBVc2U6CQkJCUNyZWF0ZSBTRUxFQ1Qgb2YgdmVudWVzCgkv LyBJbnB1dHM6CQkJJFZlbnVlSUQJCURlZmF1bHQgVmVudWVJRAoJLy8JCQkJCSR0YWIJCQl0 YWJpbmRleCAodXNhYmlsaXR5KQoJLy8gT3V0cHV0czoJCQkkcmV0dXJuIGNvZGUJaHRtbCB0 byBiZSBvdXRwdXQKCS8qIF8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8gKi8KCWZ1bmN0aW9uIHZlbnVlZHJvcGRvd24oJFZlbnVlSUQgPSAnJywg JHRhYj0nJykKCXsKCQkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoCgkJCSJJRCwgbmFtZSIsCgkJ CSJ0eHBfam1jX2V2ZW50X3ZlbnVlIiwKCQkJIklEIG9yZGVyIGJ5IG5hbWUgYXNjIgoJCSk7 CgoJCWlmKCRycykKCQl7CgkJCSRvdXQgPSAiPHNlbGVjdCBuYW1lPVwiVmVudWVJRFwiIHRh YmluZGV4PVwiJHRhYlwiPlxyXG4iOwoJCQl3aGlsZSgkYSA9IG5leHRSb3coJHJzKSkKCQkJ ewoJCQkJZXh0cmFjdCgkYSk7CgkJCQkkb3V0IC49IjxvcHRpb24gdmFsdWU9XCIkSURcIiAi LigkSUQ9PSRWZW51ZUlEPyJzZWxlY3RlZD1cInNlbGVjdGVkXCIiOiIiKS4iPiRuYW1lPC9v cHRpb24+XHJcbiI7CgkJCX0KCQkJJG91dCAuPSAiPC9zZWxlY3Q+XHJcbiI7CgoJCQlyZXR1 cm4gJG91dDsKCQl9CgkJZWxzZQoJCQlyZXR1cm4gIjxzcGFuIGNsYXNzPVwid2FybmluZ19l cnJvclwiPjxzdHJvbmc+RXJyb3I8L3N0cm9uZz46IDxhIGhyZWY9XCI/ZXZlbnQ9am1jX2V2 ZW50X21hbmFnZXImc3RlcD12ZW51ZV9tYW5hZ2VyXCI+WW91IG11c3QgZmlyc3QgYWRkIGEg dmVudWU8L2E+LiI7Cgl9CgoJLyogLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLSAqLwoJLy8gRnVuY3Rpb246CQljYXRlZ29yeWRyb3Bkb3duCgkv LyBVc2U6CQkJCUNyZWF0ZSBTRUxFQ1Qgb2YgY2F0ZWdvcmllcwoJLy8gSW5wdXRzOgkJCSRD YXRlZ29yeUlECQlEZWZhdWx0IENhdGVnb3J5SUQKCS8vCQkJCQkkdGFiCQkJdGFiaW5kZXgg KHVzYWJpbGl0eSkKCS8vIE91dHB1dHM6CQkJJHJldHVybiBjb2RlCWh0bWwgdG8gYmUgb3V0 cHV0CgkvKiBfLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fICovCglmdW5jdGlvbiBjYXRlZ29yeWRyb3Bkb3duKCRDYXRlZ29yeUlEID0gJycsICR0 YWI9JycpCgl7CgkJJHJzID0gc2FmZV9yb3dzX3N0YXJ0KAoJCQkiSUQsIG5hbWUiLAoJCQki dHhwX2ptY19ldmVudF9jYXRlZ29yeSIsCgkJCSJJRCBvcmRlciBieSBuYW1lIGFzYyIKCQkp OwoKCQlpZigkcnMpCgkJewoJCQkkb3V0ID0gIjxzZWxlY3QgbmFtZT1cIkNhdGVnb3J5SURc IiB0YWJpbmRleD1cIiR0YWJcIj5cclxuIjsKCQkJJG91dCAuPSI8b3B0aW9uIHZhbHVlPVwi XCIgIi4oISRDYXRlZ29yeUlEPyJzZWxlY3RlZD1cInNlbGVjdGVkXCIiOiIiKS4iPk5vbmU8 L29wdGlvbj5cclxuIjsKCQkJd2hpbGUoJGEgPSBuZXh0Um93KCRycykpCgkJCXsKCQkJCWV4 dHJhY3QoJGEpOwoJCQkJJG91dCAuPSI8b3B0aW9uIHZhbHVlPVwiJElEXCIgIi4oJElEPT0k Q2F0ZWdvcnlJRD8ic2VsZWN0ZWQ9XCJzZWxlY3RlZFwiIjoiIikuIj4kbmFtZTwvb3B0aW9u PlxyXG4iOwoJCQl9CgoJCQkkb3V0IC49ICI8L3NlbGVjdD5cclxuIjsKCgkJCXJldHVybiAk b3V0OwoJCX0KCQllbHNlCgkJCXJldHVybiAiPHNwYW4gY2xhc3M9XCJ3YXJuaW5nX2Vycm9y XCI+PHN0cm9uZz5FcnJvcjwvc3Ryb25nPjogPGEgaHJlZj1cIj9ldmVudD1qbWNfZXZlbnRf bWFuYWdlciZzdGVwPWNhdGVnb3J5X21hbmFnZXJcIj5Zb3UgbXVzdCBmaXJzdCBhZGQgYSBj YXRlZ29yeTwvYT4uIjsKCX0KCgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tICovCgkvLyBGdW5jdGlvbjoJCWRhdGV0aW1lZHJvcGRvd24K CS8vIFVzZToJCQkJQ3JlYXRlIFNFTEVDVCBvZiBjYXRlZ29yaWVzCgkvLyBJbnB1dHM6CQkJ JHR5cGUJCQl5ZWFyfG1vbnRofGRheXxob3VyfG1pbnV0ZQoJLy8JCQkJCSRuYW1lCQkJbmFt ZSBvZiBTRUxFQ1QKCS8vCQkJCQkkZGVmYXVsdAkJZGVmYXVsdCB2YWx1ZQoJLy8JCQkJCSR0 YWIJCQl0YWJpbmRleCAodXNhYmlsaXR5KQoJLy8gT3V0cHV0czoJCQlodG1sIHRvIGJlIG91 dHB1dAoJLyogXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXyAqLwoJZnVuY3Rpb24gZGF0ZXRpbWVkcm9wZG93bigkdHlwZSwgJG5hbWUsICRkZWZh dWx0ID0gJycsICR0YWI9JycpCgl7CgkJJHZhbHVlcyA9IGFycmF5KCk7CgkJc3dpdGNoKCR0 eXBlKQoJCXsKCQkJY2FzZSAieWVhciI6CgkJCQlmb3IoJHkgPSAxOTcwOyAkeSA8IDIxMDA7 ICR5KyspCgkJCQkJJHZhbHVlc1siJHkiXSA9ICR5OwoJCQkJYnJlYWs7CgkJCWNhc2UgIm1v bnRoIjoKCQkJCSR2YWx1ZXNbIkphbnVhcnkiXSA9IDE7CgkJCQkkdmFsdWVzWyJGZWJydWFy eSJdID0gMjsKCQkJCSR2YWx1ZXNbIk1hcmNoIl0gPSAzOwoJCQkJJHZhbHVlc1siQXByaWwi XSA9IDQ7CgkJCQkkdmFsdWVzWyJNYXkiXSA9IDU7CgkJCQkkdmFsdWVzWyJKdW5lIl0gPSA2 OwoJCQkJJHZhbHVlc1siSnVseSJdID0gNzsKCQkJCSR2YWx1ZXNbIkF1Z3VzdCJdID0gODsK CQkJCSR2YWx1ZXNbIlNlcHRlbWJlciJdID0gOTsKCQkJCSR2YWx1ZXNbIk9jdG9iZXIiXSA9 IDEwOwoJCQkJJHZhbHVlc1siTm92ZW1iZXIiXSA9IDExOwoJCQkJJHZhbHVlc1siRGVjZW1i ZXIiXSA9IDEyOwoJCQkJYnJlYWs7CgkJCWNhc2UgImRheSI6CgkJCQlmb3IoJGQgPSAxOyAk ZCA8IDMyOyAkZCsrKQoJCQkJCSR2YWx1ZXNbIiRkIl0gPSAkZDsKCQkJCWJyZWFrOwoJCQlj YXNlICJob3VyIjoKCQkJCWZvcigkaCA9IDA7ICRoIDwgMjQ7ICRoKyspCgkJCQkJJHZhbHVl c1siJGgiXSA9ICRoOwoJCQkJYnJlYWs7CgkJCWNhc2UgIm1pbnV0ZSI6CgkJCQlmb3IoJG0g PSAxNTsgJG0gPCA2MDspCgkJCQl7CgkJCQkJJHZhbHVlc1siJG0iXSA9ICRtOwoJCQkJCSRt ID0gJG0gKyAxNTsKCQkJCX0KCQkJCSR2YWx1ZXNbIjAwIl0gPSAiMCI7CgkJCQlicmVhazsK CQkJZGVmYXVsdDoKCQkJCXJldHVybiAiPHNwYW4gY2xhc3M9XCJ3YXJuaW5nX2Vycm9yXCI+ PHN0cm9uZz5FcnJvcjwvc3Ryb25nPjogRGF0ZVRpbWUgJHR5cGUgbm9uLWV4aXN0YW50IjsK CQl9CgoJCWlmKCEkZGVmYXVsdCkKCQl7CgkJCXN3aXRjaCgkdHlwZSkKCQkJewoJCQkJY2Fz ZSAieWVhciI6CgkJCQkJJGRlZmF1bHQgPSBkYXRlKCdZJywgdGltZSgpKTsKCQkJCQlicmVh azsKCQkJCWNhc2UgIm1vbnRoIjoKCQkJCQkkZGVmYXVsdCA9IGRhdGUoJ20nLCB0aW1lKCkp OwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiZGF5IjoKCQkJCQkkZGVmYXVsdCA9IGRhdGUoJ2Qn LCB0aW1lKCkpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiaG91ciI6CgkJCQkJJGRlZmF1bHQg PSBkYXRlKCdIJywgdGltZSgpKTsKCQkJCQlicmVhazsKCQkJCWNhc2UgIm1pbnV0ZSI6CgkJ CQkJJGRlZmF1bHQgPSBkYXRlKCdnJywgdGltZSgpKSArICgxNS0oZGF0ZSgnZycsIHRpbWUo KSkpJTE1KTsKCQkJCQlicmVhazsKCQkJfQoJCX0KCgkJJG91dCA9ICI8c2VsZWN0IG5hbWU9 XCIkbmFtZVwiIHRhYmluZGV4PVwiJHRhYlwiPiI7CgkJZm9yZWFjaCgkdmFsdWVzIGFzICRu PT4kdikKCQl7CgkJCSRvdXQgLj0iPG9wdGlvbiB2YWx1ZT1cIiR2XCIgIi4oJHY9PSRkZWZh dWx0PyJzZWxlY3RlZD1cInNlbGVjdGVkXCIiOiIiKS4iPiRuPC9vcHRpb24+XHJcbiI7CgkJ fQoJCSRvdXQgLj0gIjwvc2VsZWN0PiI7CgoJCXJldHVybiAkb3V0OwoJfQoKCS8qIC1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy0gKi8KCS8vIEZ1 bmN0aW9uOgkJam1jX2V2ZW50X21hbmFnZXJfbXVsdGllZGl0X2Zvcm0KCS8vIFVzZToJCQkJ TXVsdGllZGl0CgkvLyBJbnB1dHM6CQkJJHR5cGUJCQlUWFAKCS8vCQkJCQkkZXZlbnQJCQlU WFAKCS8vIE91dHB1dHM6CQkJaHRtbCB0byBiZSBvdXRwdXQKCS8vIE5vdGVzOgkJCVlFVCBU TyBCRSBGVUxMWSBJTVBMRU1FTlRFRAoJLyogXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJZnVuY3Rpb24gam1jX2V2ZW50X21hbmFnZXJf bXVsdGllZGl0X2Zvcm0oJGV2ZW50LCRzdGVwKQoJewoJCSRtZXRob2QgPSBwcygnbWV0aG9k Jyk7CgkJJG1ldGhvZHMgPSBhcnJheSgnZGVsZXRlJz0+Z1R4dCgnZGVsZXRlJykpOwoJCXJl dHVybgoJCQlnVHh0KCd3aXRoX3NlbGVjdGVkJykuc3Auc2VsZWN0SW5wdXQoJ21ldGhvZCcs JG1ldGhvZHMsJG1ldGhvZCwxKS4KCQkJZUlucHV0KCRldmVudCkuc0lucHV0KCRzdGVwKS5m SW5wdXQoJ3N1Ym1pdCcsJycsZ1R4dCgnZ28nKSwnc21hbGxlcmJveCcpOwoJfQoKLyogLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLSAqLwovKiBGUk9OVCBF TkQgT1VUUFVUIEZST05UIEVORCBPVVRQVVQgRlJPTlQgRU5EIE9VVFBVVCBGUk9OVCBFTkQg T1VUUFVUIEZST05UIEVORCBPVVRQVVQgRlJPTlQgRU5EIE9VICovCi8qIC1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy0gKi8KCgkvKiAtXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tICovCgkvLyBGdW5jdGlvbjoJ CWptY19ldmVudHMKCS8vIFVzZToJCQkJQ3JlYXRlcyB0aGUgb3V0cHV0IGZvciBmcm9udGVu ZAoJLy8gSW5wdXRzOgkJCSRhdHRzCQkJQVJSQVkKCS8vIE91dHB1dHM6CQkJaHRtbCB0byBi ZSBvdXRwdXQKCS8qIF8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8gKi8KCWZ1bmN0aW9uIGptY19ldmVudHMoJGF0dHMgPSAnJykKCXsKCQkkYXR0 cnMgPSBsQXR0cyhhcnJheSgKCQkJJ2Zvcm0nID0+IGZhbHNlLAoJCQknZnV0dXJlJyA9PiB0 cnVlLAoJCQkncGFzdCcgPT4gZmFsc2UsCgkJCSdjdXJyZW50JyA9PiBmYWxzZSwKCQkJJ3Nv cnRfYnknID0+ICdzdGFydF9EYXRlVGltZScsCgkJCSdzb3J0X29yZGVyJyA9PiAnYXNjJywK CQkJJ2xpbWl0JyA9PiAnJywKCQkJJ2V2ZW50X2lkJyA9PiAgJycsCgkJCSd2ZW51ZV9pZCcg PT4nJywKCQkJJ2NhdGVnb3J5X2lkJyA9PiAnJwoJCQkpLCRhdHRzKTsKCgkJZXh0cmFjdCgk YXR0cnMpOwoKCQkvLyBTb3J0IGRpcmVjdGlvbiBhbmQgd2hlcmUgY2xhdXNzZXMKCQlpZigk ZnV0dXJlICYmICRwYXN0KQoJCXsKCQkJJHNxbF93aGVyZSA9ICIiOwoJCX0KCQllbHNlIGlm ICghJGZ1dHVyZSAmJiAhJHBhc3QgJiYgISRjdXJyZW50KXsKCQkJcmV0dXJuICc8dHhwOm5v dGljZSBtZXNzYWdlPSJtYWxmb3JtZWQgZXZlbnRzIHRhZyIgLz4nOwoJCX0KCQllbHNlIGlm ICgkY3VycmVudCl7CgkJCWlmKCRmdXR1cmUgfHwgJHBhc3QpCgkJCQkkc3FsX3doZXJlID0g IigodW5peF90aW1lc3RhbXAoc3RhcnRfRGF0ZVRpbWUpPCIudGltZSgpLiIgQU5EIHVuaXhf dGltZXN0YW1wKGZpbmlzaF9EYXRlVGltZSk+Ii50aW1lKCkuIikgT1IgIi4idW5peF90aW1l c3RhbXAoc3RhcnRfRGF0ZVRpbWUpIi4oJGZ1dHVyZT8iPiI6IjwiKS50aW1lKCkuIikgIjsK CQkJZWxzZQoJCQkJJHNxbF93aGVyZSA9ICJ1bml4X3RpbWVzdGFtcChzdGFydF9EYXRlVGlt ZSk8Ii50aW1lKCkuIiBBTkQgdW5peF90aW1lc3RhbXAoZmluaXNoX0RhdGVUaW1lKT4iLnRp bWUoKS4iICI7CgkJfQoJCWVsc2UgewoJCQkkc3FsX3doZXJlID0gInVuaXhfdGltZXN0YW1w KHN0YXJ0X0RhdGVUaW1lKSIuKCRmdXR1cmU/Ij4iOiI8IikudGltZSgpLiIgIjsKCQl9CgkJ Ly8gTGltaXQgY2hlY2sKCQkkc29ydF9saW1pdCA9ICgkbGltaXQ/ImxpbWl0ICRsaW1pdCI6 IiIpOwoKCQlpZigkdmVudWVfaWQgIT0gJycpCgkJewoJCQlpZiAoJHNxbF93aGVyZSAhPSAi IikKCQkJCSRzcWxfd2hlcmUgLj0gIiBBTkQgVmVudWVJRCBJTiAoIi5kb1NsYXNoKCR2ZW51 ZV9pZCkuIikgIjsKCQkJZWxzZQoJCQkJJHNxbF93aGVyZSAuPSAiIFZlbnVlSUQgSU4gKCIu ZG9TbGFzaCgkdmVudWVfaWQpLiIpICI7CgkJfQoKCQlpZigkY2F0ZWdvcnlfaWQgIT0gJycp CgkJewoJCQlpZigoJHZlbnVlX2lkICE9ICcnKSBPUiAoJHNxbF93aGVyZSAhPSAiIikpCgkJ CQkkc3FsX3doZXJlIC49ICIgQU5EIENhdGVnb3J5SUQgSU4gKCIuZG9TbGFzaCgkY2F0ZWdv cnlfaWQpLiIpICI7CgkJCWVsc2UKCQkJCSRzcWxfd2hlcmUgLj0gIiBDYXRlZ29yeUlEIElO ICgiLmRvU2xhc2goJGNhdGVnb3J5X2lkKS4iKSAiOwoJCX0KCgkJaWYoJGV2ZW50X2lkICE9 ICcnKQoJCXsKCQkJJGV2ZW50X2lkID0gZG9TbGFzaCgkZXZlbnRfaWQpOwoJCQkkcnMgPSBz YWZlX3Jvd3Nfc3RhcnQoIioiLCAidHhwX2ptY19ldmVudCIsICJpZCBJTiAoJGV2ZW50X2lk KSIpOwoJCX0KCQllbHNlCgkJewoJCQkkc3FsX3doZXJlID0gKCRzcWxfd2hlcmU/JHNxbF93 aGVyZToiSUQiKTsKCQkJJHJzID0gc2FmZV9yb3dzX3N0YXJ0KAoJCQkJIiosIHVuaXhfdGlt ZXN0YW1wKHN0YXJ0X0RhdGVUaW1lKSBhcyB1U3RhcnQsIHVuaXhfdGltZXN0YW1wKGZpbmlz aF9EYXRlVGltZSkgYXMgdUZpbmlzaCIsCgkJCQkidHhwX2ptY19ldmVudCIsCgkJCQkiJHNx bF93aGVyZSBPUkRFUiBCWSAkc29ydF9ieSAkc29ydF9vcmRlciAkc29ydF9saW1pdCIKCQkJ KTsKCQl9CgoJCWlmKCRycykKCQl7CgkJCWlmKCRmb3JtKQoJCQkJcmV0dXJuIGptY19ldmVu dF9kZWZhdWx0KCRycywgJGZvcm0pOwoJCQllbHNlCgkJCQlyZXR1cm4gam1jX2V2ZW50X2Rl ZmF1bHQoJHJzLCAkYXR0cnMpOwoJCX0KCQllbHNlCgkJCXJldHVybiB1cG1faW1nX3BvcHBl cl9nVHh0KCdub3RfZm91bmQnKTsKCX0KCgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tICovCgkvLyBGdW5jdGlvbjoJCWptY19ldmVudF9k ZWZhdWx0CgkvLyBVc2U6CQkJCUNyZWF0ZXMgdGhlIG91dHB1dCBmb3IgZnJvbnRlbmQKCS8v IElucHV0czoJCQkkcnMJCQlGaXJzdCByb3cgZnJvbSBEQgoJLy8JCQkJCSRmb3JtX25hbWUJ TmFtZSBvZiBmb3JtIHRvIHVzZQoJLy8gT3V0cHV0czoJCQlodG1sIHRvIGJlIG91dHB1dAoJ Ly8gTm90ZToJCQlGdXR1cmUgaW1wbGVtZW50YXRpb25zIHdpbGwgdXNlCgkvLwkJCQl0aGlz IGFzIHRoZSBkZWZhdWx0IG1pY3JvZm9ybWF0IGZvcm0uCgkvKiBfLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICovCglmdW5jdGlvbiBqbWNfZXZl bnRfZGVmYXVsdCgkcnMsICRmb3JtX25hbWUpCgl7CgkJZ2xvYmFsICRpbWdfZGlyLCAkZXZl bnRfc2VhcmNoLCAkdmVudWVfc2VhcmNoLCAkdmVudWVfaW1hZ2Vfc2VhcmNoOwoKCQkkZm9y bV9uYW1lID0gZG9TbGFzaCgkZm9ybV9uYW1lKTsKCgkJJGZvcm0gPSBzYWZlX2ZpZWxkKCJG b3JtIiwgInR4cF9mb3JtIiwgIm5hbWUgPSAnJGZvcm1fbmFtZSciKTsKCgkJaWYoJGZvcm0p CgkJewoJCQkkb3V0cHV0ID0gIiI7CgkJCSRjb3VudGVyID0gMDsKCQkJJGNvdW50ZXJfY2xh c3MgPSBhcnJheSgiZXZlbiIsICJvZGQiKTsKCQkJd2hpbGUgKCRldmVudCA9IG5leHRSb3co JHJzKSkKCQkJewoJCQkJJHZlbnVlID0gc2FmZV9yb3coIioiLCAidHhwX2ptY19ldmVudF92 ZW51ZSIsICJJRCA9ICIuJGV2ZW50WydWZW51ZUlEJ10pOwoJCQkJJGNhdGVnb3J5X2V2ZW50 ID0gc2FmZV9yb3coIioiLCAidHhwX2ptY19ldmVudF9jYXRlZ29yeSIsICJJRCA9ICIuJGV2 ZW50WydDYXRlZ29yeUlEJ10pOwoJCQkJJGNhdGVnb3J5X3ZlbnVlID0gc2FmZV9yb3coIioi LCAidHhwX2ptY19ldmVudF9jYXRlZ29yeSIsICJJRCA9ICIuJHZlbnVlWydDYXRlZ29yeUlE J10pOwoJCQkJJHZlbnVlX2ltYWdlID0gJHZlbnVlWydpbWFnZUlEJ10/c2FmZV9yb3coIioi LCAidHhwX2ltYWdlIiwgImlkID0gJyIuJGltYWdlSUQuIicgbGltaXQgMSIpOicnOwoKCQkJ CS8vIFNlYXJjaCBhbmQgcmVwbGFjZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGZvcm0gdGFncwoJ CQkJJGV2ZW50X3NlYXJjaCA9IGFycmF5KAoJCQkJCSdpZCcgPT4gJGV2ZW50WydJRCddLAoJ CQkJCSduYW1lJyA9PiAkZXZlbnRbJ25hbWUnXSwKCQkJCQkncHJpY2UnID0+ICRldmVudFsn UHJpY2UnXSwKCQkJCQknb3RoZXJiYW5kcycgPT4gJGV2ZW50WydPdGhlckJhbmRzX2h0bWwn XSwKCQkJCQknb3RoZXJpbmZvJyA9PiAkZXZlbnRbJ090aGVySW5mb19odG1sJ10sCgkJCQkJ J2NhdGVnb3J5JyA9PiAkY2F0ZWdvcnlfZXZlbnRbJ25hbWUnXQoJCQkJKTsKCQkJCSR2ZW51 ZV9zZWFyY2ggPSBhcnJheSgKCQkJCQknaWQnID0+ICR2ZW51ZVsnSUQnXSwKCQkJCQknbmFt ZScgPT4gJHZlbnVlWyduYW1lJ10sCgkJCQkJJ2FkZHJlc3MxJyA9PiAkdmVudWVbJ2FkZHJl c3MxJ10sCgkJCQkJJ2FkZHJlc3MyJyA9PiAkdmVudWVbJ2FkZHJlc3MyJ10sCgkJCQkJJ3N1 YnVyYicgPT4gJHZlbnVlWydzdWJ1cmInXSwKCQkJCQknc3RhdGUnID0+ICR2ZW51ZVsnc3Rh dGUnXSwKCQkJCQknY291bnRyeScgPT4gJHZlbnVlWydjb3VudHJ5J10sCgkJCQkJJ3Bvc3Rj b2RlJyA9PiAkdmVudWVbJ3Bvc3Rjb2RlJ10sCgkJCQkJJ3Bob25lJyA9PiAkdmVudWVbJ3Bo b25lJ10sCgkJCQkJJ3VybCcgPT4gJHZlbnVlWyd1cmwnXSwKCQkJCQknZW1haWwnID0+ICR2 ZW51ZVsnZW1haWwnXSwKCQkJCQknb3RoZXJpbmZvJyA9PiAkdmVudWVbJ090aGVySW5mb19o dG1sJ10sCgkJCQkJJ2NhdGVnb3J5JyA9PiAkY2F0ZWdvcnlfdmVudWVbJ25hbWUnXQoJCQkJ KTsKCQkJCWlmKCR2ZW51ZV9pbWFnZSkKCQkJCXsKCQkJCQkkdmVudWVfaW1hZ2Vfc2VhcmNo ID0gYXJyYXkoCgkJCQkJCSdpbWFnZV9pZCcgPT4gJHZlbnVlX2ltYWdlWydpZCddLAoJCQkJ CQknaW1hZ2VfbmFtZScgPT4gJHZlbnVlX2ltYWdlWyduYW1lJ10sCgkJCQkJCSdpbWFnZV9j YXRlZ29yeScgPT4gJHZlbnVlX2ltYWdlWydjYXRlZ29yeSddLAoJCQkJCQknZnVsbF93aWR0 aCcgPT4gJHZlbnVlX2ltYWdlWyd3J10sCgkJCQkJCSdmdWxsX2hlaWdodCcgPT4gJHZlbnVl X2ltYWdlWydoJ10sCgkJCQkJCSdmdWxsX3VybCcgPT4gaHUuJGltZ19kaXIuJy8nLiR2ZW51 ZV9pbWFnZVsnaWQnXS4kdmVudWVfaW1hZ2VbJ2V4dCddLAoJCQkJCQknYWx0JyA9PiAkdmVu dWVfaW1hZ2VbJ2FsdCddLAoJCQkJCQknY2FwdGlvbicgPT4gJHZlbnVlX2ltYWdlWydjYXB0 aW9uJ10sCgkJCQkJCSd0aHVtYl91cmwnID0+ICR0X3VybCwKCQkJCQkJJ3RodW1iX3dpZHRo JyA9PiAkdywKCQkJCQkJJ3RodW1iX2hlaWdodCcgPT4gJGgKCQkJCQkpOwoJCQkJfQoKCQkJ CSR0ZW1wID0gJGZvcm07CgoJCQkJZm9yZWFjaCAoJGV2ZW50X3NlYXJjaCBhcyAka2V5ID0+ ICR2YWwpCgkJCQl7CgkJCQkJJHRlbXAgPSBzdHJfcmVwbGFjZSgnPHR4cDpqbWNfZXZlbnRf Jy4ka2V5LicgLz4nLCAkdmFsLCAkdGVtcCk7CgkJCQl9CgkJCQlmb3JlYWNoICgkdmVudWVf c2VhcmNoIGFzICRrZXkgPT4gJHZhbCkKCQkJCXsKCQkJCQkkdGVtcCA9IHN0cl9yZXBsYWNl KCc8dHhwOmptY192ZW51ZV8nLiRrZXkuJyAvPicsICR2YWwsICR0ZW1wKTsKCQkJCX0KCQkJ CSR0ZW1wID0gc3RyX3JlcGxhY2UoJzx0eHA6am1jX2V2ZW50X3RpbWUnLCAnPHR4cDpqbWNf ZXZlbnRfdGltZSBpZD0iJy4kZXZlbnRfc2VhcmNoWydpZCddLiciJywgJHRlbXApOwoJCQkJ JHRlbXAgPSBzdHJfcmVwbGFjZSgnPHR4cDpqbWNfdmVudWUgJywgJzx0eHA6am1jX3ZlbnVl IGlkPSInLiR2ZW51ZV9zZWFyY2hbJ2lkJ10uJyIgJywgJHRlbXApOwoJCQkJJHRlbXAgPSBz dHJfcmVwbGFjZSgnPHR4cDpqbWNfaWZfdmFyaWFibGUnLCAnPHR4cDpqbWNfaWZfdmFyaWFi bGUgaWQ9IicuJGV2ZW50X3NlYXJjaFsnaWQnXS4nIicsICR0ZW1wKTsKCQkJCSR0ZW1wID0g c3RyX3JlcGxhY2UoJzx0eHA6am1jX2V2ZW5fb2RkIC8+JywgJGNvdW50ZXJfY2xhc3NbJGNv dW50ZXIlMl0sICR0ZW1wKTsKCQkJCSRjb3VudGVyKys7CgoJCQkJLy8gRm9yIHRoZSB0aW1l cyBhbmQgZGF0ZXMsIHdlJ2xsIG5lZWQgdG8gcGFyc2UgdGhpcy4uLgoJCQkJJHRlbXAgPSBw YXJzZSgkdGVtcCk7CgkJCQkkdGVtcCA9IHBhcnNlKCR0ZW1wKTsKCgkJCQkkb3V0cHV0IC49 ICR0ZW1wOwoJCQl9CgkJCXJldHVybiAkb3V0cHV0OwoJCX0KCQllbHNlCgkJewoJCQlyZXR1 cm4gJzx0eHA6bm90aWNlIG1lc3NhZ2U9Im1hbGZvcm1lZCBldmVudCB0YWcgLSBmb3JtIGRv ZXNuXCd0IGV4aXN0IiAvPic7CgkJfQoJfQoKCS8qIC1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy0gKi8KCS8vIEZ1bmN0aW9uOgkJam1jX2V2ZW50 X3RpbWUKCS8vIFVzZToJCQkJQ3JlYXRlcyB0aGUgb3V0cHV0IGZvciBmcm9udGVuZAoJLy8g SW5wdXRzOgkJCSRhdHRzCQlBUlJBWQoJLy8gT3V0cHV0czoJCQlUaW1lIGFsdGVyZWQgZm9y IGxvY2F0aW9uLgoJLyogXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXyAqLwoJZnVuY3Rpb24gam1jX2V2ZW50X3RpbWUoJGF0dHMgPSAnJykKCXsK CQkkYXR0cnMgPSBsQXR0cyhhcnJheSgKCQkJJ2lkJyA9PiAnJywKCQkJJ3N0YXJ0JyA9PiB0 cnVlLAoJCQkncGhwX2RhdGUnID0+ICdyJwoJCQkpLCRhdHRzKTsKCgkJZXh0cmFjdCgkYXR0 cnMpOwoKCQkkcnMgPSBzYWZlX3JvdygKCQkJInVuaXhfdGltZXN0YW1wKHN0YXJ0X0RhdGVU aW1lKSBhcyB1U3RhcnQsIHVuaXhfdGltZXN0YW1wKGZpbmlzaF9EYXRlVGltZSkgYXMgdUZp bmlzaCIsCgkJCSJ0eHBfam1jX2V2ZW50IiwKCQkJImlkPSIuJGlkCgkJKTsKCgkJZXh0cmFj dCgkcnMpOwoKCQlpZigkc3RhcnQgIT0gZmFsc2UpCgkJCXJldHVybiBkYXRlKCRwaHBfZGF0 ZSwgJHVTdGFydCArIHR6X29mZnNldCgpKTsKCQllbHNlCgkJCXJldHVybiBkYXRlKCRwaHBf ZGF0ZSwgJHVGaW5pc2ggKyB0el9vZmZzZXQoKSk7Cgl9CgoJLyogLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLSAqLwoJLy8gRnVuY3Rpb246CQlq bWNfdmVudWUKCS8vIFVzZToJCQkJQ3JlYXRlcyB0aGUgb3V0cHV0IGZvciBmcm9udGVuZAoJ Ly8gSW5wdXRzOgkJCSRhdHRzCQlBUlJBWQoJLy8JCQkJCSR0aGluZwkJPwoJLy8gT3V0cHV0 czoJCQlodG1sIHRvIGJlIG91dHB1dAoJLy8gTm90ZToJCQlGdXR1cmUgaW1wbGVtZW50YXRp b25zIHdpbGwgdXNlCgkvLwkJCQl0aGlzIGFzIHRoZSBkZWZhdWx0IG1pY3JvZm9ybWF0IGZv cm0uCgkvKiBfLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fICovCglmdW5jdGlvbiBqbWNfdmVudWUoJGF0dHMsICR0aGluZyA9ICcnKQoJewoJCSRh dHRycyA9IGxBdHRzKGFycmF5KAoJCQknZm9ybScgPT4gZmFsc2UsCgkJCSdpZCcgPT4nJwoJ CQkpLCRhdHRzKTsKCgkJZXh0cmFjdCgkYXR0cnMpOwoKCQlpZigkZm9ybSAmJiAkdGVtcCA9 IHNhZmVfZmllbGQoIkZvcm0iLCAidHhwX2Zvcm0iLCAibmFtZSA9ICckZm9ybSciKSkKCQl7 CgkJCSR2ZW51ZSA9IHNhZmVfcm93KCIqIiwgInR4cF9qbWNfZXZlbnRfdmVudWUiLCAiSUQg PSAiLiRpZCk7CgkJCSRjYXRlZ29yeV92ZW51ZSA9IHNhZmVfcm93KCIqIiwgInR4cF9qbWNf ZXZlbnRfY2F0ZWdvcnkiLCAiSUQgPSAiLiR2ZW51ZVsnQ2F0ZWdvcnlJRCddKTsKCgkJCSR2 ZW51ZV9zZWFyY2ggPSBhcnJheSgKCQkJCSdpZCcgPT4gJHZlbnVlWydJRCddLAoJCQkJJ25h bWUnID0+ICR2ZW51ZVsnbmFtZSddLAoJCQkJJ2FkZHJlc3MxJyA9PiAkdmVudWVbJ2FkZHJl c3MxJ10sCgkJCQknYWRkcmVzczInID0+ICR2ZW51ZVsnYWRkcmVzczInXSwKCQkJCSdzdWJ1 cmInID0+ICR2ZW51ZVsnc3VidXJiJ10sCgkJCQknc3RhdGUnID0+ICR2ZW51ZVsnc3RhdGUn XSwKCQkJCSdjb3VudHJ5JyA9PiAkdmVudWVbJ2NvdW50cnknXSwKCQkJCSdwb3N0Y29kZScg PT4gJHZlbnVlWydwb3N0Y29kZSddLAoJCQkJJ3Bob25lJyA9PiAkdmVudWVbJ3Bob25lJ10s CgkJCQkndXJsJyA9PiAkdmVudWVbJ3VybCddLAoJCQkJJ2VtYWlsJyA9PiAkdmVudWVbJ2Vt YWlsJ10sCgkJCQknb3RoZXJpbmZvJyA9PiAkdmVudWVbJ090aGVySW5mb19odG1sJ10sCgkJ CQknY2F0ZWdvcnknID0+ICRjYXRlZ29yeV92ZW51ZVsnbmFtZSddCgkJCSk7CgkJCWZvcmVh Y2ggKCR2ZW51ZV9zZWFyY2ggYXMgJGtleSA9PiAkdmFsKQoJCQl7CgkJCQkkdGVtcCA9IHN0 cl9yZXBsYWNlKCc8dHhwOmptY192ZW51ZV8nLiRrZXkuJyAvPicsICR2YWwsICR0ZW1wKTsK CQkJfQoKCQkJcmV0dXJuICR0ZW1wOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gJ1RvIGJl IGRvbmUgLSB2Q2FyZCBzdHlsZXMnOwoJCX0KCX0KCgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tICovCgkvLyBGdW5jdGlvbjoJCWptY19p Zl92YXJpYWJsZQoJLy8gVXNlOgkJCQlDaGVja3MgdG8gc2VlIGlmIHZhcmlhYmxlIGV4aXN0 cwoJLy8gSW5wdXRzOgkJCSRhdHRzCQlBUlJBWQoJLy8JCQkJCSR0aGluZwkJJHN0cmluZyB0 byBiZSByZXR1cm5lZCBpZiB0cnVlCgkvLyBPdXRwdXRzOgkJCWh0bWwgdG8gYmUgb3V0cHV0 CgkvKiBfLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f ICovCglmdW5jdGlvbiBqbWNfaWZfdmFyaWFibGUoJGF0dHMsICR0aGluZz0nJykKCXsKCQkk YXR0cnMgPSBsQXR0cyhhcnJheSgKCQkJJ3ZhcmlhYmxlJyA9PiAnJywKCQkJJ2lkJyA9PiAn JwoJCQkpLCRhdHRzKTsKCgkJZXh0cmFjdCgkYXR0cnMpOwoKCQkkZXZlbnQgPSBzYWZlX3Jv dygiKiIsCgkJCSJ0eHBfam1jX2V2ZW50IiwKCQkJIklEID0gJGlkIik7CgkJJHZlbnVlID0g c2FmZV9yb3coIioiLAoJCQkidHhwX2ptY19ldmVudF92ZW51ZSIsCgkJCSJJRCA9ICIuJGV2 ZW50WydWZW51ZUlEJ10pOwoJCSRldmVudF9zZWFyY2ggPSBhcnJheSgKCQkJJ2V2ZW50X2lk JyA9PiAkZXZlbnRbJ0lEJ10sCgkJCSdjYXRlZ29yeV9pZCcgPT4gJGV2ZW50WydDYXRlZ29y eUlEJ10sCgkJCSdldmVudF9uYW1lJyA9PiAkZXZlbnRbJ25hbWUnXSwKCQkJJ3ByaWNlJyA9 PiAkZXZlbnRbJ1ByaWNlJ10sCgkJCSdvdGhlcmJhbmRzJyA9PiAkZXZlbnRbJ090aGVyQmFu ZHNfaHRtbCddLAoJCQknZXZlbnRfb3RoZXJpbmZvJyA9PiAkZXZlbnRbJ090aGVySW5mb19o dG1sJ10KCQkpOwoJCSR2ZW51ZV9zZWFyY2ggPSBhcnJheSgKCQkJJ3ZlbnVlX2lkJyA9PiAk dmVudWVbJ0lEJ10sCgkJCSdjYXRlZ29yeV9pZCcgPT4gJHZlbnVlWydDYXRlZ29yeUlEJ10s CgkJCSd2ZW51ZV9uYW1lJyA9PiAkdmVudWVbJ25hbWUnXSwKCQkJJ2FkZHJlc3MxJyA9PiAk dmVudWVbJ2FkZHJlc3MxJ10sCgkJCSdhZGRyZXNzMicgPT4gJHZlbnVlWydhZGRyZXNzMidd LAoJCQknc3VidXJiJyA9PiAkdmVudWVbJ3N1YnVyYiddLAoJCQknc3RhdGUnID0+ICR2ZW51 ZVsnc3RhdGUnXSwKCQkJJ2NvdW50cnknID0+ICR2ZW51ZVsnY291bnRyeSddLAoJCQkncG9z dGNvZGUnID0+ICR2ZW51ZVsncG9zdGNvZGUnXSwKCQkJJ3Bob25lJyA9PiAkdmVudWVbJ3Bo b25lJ10sCgkJCSd1cmwnID0+ICR2ZW51ZVsndXJsJ10sCgkJCSdlbWFpbCcgPT4gJHZlbnVl WydlbWFpbCddLAoJCQkndmVudWVfb3RoZXJpbmZvJyA9PiAkdmVudWVbJ090aGVySW5mb19o dG1sJ10KCQkpOwoKCQlpZigkdmFyaWFibGUgJiYgKCRldmVudF9zZWFyY2hbJHZhcmlhYmxl XSB8fCAkdmVudWVfc2VhcmNoWyR2YXJpYWJsZV0pKQoJCQlyZXR1cm4gJHRoaW5nOwoJCWVs c2UKCQkJcmV0dXJuICcnOwoJfQoKCS8qIC1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy0gKi8KCS8vIEZ1bmN0aW9uOgkJam1jX2lmX25vdF92YXJp YWJsZQoJLy8gVXNlOgkJCQlDaGVja3MgdG8gc2VlIGlmIHZhcmlhYmxlCgkvLwkJCQlkb2Vz bid0IGV4aXN0cwoJLy8gSW5wdXRzOgkJCSRhdHRzCQlBUlJBWQoJLy8JCQkJCSR0aGluZwkJ PwoJLy8gT3V0cHV0czoJCQlodG1sIHRvIGJlIG91dHB1dAoJLy8gTm90ZXM6CQkJTm90IHll dCB3b3JraW5nIDooCgkvKiBfLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fICovCglmdW5jdGlvbiBqbWNfaWZfbm90X3ZhcmlhYmxlKCRhdHRzLCAk dGhpbmc9JycpCgl7CgkJJGF0dHJzID0gbEF0dHMoYXJyYXkoCgkJCSd2YXJpYWJsZScgPT4g JycsCgkJCSdpZCcgPT4gJzInCgkJCSksJGF0dHMpOwoKCQlleHRyYWN0KCRhdHRycyk7CgoJ CSRldmVudCA9IHNhZmVfcm93KCIqIiwKCQkJInR4cF9qbWNfZXZlbnQiLAoJCQkiSUQgPSAk aWQiKTsKCQkkdmVudWUgPSBzYWZlX3JvdygiKiIsCgkJCSJ0eHBfam1jX2V2ZW50X3ZlbnVl IiwKCQkJIklEID0gIi4kZXZlbnRbJ1ZlbnVlSUQnXSk7CgkJJGV2ZW50X3NlYXJjaCA9IGFy cmF5KAoJCQknZXZlbnRfaWQnID0+ICRldmVudFsnSUQnXSwKCQkJJ2NhdGVnb3J5X2lkJyA9 PiAkZXZlbnRbJ0NhdGVnb3J5SUQnXSwKCQkJJ2V2ZW50X25hbWUnID0+ICRldmVudFsnbmFt ZSddLAoJCQkncHJpY2UnID0+ICRldmVudFsnUHJpY2UnXSwKCQkJJ290aGVyYmFuZHMnID0+ ICRldmVudFsnT3RoZXJCYW5kc19odG1sJ10sCgkJCSdldmVudF9vdGhlcmluZm8nID0+ICRl dmVudFsnT3RoZXJJbmZvX2h0bWwnXQoJCSk7CgkJJHZlbnVlX3NlYXJjaCA9IGFycmF5KAoJ CQkndmVudWVfaWQnID0+ICR2ZW51ZVsnSUQnXSwKCQkJJ2NhdGVnb3J5X2lkJyA9PiAkdmVu dWVbJ0NhdGVnb3J5SUQnXSwKCQkJJ3ZlbnVlX25hbWUnID0+ICR2ZW51ZVsnbmFtZSddLAoJ CQknYWRkcmVzczEnID0+ICR2ZW51ZVsnYWRkcmVzczEnXSwKCQkJJ2FkZHJlc3MyJyA9PiAk dmVudWVbJ2FkZHJlc3MyJ10sCgkJCSdzdWJ1cmInID0+ICR2ZW51ZVsnc3VidXJiJ10sCgkJ CSdzdGF0ZScgPT4gJHZlbnVlWydzdGF0ZSddLAoJCQknY291bnRyeScgPT4gJHZlbnVlWydj b3VudHJ5J10sCgkJCSdwb3N0Y29kZScgPT4gJHZlbnVlWydwb3N0Y29kZSddLAoJCQkncGhv bmUnID0+ICR2ZW51ZVsncGhvbmUnXSwKCQkJJ3VybCcgPT4gJHZlbnVlWyd1cmwnXSwKCQkJ J2VtYWlsJyA9PiAkdmVudWVbJ2VtYWlsJ10sCgkJCSd2ZW51ZV9vdGhlcmluZm8nID0+ICR2 ZW51ZVsnT3RoZXJJbmZvX2h0bWwnXQoJCSk7CgoJCWlmKCR2YXJpYWJsZSAmJiAoISRldmVu dF9zZWFyY2hbJHZhcmlhYmxlXSAmJiAhJHZlbnVlX3NlYXJjaFskdmFyaWFibGVdKSkKCQkJ cmV0dXJuICR0aGluZzsKCQllbHNlCgkJCXJldHVybiAnJzsKCX0KIjtzOjM6Im1kNSI7czoz MjoiMzk3Yzc3MzMzZDg2ZTQ1NTNjZjEyYjdjYmQzMGE0ZTciO30=