# Name: ied_plugin_composer v0.5 # Type: Admin + Client plugin # Write and publish plugins easily # Author: Yura Linnyk / Stef Dawson / Steve Dickinson # URL: http://inspired.kiev.ua # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTk6ImllZF9wbHVnaW5fY29tcG9zZXIiO3M6NjoiYXV0aG9y IjtzOjQzOiJZdXJhIExpbm55ayAvIFN0ZWYgRGF3c29uIC8gU3RldmUgRGlja2luc29uIjtz OjEwOiJhdXRob3JfdXJpIjtzOjIzOiJodHRwOi8vaW5zcGlyZWQua2lldi51YSI7czo3OiJ2 ZXJzaW9uIjtzOjM6IjAuNSI7czoxMToiZGVzY3JpcHRpb24iO3M6MzI6IldyaXRlIGFuZCBw dWJsaXNoIHBsdWdpbnMgZWFzaWx5IjtzOjQ6ImhlbHAiO3M6NzA5NToiPHN0eWxlIHR5cGU9 InRleHQvY3NzIj4KI2llZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS4zIDt9CiNpZWRfaGVscCBj b2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIs IGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZDQzt9CiNpZWRf aGVscCBjb2RlLnNlZF9jb2RlX3RhZyB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFw eCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9j azsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI2llZF9oZWxwIGE6 bGluaywgI2llZF9oZWxwIGE6dmlzaXRlZCB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRp b246IG5vbmU7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRv bToxcHg7fQojaWVkX2hlbHAgYTpob3ZlciwgI2llZF9oZWxwIGE6YWN0aXZlIHsgY29sb3I6 IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlk IGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNpZWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5 OyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGln bjogY2VudGVyOyB9CiNpZWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBi bGFjazsgcGFkZGluZzoxMHB4IDAgMDsgY29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2Vvcmdp YSwgc2Fucy1zZXJpZjsgfQojaWVkX2hlbHAgaDMgeyBjb2xvcjogIzY5MzsgZm9udDogYm9s ZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46 IDEwcHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7fQo8L3N0eWxlPgoJPHA+PGRp diBpZD0iaWVkX2hlbHAiPjwvcD4KCgk8aDE+SW5zcGlyZWQgcGx1Z2luIGNvbXBvc2VyPC9o MT4KCgk8cD5UaGlzIHBsdWdpbiBjcmVhdGVzIGEgbmV3IHRhYiB1bmRlciB0aGUgJiM4MjE2 O2V4dGVuc2lvbnMmIzgyMTc7IHRhYiB3aGVyZSB5b3UgY2FuIGVkaXQgcGx1Z2lucyB0aGF0 IGFyZSBhbHJlYWR5IGluc3RhbGxlZCBpbiBUZXh0UGF0dGVybiBhbmQgcmVnaXN0ZXIgbmV3 IHBsdWdpbnMuPC9wPgoKCTxoMj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJCTxsaT5DcmVhdGUs IGVkaXQgb3IgdXBsb2FkIHBsdWdpbiBjb2RlIGFuZCBoZWxwLCB0aGVuIHB1Ymxpc2ggdGhl IHJlc3VsdCBpbiB0aGUgc3RhbmRhcmQgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4g cGx1Z2luIGZvcm1hdDwvbGk+CgkJPGxpPkZ1bGwgc3VwcG9ydCBmb3IgdGhlIDxhIGhyZWY9 Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9hZHMvZW1wdHlfcGx1Z2luX3RlbXBsYXRl LnR4dCI+emVtX3RwbC5waHAgcGx1Z2luIHRlbXBsYXRlPC9hPi4gVGhlIGxhdGVzdCByZXZp c2lvbiBieSA8YSBocmVmPSJodHRwOi8vdHhwLXBsdWdpbnMubmV0Y2FydmluZy5jb20vcGx1 Z2lucy9tb2RpZmllZC1wbHVnaW4tY29tcGlsZXIiPm5ldC1jYXJ2ZXI8L2E+IGFsc28gaW5j b3Jwb3JhdGVzIGEgJiM4MjE2O3N0eWxlJiM4MjE3OyBzZWN0aW9uIGZvciBlYXN5IHN0eWxp bmcgb2YgeW91ciBoZWxwIHRleHQuIFRoZSBQbHVnaW4gQ29tcG9zZXIgbG9va3MgZm9yIDxz cGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IHNlY3Rpb25zIGluIHRoZSB0ZW1wbGF0ZSBh bmQgd2lsbCB1c2UgdGhlbSBhY2NvcmRpbmdseTwvbGk+CgkJPGxpPkV4cG9ydCBhIHBsdWdp biBhcyBlaXRoZXIgYSBzdGFuZGFyZCBCQVNFNjQtZW5jb2RlZCBwbHVnaW4gKG5vdyBpbiBz dGFuZGFyZCA3Mi1jaGFyIGNodW5rIG1vZGUpIG9yIGFzIGEgZ3ppcHBlZCB2ZXJzaW9uIG9m IHRoZSBhYm92ZSAodXNlZnVsIGZvciBsYXJnZSBwbHVnaW5zKSBvciBhcyBhIHBocCBmaWxl IGluIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSBmb3JtYXQuIFRoaXMgbWVhbnMgeW91IGNhbiBz d2l0Y2ggYmV0d2VlbiBlZGl0aW5nIGluIHRoZSBwbHVnaW4gY29tcG9zZXIgb3IgeW91ciBm YXZvdXJpdGUgZWRpdGluZyBwcm9ncmFtLCB0ZXN0IHRoZSBmaWxlIGluIHRoZSBwbHVnaW5f Y2FjaGVfZGlyLCB0aGVuIGltcG9ydCBpdCBiYWNrIGludG8gPHNwYW4gY2xhc3M9ImNhcHMi PlRYUDwvc3Bhbj4gd2l0aCB0aGUgaGVscCBvZiB0aGUgY29tcG9zZXIgYW5kIHB1Ymxpc2gg eW91ciBwbHVnaW4gZm9yIGV2ZXJ5b25lLiBMb29rIGF0IHRoZSBib3R0b20gb2YgdGhlIFBs dWdpbiBDb21wb3NlciYjODIxNztzIEVkaXQgcGFnZSBmb3IgdGhlIG9wdGlvbnM7IGp1c3Qg cmVtZW1iZXIgdG8gc2F2ZSB5b3VyIGNoYW5nZXMgYmVmb3JlIGV4cG9ydGluZyBvciBjb3B5 aW5nL3Bhc3RpbmcgdGhlIGNvZGUhPC9saT4KCQk8bGk+SGVscCB0ZXh0IGNhbiBiZSB3cml0 dGVuIGluIFRleHRpbGUgb3IgKFgpSFRNTDwvbGk+CgkJPGxpPlN0eWxlcyBjYW4gYmUgYWRk ZWQgdG8gdGhlIGhlbHAgc2VjdGlvbiBmb3IgbW9yZSBwcmVjaXNlIGNvbnRyb2wgb3ZlciBm b3JtYXR0aW5nLiBJZiB5b3UgZm9yZ2V0IHRvIHB1dCB0aGUgPGNvZGU+JiM2MDtzdHlsZTwv Y29kZT4mIzYyOyB0YWdzIGluLCB0aGUgQ29tcG9zZXIgd2lsbCBkbyBpdCBmb3IgeW91PC9s aT4KCQk8bGk+U3VwcG9ydCBmb3IgQ2xpZW50LCBBZG1pbiwgYW5kIExpYnJhcnkgdHlwZSBw bHVnaW5zPC9saT4KCQk8bGk+VGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIDxhIGhyZWY9Imh0dHA6 Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0xMzA4OSI+VGlueU1D RSA8c3BhbiBjbGFzcz0iY2FwcyI+V1lTSVdZRzwvc3Bhbj4gZWRpdG9yPC9hPiAmIzgyMTI7 IHdoZW4geW91IGdldCBpdCwgdGhlIFBsdWdpbiBDb21wb3NlciB3aWxsIGF1dG9tYXRpY2Fs bHkgdXNlIGl0IGZvciB0aGUgaGVscCBmaWVsZDwvbGk+CgkJPGxpPldoZW4gdXNpbmcgdGhl IHBsdWdpbl9jYWNoZV9kaXIsIHRoZSBDb21wb3NlciBpcyBjb21wYXRpYmxlIHdpdGggbmV0 LWNhcnZlciYjODIxNztzIDxhIGhyZWY9Imh0dHA6Ly90eHAtcGx1Z2lucy5uZXRjYXJ2aW5n LmNvbS9wbHVnaW5zL3BsdWdpbi1oZWxwLXZpZXdlciI+UGx1Z2luIEhlbHAgVmlld2VyPC9h PiBmb3IgYSBtb3JlIHN0cmVhbWxpbmVkIGRldmVsb3BtZW50IHByb2Nlc3M8L2xpPgoJPC91 bD4KCgk8aDI+QXV0aG9yczwvaDI+CgoJPHA+T3JpZ2luYWwgcGx1Z2luOiA8YSBocmVmPSJo dHRwOi8vaW5zcGlyZWQua2lldi51YS9mZWVkYmFjay8iPll1cmEgTGlubnlrPC9hPjxiciAv PgpNb2RpZmljYXRpb25zICh2MC41KTogPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29t L2NvbW1lbnRGb3JtIj5TdGVmIERhd3NvbjwvYT48YnIgLz4KQSB0b3VjaCBvZiBjbGFzczog PGEgaHJlZj0iaHR0cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL2NvbnRhY3QiPlN0 ZXZlIERpY2tpbnNvbjwvYT48L3A+CgoJPGgyPkluc3RhbGxhdGlvbiAvIFVuaW5zdGFsbGF0 aW9uPC9oMj4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZyb20gdGhlIDxhIGhyZWY9Imh0 dHA6Ly9pbnNwaXJlZC5raWV2LnVhL3R4cC9pZWRfcGx1Z2luX2NvbXBvc2VyIj5JbnNwaXJl ZCBob21lcGFnZTwvYT4gKHYwLjUgYW5kIGFib3ZlIHRlbXBvcmFyaWx5IGhvc3RlZCBhdCA8 YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnN0ZWZkYXdzb24uY29tPC9hPiB1 bnRpbCBZdXJhIHJlc3VyZmFjZXMpLCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJiM2MjsgUGx1Z2lucyBwYWdlLCBpbnN0 YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi48L3A+CgoJPHA+VmlzaXQgdGhlIEV4dGVuc2lv bnMgLSYjNjI7IFBsdWdpbiBDb21wb3NlciB0YWIgYW5kIGl0IHdpbGwgYWxsIGJlY29tZSBh cHBhcmVudCE8L3A+CgoJPHA+VG8gcmVtb3ZlIHRoZSBjb21wb3NlciAobm9vb28hKSBqdXN0 IGRlbGV0ZSBpdCBmcm9tIHRoZSBBZG1pbiAtJiM2MjsgUGx1Z2lucyBwYWdlLiBObyBleHRy YSBtb2RpZmljYXRpb25zIGFyZSBtYWRlIHRvIHRoZSBkYXRhYmFzZSBhbmQgbm8gcGVuZ3Vp bnMgd2VyZSBoYXJtZWQgaW4gaXRzIGNyZWF0aW9uLjwvcD4KCgk8aDI+VXNhZ2U8L2gyPgoK CTxwPkFsbCBpbnN0YWxsZWQgcGx1Z2lucyBhcmUgbGlzdGVkIG9uIHRoZSBQbHVnaW4gQ29t cG9zZXIgcGFnZS4gVGhleSBjYW4gYWxsIGJlIGVuYWJsZWQvZGlzYWJsZWQsIGRlbGV0ZWQg b3IgZWRpdGVkIGZyb20gaGVyZS4gSWYgeW91IGFyZSB1c2luZyB0aGUgcGx1Z2luX2NhY2hl X2RpciAoQWRtaW4gLSYjNjI7IEFkdmFuY2VkIFByZWZzKSB0aGVuIGFueSBwbHVnaW5zIGlu IHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL2V4YW1wbGVf cGx1Z2luX3RlbXBsYXRlLnR4dCI+c3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0PC9hPiB1cGxv YWRlZCB0byB0aGlzIGRpcmVjdG9yeSB3aWxsIGJlIGF2YWlsYWJsZSBpbW1lZGlhdGVseSBm b3IgZWRpdGluZyBhbmQgdGVzdGluZy4gSW4gYWRkaXRpb24sIHRoZXNlIHBsdWdpbnMgYmVu ZWZpdCBmcm9tIGJlaW5nICYjODIyMDthbHdheXMgb24mIzgyMjE7IGFuZCBhYmxlIHRvIHRh a2UgYWR2YW50YWdlIG9mIHRoZSA8YSBocmVmPSJodHRwOi8vdHhwLXBsdWdpbnMubmV0Y2Fy dmluZy5jb20vcGx1Z2lucy9wbHVnaW4taGVscC12aWV3ZXIiPkhlbHAgVmlld2VyPC9hPi48 L3A+CgoJPHA+T24gdGhlIEVkaXQgcGFnZSwgY29kZSBnb2VzIGluIHRoZSAmIzgyMTY7UGx1 Z2luJiM4MjE3OyBib3gsIGhlbHAgZ29lcyBpbiB0aGUgJiM4MjE2O1BsdWdpbiBoZWxwJiM4 MjE3OyBib3gsIHN0eWxpbmcgZ29lcyBpbiB0aGUgJiM4MjE2O1N0eWxlJiM4MjE3OyBib3gh IEZpbGwgaW4gdGhlIG90aGVyIGZpZWxkcyB3aXRoIHJlbGV2YW50IGRldGFpbHMgYWJvdXQg eW91cnNlbGYgYW5kIHlvdXIgcGx1Z2luIGFuZCB5b3UmIzgyMTc7cmUgZ29vZCB0byBnby4g Q2hvb3NlIGZyb20gZWl0aGVyIENsaWVudC1zaWRlIG9ubHksIEFkbWluLXNpZGUgKHdoaWNo IGluY2x1ZGVzIGNsaWVudCBzaWRlIGJ5IGRlZmF1bHQpIG9yIExpYnJhcnkgcGx1Z2luIHR5 cGVzLiBObyBjaGVja2luZyBpcyBjdXJyZW50bHkgZG9uZSByZWdhcmRpbmcgdGhlIHR5cGUs IHNvIG1ha2Ugc3VyZSB5b3UgY2hvb3NlIHRoZSBjb3JyZWN0IG9uZS48L3A+CgoJPHA+SGl0 IFNhdmUgdG8gc3RvcmUgeW91ciBwbHVnaW4uIEZvciBhIHN0YW5kYXJkIChub24gcGx1Z2lu X2NhY2hlX2RpcikgcGx1Z2luLCBvbmNlIHlvdSYjODIxNztyZSBoYXBweSB3aXRoIGl0LCBz Y3JvbGwgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZWRpdCBwYWdlIGFuZCBjaG9vc2UgaG93IHRv IGV4cG9ydCBpdC4gVGhlIGZpcnN0IGxpbmsgaXMgZm9yIHN0YW5kYXJkIHBsdWdpbnMgd2hp Y2ggYXJlIGRpc3RyaWJ1dGVkIHRvIGFsbCB1c2VyczsgdGhlIHNlY29uZCBpcyBmb3IgY29t cHJlc3NlZCBwbHVnaW5zICYjODIxMjsgdXNlIHRoaXMgaWYgeW91ciBwbHVnaW5zIGFyZSBs YXJnZSwgb3Igc2ltcGx5IGFzIGFuIGFsdGVybmF0aXZlIGZvcm1hdC4gVGhlIHRoaXJkIGxp bmsgaXMgdG8gZXhwb3J0IGl0IGJhY2sgb3V0IGluIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSBm b3JtYXQgdG8gcGVyaGFwcyBnaXZlIHRvIGFub3RoZXIgZGV2ZWxvcGVyIGRpcmVjdGx5LiBB bHNvIHVzZWZ1bCBpZiB5b3Ugd2lzaCB0byBwcmVzZXJ2ZSB0aGUgVGV4dGlsZSBoZWxwIGZv cm1hdHRpbmcuPC9wPgoKCTxwPlBsdWdpbnMgaW4gdGhlIHBsdWdpbl9jYWNoZV9kaXIgYXJl IGV4cG9ydGVkIGZyb20gdGhlIG1haW4gUGx1Z2luIENvbXBvc2VyIGxpc3QgcGFnZS4gU2Ny b2xsIHRvIHRoZSBib3R0b20gYW5kIHlvdSB3aWxsIHNlZSBhIFB1Ymxpc2ggbGluayAodG8g cHJvZHVjZSBhIHN0YW5kYXJkIHBsdWdpbikgb3IgYSAmIzgyMTY7emlwJiM4MjE3OyBvcHRp b24gdG8gZ2VuZXJhdGUgYSBjb21wcmVzc2VkIHZlcnNpb24uPC9wPgoKCTxwPlRoZXJlIGFy ZSB0d28gb3RoZXIgd2F5cyBvZiBjcmVhdGluZyBwbHVnaW5zIGZyb20gdGhlIFBsdWdpbiBD b21wb3NlciBsaXN0IHBhZ2UuIFRoZSBmaXJzdCBpcyB0byBjcmVhdGUgYSBibGFuaywgZW1w dHkgcGx1Z2luLiBVc2UgdGhlIHRleHQgYm94IGF0IHRoZSB0b3AgZm9yIHRoaXMuIFRoZSBz ZWNvbmQgaXMgdG8gdXBsb2FkIG9uZSB1c2luZyB0aGUgQnJvd3NlL3VwbG9hZCBib3ggYXQg dGhlIGJvdHRvbS4gWW91IGNhbiB1cGxvYWQgY29kZSBpbiBlaXRoZXIgc3RhbmRhcmQgcGx1 Z2luIHRlbXBsYXRlIGZvcm1hdCAoY29tcGxldGUgd2l0aCA8c3BhbiBjbGFzcz0iY2FwcyI+ Q1NTPC9zcGFuPiBhcmVhcykgb3Igc2ltcGx5IHVwbG9hZCBhIDxzcGFuIGNsYXNzPSJjYXBz Ij5QSFA8L3NwYW4+IGZpbGUgY29udGFpbmluZyBjb2RlIG9ubHkuPC9wPgoKCTxwPkVpdGhl ciB3YXksIGlmIHRoZSBwbHVnaW4gbmFtZSBpcyBzcGVjaWZpZWQgaW4gdGhlIGZpbGUgaXRz ZWxmIGl0IHdpbGwgYmUgdXNlZC4gSWYgdGhhdCYjODIxNztzIG1pc3NpbmcgdGhlIGZpbGVu YW1lIHdpbGwgYmUgdXNlZC4gWW91IGNhbiBvdmVycmlkZSBib3RoIHRoZXNlIGJ5IGdpdmlu ZyB0aGUgcGx1Z2luIGEgbmFtZSBpbiB0aGUgYm94IG5leHQgdG8gdGhlIFVwbG9hZCBidXR0 b24uPC9wPgoKCTxoMj5Xcml0aW5nIGEgcGx1Z2luPC9oMj4KCgk8cD5Zb3Ugc2hvdWxkIGJl IGF3YXJlIG9mIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3Zp ZXd0b3BpYy5waHA/aWQ9OTg4MSI+UGx1Z2luIEF1dGhvciBSZXNvdXJjZXM8L2E+IHRvcGlj IG9uIHRoZSBUZXh0cGF0dGVybiBTdXBwb3J0IEZvcnVtLCBhbmQgeW91IG1pZ2h0IGFsc28g d2FudCB0byBoYXZlIGEgbG9vayBhdCB0aGUgPGEgaHJlZj0iaHR0cDovL2luc3BpcmVkLmtp ZXYudWEvdHhwLXBsdWdpbi1jaGVhdHNoZWV0Ij5UZXh0UGF0dGVybiBwbHVnaW4gY2hlYXQg c2hlZXQ8L2E+LjwvcD4KCgk8cD5IYXBweSBwbHVnaW4gYXV0aG9yaW5nIDotKTxiciAvPgo8 L2Rpdj48L3A+IjtzOjQ6ImNvZGUiO3M6MjMwNzg6ImlmKEB0eHBpbnRlcmZhY2UgPT0gJ2Fk bWluJykgew0KCWFkZF9wcml2cygnaWVkX3BsdWdpbl9jb21wb3NlcicsJzEsMicpOw0KCXJl Z2lzdGVyX3RhYignZXh0ZW5zaW9ucycsICdpZWRfcGx1Z2luX2NvbXBvc2VyJywgIlBsdWdp biBDb21wb3NlciIpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdpZWRfcGx1Z2luX2NvbXBvc2Vy JywgJ2llZF9wbHVnaW5fY29tcG9zZXInKTsNCglnbG9iYWwgJGllZF9wbHVnaW5fY29tcG9z ZXI7DQp9DQoNCmZ1bmN0aW9uIGllZF9wbHVnaW5fY29tcG9zZXIgKCRldmVudCwgJHN0ZXAp IHsNCglpZighJHN0ZXAgb3IgIWluX2FycmF5KCRzdGVwLCBhcnJheSgnaWVkX3BsdWdpbl9k ZWxldGUnLCdpZWRfcGx1Z2luX2VkaXQnLCdpZWRfcGx1Z2luX2hlbHAnLCdpZWRfcGx1Z2lu X2xpc3QnLCdpZWRfcGx1Z2luX2luc3RhbGwnLCdpZWRfcGx1Z2luX3NhdmUnLCdpZWRfcGx1 Z2luX3NhdmVfZmlsZScsJ2llZF9wbHVnaW5fdmVyaWZ5JywnaWVkX3N3aXRjaF9zdGF0dXMn LCdpZWRfcGx1Z2luX2NyZWF0ZV9uZXcnLCdpZWRfcGx1Z2luX3NhdmVfYXNfZmlsZScsJ2ll ZF9wbHVnaW5fc2F2ZV9hc19waHBfZmlsZScsJ2llZF9wbHVnaW5fdXBsb2FkJykpKSB7DQoJ CWllZF9wbHVnaW5fbGlzdCgpOw0KCX0gZWxzZSAkc3RlcCgpOw0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBpZWRfcGx1Z2luX2xpc3QoJG1lc3NhZ2U9JycpIHsNCglwYWdldG9wKGdU eHQoJ2VkaXRfcGx1Z2lucycpLCRtZXNzYWdlKTsNCgllY2hvIHN0YXJ0VGFibGUoJ2xpc3Qn KS4NCnRyKHRkYSgNCmZvcm0oDQpmSW5wdXQoJ3RleHQnLCduYW1lJywnJywnJywnJywnJywn MzAnLCcwJykNCi4gZklucHV0KCdzdWJtaXQnLCdzdWJtaXQnLCdjcmVhdGUgbmV3IHBsdWdp bicsJ3NtYWxsZXJib3gnKQ0KLiBzSW5wdXQoJ2llZF9wbHVnaW5fY3JlYXRlX25ldycpDQou IGVJbnB1dCgnaWVkX3BsdWdpbl9jb21wb3NlcicpDQopDQosJyBjb2xzcGFuPSI2IiBzdHls ZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHgiJykpLg0KYXNzSGVhZCgncGx1Z2luJywnYXV0aG9y JywndmVyc2lvbicsJ2Rlc2NyaXB0aW9uJywnJywnYWN0aXZlJywnJyk7DQoNCgkkcnMgPSBz YWZlX3Jvd3Nfc3RhcnQoIioiLCJ0eHBfcGx1Z2luIiwgIjE9MSBvcmRlciBieSBuYW1lIik7 DQoNCgl3aGlsZSAoJGEgPSBuZXh0Um93KCRycykpIHsNCgkJZXh0cmFjdCgkYSk7DQoJCSRl bGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1p ZWRfcGx1Z2luX2VkaXQmIzM4O25hbWU9Jy4kbmFtZS4nIj4nLmdUeHQoJ2VkaXQnKS4nPC9h Pic7DQoJCWVjaG8gdHIodGQoJG5hbWUpDQoudGQoJzxhIGhyZWY9IicuJGF1dGhvcl91cmku JyI+Jy4kYXV0aG9yLic8L2E+JykNCi50ZCgkdmVyc2lvbiwxMCkNCi50ZCgkZGVzY3JpcHRp b24sMjYwKQ0KLnRkKHN0cm9uZygkZWxpbmspKQ0KLnRkKGllZF9zdGF0dXNfbGluaygkc3Rh dHVzLCRuYW1lLHllc19ubygkc3RhdHVzKSksMzApDQoudGQoZExpbmsoJ2llZF9wbHVnaW5f Y29tcG9zZXInLCdpZWRfcGx1Z2luX2RlbGV0ZScsJ25hbWUnLCRuYW1lKSwzMCkNCik7DQoJ CXVuc2V0KCRuYW1lLCRwYWdlLCRkZWxldGVsaW5rKTsNCgl9DQoNCglpZiAoIWVtcHR5KCRH TE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10pKSB7DQoJCSRmaWxlbmFtZXMg PSBhcnJheSgpOw0KCQkkZGlyID0gZGlyKCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2Fj aGVfZGlyJ10pOw0KCQl3aGlsZSAoJGZpbGUgPSAkZGlyLT5yZWFkKCkpIHsNCgkJCWlmKCRm aWxlICE9ICIuIiAmJiAkZmlsZSAhPSAiLi4iKSB7DQoJCQkJJGZpbGVhZGRyID0gJEdMT0JB TFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy4kZmlsZTsNCgkJCQlpZiAoIWlz X2RpcigkZmlsZWFkZHIpKSB7DQoJCQkJCSRmaWxlbmFtZXNbXT0kZmlsZTsNCgkJCQl9DQoJ CQl9DQoJCX0NCgkJJGRpci0+Y2xvc2UoKTsNCgkJKCRmaWxlbmFtZXMpP25hdGNhc2Vzb3J0 KCRmaWxlbmFtZXMpOicnOw0KCQllY2hvIHRyKA0KCQl0ZGEoDQoJCXRhZygnUGx1Z2lucyB0 aGF0IHJ1biBmcm9tICcudGFnKCdwbHVnaW5fY2FjaGVfZGlyJywnYWNyb255bScsJyB0aXRs ZT0iJy4kR0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLiciIHN0eWxlPSJi b3JkZXItYm90dG9tOjFweCBkYXNoZWQgYmxhY2siJykuJzonLCdoMScpDQoJCSwnIGNvbHNw YW49IjciIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweDt0ZXh0LWFsaWduOmxlZnQiJykN Cg0KCQkpOw0KDQoJCWVjaG8gYXNzSGVhZCgncGx1Z2luJywnYXV0aG9yJywndmVyc2lvbics J2Rlc2NyaXB0aW9uJywnJywncHVibGlzaCcsJycpOw0KCQlmb3JlYWNoKCRmaWxlbmFtZXMg YXMgJGZpbGVuYW1lKSB7DQoJCQkkZWxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVn aW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9lZGl0JiMzODtmaWxlbmFtZT0nLiRm aWxlbmFtZS4nIj4nLmdUeHQoJ2VkaXQnKS4nPC9hPic7DQoNCgkJCSRmaWxlZXh0PSBhcnJh eV9wb3AoZXhwbG9kZSAoJy4nLCRmaWxlbmFtZSkpOw0KCQkJaWYgKCRmaWxlZXh0PT0ncGhw Jykgew0KCQkJCSRiYXNlbmFtZT1iYXNlbmFtZSgkZmlsZW5hbWUpOw0KDQoJCQkJJHBsdWdp biA9IGllZF9wbHVnaW5fcmVhZF9maWxlKCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2Fj aGVfZGlyJ10uRFMuJGZpbGVuYW1lKTsNCg0KCQkJCWVjaG8gdHIoDQoJCQkJdGQoDQoJCQkJ dGFnKCRmaWxlbmFtZSwnZGl2JywnIHN0eWxlPSJjb2xvcjpncmF5O2JvcmRlcjowcHggc29s aWQgZ3JheTtwYWRkaW5nOjFweCAycHggMnB4IDFweDsiJykNCgkJCQkuKGlzc2V0KCRwbHVn aW5bJ25hbWUnXSk/JHBsdWdpblsnbmFtZSddLic8YnIgLz4nOicnKS4nICcNCgkJCQkpDQoJ CQkJLnRkKA0KCQkJCSggaXNzZXQoJHBsdWdpblsnYXV0aG9yX3VyaSddKT8nPGEgaHJlZj0i Jy4kcGx1Z2luWydhdXRob3JfdXJpJ10uJyI+JzonJyApIC4NCgkJCQkoIGlzc2V0KCRwbHVn aW5bJ2F1dGhvciddKT8kcGx1Z2luWydhdXRob3InXTonJm5ic3A7JyApLg0KCQkJCSggaXNz ZXQoJHBsdWdpblsnYXV0aG9yX3VyaSddKT8nPC9hPic6JycgKQ0KCQkJCSkNCgkJCQkudGQo KGlzc2V0KCRwbHVnaW5bJ3ZlcnNpb24nXSk/JHBsdWdpblsndmVyc2lvbiddOicmbmJzcDsn KSwxMCkNCgkJCQkudGQoKGlzc2V0KCRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ10pPyRwbHVnaW5b J2Rlc2NyaXB0aW9uJ106JyZuYnNwOycpLDI2MCkNCgkJCQkudGQoc3Ryb25nKCRlbGluaykN CgkJCQkvLy5pZWRfc3RhdHVzX2xpbmsoJHN0YXR1cywkYmFzZW5hbWUseWVzX25vKCRzdGF0 dXMpKQ0KCQkJCSkNCgkJCQkudGQoKGlzc2V0KCRwbHVnaW5bJ25hbWUnXSk/DQoJCQkJdGFn KGdUeHQoJ3B1Ymxpc2gnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3Nl ciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7ZmlsZW5hbWU9Jy4kZmls ZW5hbWUuJyIgdGl0bGU9InNhdmUgYXMgJyAuICRwbHVnaW5bJ25hbWUnXS4nX3YnLiRwbHVn aW5bJ3ZlcnNpb24nXS4gJy50eHQiJykNCgkJCQkJCS50YWcoJyBbemlwXScsJ2EnLCcgaHJl Zj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZl X2FzX2ZpbGUmIzM4O2ZpbGVuYW1lPScuJGZpbGVuYW1lLicmIzM4O3ppcD10cnVlIiB0aXRs ZT0ic2F2ZSBhcyAnIC4gJHBsdWdpblsnbmFtZSddLidfdicuJHBsdWdpblsndmVyc2lvbidd LiAnX3ppcC50eHQiJyk6DQoJCQkJdGFnKCcmbmJzcDsnLCdzcGFuJywnIHN0eWxlPSJjb2xv cjpncmF5IicpDQoJCQkJKSkNCgkJCQkudGQoJycpDQoJCQkJKTsNCgkJCX0NCgkJfQ0KCX0N Cg0KCWVjaG8gdHIoDQp0ZGEoDQonPGZvcm0gZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0 YSIgYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9zdCI+Jy4NCnN0YXJ0VGFibGUoJ2Vk aXQnLCdsZWZ0JykuDQp0cih0ZGEoIGhJbnB1dCgnTUFYX0ZJTEVfU0laRScsMTAwMDAwMCku DQpncmFmKCdVcGxvYWQgcGx1Z2luIGZyb20gcGhwIGZpbGUnLic6ICcuDQpmSW5wdXQoJ2Zp bGUnLCd0aGVmaWxlJywnJywnZWRpdCcpLg0KZklucHV0KCdzdWJtaXQnLCdzdWJtaXQnLGdU eHQoJ3VwbG9hZCcpLCdzbWFsbGVyYm94JykpLg0KZUlucHV0KCdpZWRfcGx1Z2luX2NvbXBv c2VyJykuDQpzSW5wdXQoJ2llZF9wbHVnaW5fdXBsb2FkJykgLCAnIHN0eWxlPSJib3JkZXI6 MHB4IHNvbGlkIGdyYXkiJyApLg0KdGRhKCB0YWcoJ25hbWUnLCdhY3JvbnltJywnIHRpdGxl PSJuZWVkZWQgb25seSBpZiB0aGUgcGhwIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcgZG9lcyBu b3QgY29udGFpbiBtZXRhZGF0YSIgc3R5bGU9ImJvcmRlci1ib3R0b206MXB4IGRhc2hlZCBi bGFjayInKS4nOiAnLiBmSW5wdXQoJ3RleHQnLCduYW1lJywneHh4X3h4eHh4eCcsJycsJycs JycsJzMwJywnMCcpICwgJyBzdHlsZT0iYm9yZGVyOjBweCBzb2xpZCBncmF5O3ZlcnRpY2Fs LWFsaWduOm1pZGRsZTsiJyApKS4NCmVuZFRhYmxlKCkuDQonPC9mb3JtPicNCiwnIGNvbHNw YW49IjYiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweDt0ZXh0LWFsaWduOmxlZnQiJykN Cik7DQoJZWNobyBlbmRUYWJsZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRf c3RhdHVzX2xpbmsoJHN0YXR1cywkbmFtZSwkbGlua3RleHQpIHsNCgkkb3V0ID0gJzxhIGhy ZWY9ImluZGV4LnBocD8nOw0KCSRvdXQgLj0gJ2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXIm IzM4O3N0ZXA9aWVkX3N3aXRjaF9zdGF0dXMmIzM4O3N0YXR1cz0nLg0KCSRzdGF0dXMuJyYj Mzg7bmFtZT0nLnVybGVuY29kZSgkbmFtZSkuJyInOw0KCSRvdXQgLj0gJz4nLiRsaW5rdGV4 dC4nPC9hPic7DQoJcmV0dXJuICRvdXQ7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGll ZF9zd2l0Y2hfc3RhdHVzKCkgew0KCWV4dHJhY3QoZ3BzYShhcnJheSgnbmFtZScsJ3N0YXR1 cycpKSk7DQoJJGNoYW5nZSA9ICgkc3RhdHVzKSA/IDAgOiAxOw0KCXNhZmVfdXBkYXRlKCJ0 eHBfcGx1Z2luIiwgInN0YXR1cz0kY2hhbmdlIiwgIm5hbWU9JyRuYW1lJyIpOw0KCWllZF9w bHVnaW5fbGlzdChtZXNzZW5nZXIoJ3BsdWdpbicsJG5hbWUsJ3VwZGF0ZWQnKSk7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fZGVsZXRlKCkgew0KCSRuYW1lID0g ZG9TbGFzaChwcygnbmFtZScpKTsNCglzYWZlX2RlbGV0ZSgidHhwX3BsdWdpbiIsIm5hbWU9 JyRuYW1lJyIpOw0KCWllZF9wbHVnaW5fbGlzdChtZXNzZW5nZXIoJ3BsdWdpbicsJG5hbWUs J2RlbGV0ZWQnKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fZWRp dCgkbWVzc2FnZT0nJykgew0KCSRuYW1lID0gZ3BzKCduZXduYW1lJyk/Z3BzKCduZXduYW1l Jyk6Z3BzKCduYW1lJyk7DQoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwkbWVzc2Fn ZSk7DQoJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgoZ3BzKCdmaWxlbmFtZScpKT9ncHMo J2ZpbGVuYW1lJyk6JG5hbWUsIGdwcygnZmlsZW5hbWUnKT8gMTogMCk7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fZWRpdF9mb3JtKCRuYW1lPScnLCRlZGl0Zmls ZT0wKSB7DQoJaWYgKCEkZWRpdGZpbGUpIHsNCgkJJGF1dGhvciA9ICgkbmFtZSkgPyBmZXRj aCgnYXV0aG9yJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOw0KCQkkYXV0aG9y X3VyaSA9ICgkbmFtZSkgPyBmZXRjaCgnYXV0aG9yX3VyaScsJ3R4cF9wbHVnaW4nLCduYW1l JywkbmFtZSkgOiAnJzsNCgkJJHZlcnNpb24gPSAoJG5hbWUpID8gZmV0Y2goJ3ZlcnNpb24n LCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7DQoJCSRkZXNjcmlwdGlvbiA9ICgk bmFtZSkgPyBmZXRjaCgnZGVzY3JpcHRpb24nLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUp IDogJyc7DQoJCSRjb2RlID0gKCRuYW1lKSA/IGZldGNoKCdjb2RlJywndHhwX3BsdWdpbics J25hbWUnLCRuYW1lKSA6ICcnOw0KCQkkaGVscCA9ICgkbmFtZSkgPyBmZXRjaCgnaGVscCcs J3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsNCgkJJHN0YXR1cyA9ICgkbmFtZSkg PyBmZXRjaCgnc3RhdHVzJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOw0KCQkk dHlwZSA9ICgkbmFtZSkgPyBmZXRjaCgndHlwZScsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFt ZSkgOiAnJzsNCgkJbGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4 dHJhY3RfaHVuaygkaGVscCwgIkNTUyIsICIvLyIsIHRydWUpIDogYXJyYXkoJycsJGhlbHAp Ow0KCX0gZWxzZSB7DQoJCSRwbHVnaW4gPSBpZWRfcGx1Z2luX3JlYWRfZmlsZSgkR0xPQkFM U1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLkRTLiRuYW1lKTsNCgkJJGZpbGVuYW1l PSRuYW1lOw0KCQkkZmlsZWV4dD0gYXJyYXlfcG9wKCRuYW1lPWV4cGxvZGUgKCcuJywkbmFt ZSkpOw0KCQkkbmFtZT1pbXBsb2RlKCRuYW1lKTsNCgkJZXh0cmFjdCAoJHBsdWdpbik7IC8v IGNvZGUsIGhlbHAsIGNzcywgbmFtZSwgdmVyc2lvbiwgdHlwZSwgZGVzY3JpcHRpb24sIGF1 dGhvciwgYXV0aG9yX3VyaQ0KCQkkc3RhdHVzPSAoJGZpbGVleHQ9PSdwaHAnKT8gMTogMDsN Cgl9DQoJJHBsdWdpblsnbmFtZSddID0gJG5hbWU7DQoJJHBsdWdpblsnYXV0aG9yJ10gPSAk YXV0aG9yOw0KCSRwbHVnaW5bJ2F1dGhvcl91cmknXSA9ICRhdXRob3JfdXJpOw0KCSRwbHVn aW5bJ3ZlcnNpb24nXSA9ICR2ZXJzaW9uOw0KCSRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ10gPSAk ZGVzY3JpcHRpb247DQoJJHBsdWdpblsnaGVscCddID0gJGhlbHA7DQoJJHBsdWdpblsnY29k ZSddID0gJGNvZGU7DQoJJHBsdWdpblsndHlwZSddID0gJHR5cGU7DQoJJHBsdWdpblsnbWQ1 J10gPSBtZDUoICRwbHVnaW5bJ2NvZGUnXSApOw0KDQoJJGRpc3RyaWJ1dGlvbj0nPHRleHRh cmVhIG5hbWU9ImRpc3RyaWJ1dGlvbiIgcm93cz0iMSIgY29scz0iOTAiIG9uY2xpY2s9InRo aXMuc2VsZWN0KCkiPicuYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJHBsdWdpbikpLic8L3Rl eHRhcmVhPic7DQoNCgkkc2xpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29t cG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4O25hbWU9Jy4kbmFt ZS4nIj5zYXZlIGFzICcgLiAkbmFtZS4nX3YnLiR2ZXJzaW9uLiAnLnR4dDwvYT4nOw0KCSRz emlwbGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3Rl cD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7bmFtZT0nLiRuYW1lLicmIzM4O3ppcD10 cnVlIj5zYXZlIGFzICcgLiAkbmFtZS4nX3YnLiR2ZXJzaW9uLiAnLnR4dCAoY29tcHJlc3Nl ZCk8L2E+JzsNCgkkc3BocGxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29t cG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX3BocF9maWxlJiMzODtuYW1lPScu JG5hbWUuJyI+c2F2ZSBhcyAnIC4gJG5hbWUuJ192Jy4kdmVyc2lvbi4gJy5waHA8L2E+JzsN Cg0KCSRuZXduYW1lID1mSW5wdXQoJ3RleHQnLCduZXduYW1lJywkbmFtZSwnZWRpdCcsJzc4 JywnJywnOTAnLCcyJyk7DQoJJGF1dGhvciA9ZklucHV0KCd0ZXh0JywnYXV0aG9yJywkYXV0 aG9yLCdlZGl0JywnNzgnLCcnLCc5MCcsJzInKTsNCgkkYXV0aG9yX3VyaSA9ZklucHV0KCd0 ZXh0JywnYXV0aG9yX3VyaScsJGF1dGhvcl91cmksJ2VkaXQnLCc3OCcsJycsJzkwJywnMicp Ow0KCSR2ZXJzaW9uID1mSW5wdXQoJ3RleHQnLCd2ZXJzaW9uJywkdmVyc2lvbiwnZWRpdCcs Jzc4JywnJywnOTAnLCcyJyk7DQoJJGRlc2NyaXB0aW9uID1mSW5wdXQoJ3RleHQnLCdkZXNj cmlwdGlvbicsJGRlc2NyaXB0aW9uLCdlZGl0JywnNzgnLCcnLCc5MCcsJzInKTsNCgkkY29k ZSA9ICc8dGV4dGFyZWEgbmFtZT0iY29kZSIgcm93cz0iMzAiIGNvbHM9IjkwIj4nLmh0bWxl bnRpdGllcyh1dGY4X2RlY29kZSgkY29kZSkpLic8L3RleHRhcmVhPic7DQoJJGhlbHAgPSAn PHRleHRhcmVhIG5hbWU9ImhlbHAiIHJvd3M9IjMwIiBjb2xzPSI5MCIgY2xhc3M9Im1jZUVk aXRvciI+Jy5odG1sZW50aXRpZXModXRmOF9kZWNvZGUoJGhlbHApKS4nPC90ZXh0YXJlYT4n Ow0KCSRjc3MgPSAnPHRleHRhcmVhIG5hbWU9ImNzcyIgcm93cz0iMTUiIGNvbHM9IjkwIj4n Lmh0bWxlbnRpdGllcyh1dGY4X2RlY29kZSgkY3NzKSkuJzwvdGV4dGFyZWE+JzsNCgkkcHJl ZnMgPSAoKCEkZWRpdGZpbGUpP2NoZWNrYm94KCdzdGF0dXMnLDEsJHN0YXR1cykuICcgPGxh YmVsIGZvcj0ic3RhdHVzIj5lbmFibGUgcGx1Z2luPC9sYWJlbD4nOicnKSAuICcgPGxhYmVs IGZvcj0idHlwZSI+JiMxNjA7JiMxNjA7JiMxNjA7UGx1Z2luIHR5cGU6PC9sYWJlbD4nLiBy YWRpbygndHlwZScsMCwoKCR0eXBlPT0wKT8xOjApKS4iQ2xpZW50ICIgLiByYWRpbygndHlw ZScsMSwoKCR0eXBlPT0xKT8xOjApKS4iQWRtaW4gIiAuIHJhZGlvKCd0eXBlJywyLCgoJHR5 cGU9PTIpPzE6MCkpLiJMaWJyYXJ5IjsNCg0KCSR0aW55bWNlID0gJzxzY3JpcHQgbGFuZ3Vh Z2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLmh1Lid0ZXh0 cGF0dGVybi90aW55X21jZS90aW55X21jZS5qcyI+PC9zY3JpcHQ+Jy4NCgluLic8c2NyaXB0 IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCXRpbnlN Q0UuaW5pdCh7DQoJbW9kZSA6ICJzcGVjaWZpY190ZXh0YXJlYXMiLA0KCWVkaXRvcl9zZWxl Y3RvciA6ICJtY2VFZGl0b3IiLA0KCXRoZW1lX2FkdmFuY2VkX3Rvb2xiYXJfbG9jYXRpb24g OiAidG9wIiwNCgl0aGVtZV9hZHZhbmNlZF9idXR0b25zMSA6ICJib2xkLGl0YWxpYyx1bmRl cmxpbmUsc3RyaWtldGhyb3VnaCxmb3JlY29sb3IsYmFja2NvbG9yLHJlbW92ZWZvcm1hdCxu dW1saXN0LGJ1bGxpc3Qsb3V0ZGVudCxpbmRlbnQsanVzdGlmeWxlZnQsanVzdGlmeWNlbnRl cixqdXN0aWZ5cmlnaHQsanVzdGlmeWZ1bGwiLA0KCXRoZW1lX2FkdmFuY2VkX2J1dHRvbnMy IDogImxpbmssdW5saW5rLHNlcGFyYXRvcixpYnJvd3NlcixzZXBhcmF0b3Isc2VhcmNoLHJl cGxhY2Usc2VwYXJhdG9yLGN1dCxjb3B5LHBhc3RlLHNlcGFyYXRvcixjb2RlLHNlcGFyYXRv cixmb3JtYXRzZWxlY3QiLA0KCXRoZW1lX2FkdmFuY2VkX2J1dHRvbnMzIDogIiINCgl9KTsN Cgk8L3NjcmlwdD4nOw0KCSRzdWIgPSBmSW5wdXQoJ3N1Ym1pdCcsJycsZ1R4dCgnc2F2ZScp LCdwdWJsaXNoJyk7DQoJcmV0dXJuDQoJJHRpbnltY2UNCgkuICBmb3JtKHN0YXJ0VGFibGUo J2VkaXQnKQ0KCS4gIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuICB0ZCgkc3ViKSkNCgku ICggKGlzc2V0KCRmaWxlbmFtZSkpPyB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgk ZmlsZW5hbWUuaElucHV0KCdmaWxlbmFtZScsJGZpbGVuYW1lKSkpIDogJycgKQ0KCS4gIHRy KCBmTGFiZWxDZWxsKCAncGx1Z2luJyApIC4gIHRkKCRuZXduYW1lKSkNCgkuICB0ciggZkxh YmVsQ2VsbCggJ3BsdWdpbicgKSAuICB0ZCgkY29kZSkpDQoJLiAgdHIoIGZMYWJlbENlbGwo ICdwcmVmcycgKSAuICB0ZCgkcHJlZnMpKQ0KDQoJLiAgdHIoIGZMYWJlbENlbGwoICd2ZXJz aW9uJyApIC4gIHRkKCR2ZXJzaW9uKSkNCgkuICB0ciggZkxhYmVsQ2VsbCggJ2F1dGhvcicg KSAuICB0ZCgkYXV0aG9yKSkNCgkuICB0ciggZkxhYmVsQ2VsbCggJ3dlYnNpdGUnICkgLiAg dGQoJGF1dGhvcl91cmkpKQ0KCS4gIHRyKCBmTGFiZWxDZWxsKCAnZGVzY3JpcHRpb24nICkg LiAgdGQoJGRlc2NyaXB0aW9uKSkNCgkuICB0ciggZkxhYmVsQ2VsbCggJ3BsdWdpbl9oZWxw JyApIC4gIHRkKCRoZWxwKSkNCgkuICB0ciggZkxhYmVsQ2VsbCggJ2NzcycgKSAuICB0ZCgk Y3NzKSkNCgkuICB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiAgdGQoJHN1YikpDQoNCgku ICAoICghJGVkaXRmaWxlKT8gdHIoIHRkY3MoJzxocj4nLDIpKQ0KCS4gIHRyKCBmTGFiZWxD ZWxsKCcmbmJzcDsnKSAuICB0ZCgnVXRpbGl0aWVzICg8c3Ryb25nPnVzZSBvbmx5IGFmdGVy IHNhdmluZyB0aGUgZGF0YSBhYm92ZTwvc3Ryb25nPik6JykpDQoNCgkuICB0ciggZkxhYmVs Q2VsbCggJ3BsdWdpbiBjb2RlPGJyPmZvciBkaXN0cmlidXRpb24nICkgLiAgdGQoJGRpc3Ry aWJ1dGlvbikpDQoJLiAgdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gIHRkKCRzbGluaykp DQoJLiAgdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gIHRkKCRzemlwbGluaykpDQoJLiAg dHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gIHRkKCRzcGhwbGluaykpIDogJycpDQoJLiAg ZW5kVGFibGUoKQ0KCS4gIHNJbnB1dCgnaWVkX3BsdWdpbl9zYXZlJykNCgkuICBlSW5wdXQo J2llZF9wbHVnaW5fY29tcG9zZXInKQ0KCS5oSW5wdXQoJ25hbWUnLCRuYW1lKSk7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fc2F2ZSgpIHsNCglleHRyYWN0KGRv U2xhc2goZ3BzYShhcnJheSgnbmFtZScsJ25ld25hbWUnLCdmaWxlbmFtZScsJ2NvZGUnLCdh dXRob3InLCdhdXRob3JfdXJpJywndmVyc2lvbicsJ2Rlc2NyaXB0aW9uJywnaGVscCcsJ2Nz cycsJ3N0YXR1cycsJ3R5cGUnKSkpKTsNCgkkc3RhcnRfY3NzID0gIi8vIC0tLSBCRUdJTiBQ TFVHSU4gQ1NTIC0tLSI7DQoJJGVuZF9jc3MgPSAiLy8gLS0tIEVORCBQTFVHSU4gQ1NTIC0t LSI7DQoNCglpZiAoZW1wdHkoJGZpbGVuYW1lKSkgew0KCQlzYWZlX3VwZGF0ZSgidHhwX3Bs dWdpbiIsIm5hbWU9JyRuZXduYW1lJyIsICJuYW1lPSckbmFtZSciKTsNCgkJc2FmZV91cGRh dGUoInR4cF9wbHVnaW4iLCJjb2RlPSckY29kZSciLCAibmFtZT0nJG5ld25hbWUnIik7DQoJ CXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwiYXV0aG9yPSckYXV0aG9yJyIsICJuYW1lPSck bmV3bmFtZSciKTsNCgkJc2FmZV91cGRhdGUoInR4cF9wbHVnaW4iLCJhdXRob3JfdXJpPSck YXV0aG9yX3VyaSciLCAibmFtZT0nJG5ld25hbWUnIik7DQoJCXNhZmVfdXBkYXRlKCJ0eHBf cGx1Z2luIiwidmVyc2lvbj0nJHZlcnNpb24nIiwgIm5hbWU9JyRuZXduYW1lJyIpOw0KCQlz YWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsImRlc2NyaXB0aW9uPSckZGVzY3JpcHRpb24nIiwg Im5hbWU9JyRuZXduYW1lJyIpOw0KCQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsImhlbHA9 JyIuJGhlbHAuKCgkY3NzKSA/IG4uJHN0YXJ0X2Nzcy5uLiRjc3Mubi4kZW5kX2NzczonJyku IiciLCAibmFtZT0nJG5ld25hbWUnIik7DQoJCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwi c3RhdHVzPSckc3RhdHVzJyIsICJuYW1lPSckbmV3bmFtZSciKTsNCgkJc2FmZV91cGRhdGUo InR4cF9wbHVnaW4iLCJ0eXBlPSckdHlwZSciLCAibmFtZT0nJG5ld25hbWUnIik7DQoJfSBl bHNlIHsNCgkJJGZpbGVjb250ZW50ID0gZmlsZSgkR0xPQkFMU1sncHJlZnMnXVsncGx1Z2lu X2NhY2hlX2RpciddLkRTLiRmaWxlbmFtZSk7DQoJCSRmaWxlY29udGVudCA9IGllZF9wbHVn aW5fbWFrZV9hcnJheSgkZmlsZWNvbnRlbnQpOw0KCQkkbWV0YXZhcnMgPSBhcnJheSgibmFt ZSIgPT4gIiRuZXduYW1lIiwNCgkJCQkJCQkJInZlcnNpb24iID0+ICIkdmVyc2lvbiIsDQoJ CQkJCQkJCSJhdXRob3IiID0+ICIkYXV0aG9yIiwNCgkJCQkJCQkJImF1dGhvcl91cmkiID0+ ICIkYXV0aG9yX3VyaSIsDQoJCQkJCQkJCSJkZXNjcmlwdGlvbiIgPT4gIiRkZXNjcmlwdGlv biIsDQoJCQkJCQkJCSJ0eXBlIiA9PiAiJHR5cGUiDQoJCQkJCQkpOw0KCQkkaHVua3ZhcnMg PSBhcnJheSgiQ1NTIiA9PiBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxuJywnDQonLCRjc3Mp KSwNCgkJCQkJCQkJIkhFTFAiID0+IGRvU3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcNCics JGhlbHApKSwNCgkJCQkJCQkJIkNPREUiID0+IGRvU3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4n LCcNCicsJGNvZGUpKSwgLy8gd29ya2Fyb3VuZA0KCQkJCQkJKTsNCgkJZm9yZWFjaCAoJG1l dGF2YXJzIGFzICR2YXJuYW1lID0+ICR2YWx1ZSkgew0KCQkJZm9yKCRpZHggPSAwOyAkaWR4 IDwgY291bnQoJGZpbGVjb250ZW50KTsgJGlkeCsrKSB7DQoJCQkJaWYgKHN0cnBvcygkZmls ZWNvbnRlbnRbJGlkeF0sICckcGx1Z2luW1wnJy4kdmFybmFtZS4nXCddJykgPT09IDApIHsN CgkJCQkJJGZpbGVjb250ZW50WyRpZHhdID0gJyRwbHVnaW5bXCcnLiR2YXJuYW1lLidcJ10g PSAnLmRvUXVvdGUoJHZhbHVlKS4nOyc7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJ fQ0KCQlmb3JlYWNoICgkaHVua3ZhcnMgYXMgJHZhcm5hbWUgPT4gJGh1bmspIHsNCgkJCSRz dGFydF9kZWxpbSA9ICIjIC0tLSBCRUdJTiBQTFVHSU4gJHZhcm5hbWUgLS0tIjsNCgkJCSRl bmRfZGVsaW0gPSAiIyAtLS0gRU5EIFBMVUdJTiAkdmFybmFtZSAtLS0iOw0KCQkJJHN0YXJ0 ID0gYXJyYXlfc2VhcmNoKCRzdGFydF9kZWxpbSwgJGZpbGVjb250ZW50KSArIDE7DQoJCQkk ZW5kID0gYXJyYXlfc2VhcmNoKCRlbmRfZGVsaW0sICRmaWxlY29udGVudCk7DQoJCQlhcnJh eV9zcGxpY2UoJGZpbGVjb250ZW50LCAkc3RhcnQsICRlbmQtJHN0YXJ0LCAkaHVuayk7DQoJ CX0NCgkJJGZpbGVjb250ZW50ID0gaW1wbG9kZSgiXHJcbiIsICRmaWxlY29udGVudCk7DQoJ CSRmaCA9IGZvcGVuKCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMu JGZpbGVuYW1lLCAndysnKTsNCgkJZndyaXRlKCRmaCwgJGZpbGVjb250ZW50KTsNCgkJZmNs b3NlKCRmaCk7DQoJfQ0KCWllZF9wbHVnaW5fZWRpdChtZXNzZW5nZXIoJ3BsdWdpbicsJG5l d25hbWUsJ3NhdmVkJykpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2lu X2NyZWF0ZV9uZXcoKSB7DQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ25hbWUnKSkp KTsNCglpZiAoJG5hbWU9PScnKSB7DQoJCWllZF9wbHVnaW5fbGlzdCgnWW91IGFyZSBzdXBw b3NlZCB0byBuYW1lIHRoZSBuZXcgcGx1Z2luIDspJyk7DQoJCXJldHVybjsNCgl9DQoJJGV4 aXN0cyA9IGZldGNoKCduYW1lJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKTsNCglpZiAo ISRleGlzdHMpIHsNCgkJc2FmZV9pbnNlcnQoInR4cF9wbHVnaW4iLCAiDQoJCQluYW1lPSck bmFtZScsDQoJCQlzdGF0dXM9JzAnLA0KCQkJdHlwZT0nMCcsDQoJCQl2ZXJzaW9uPScwLjEn DQoJCSIpOw0KCQlwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycpLCAnZWRpdCB5b3VyIG5l dyBwbHVnaW4nKTsNCgkJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmFtZSk7DQoJfSBl bHNlIHsNCgkJaWVkX3BsdWdpbl9saXN0KGdUeHQoJ3BsdWdpbicpLicgPHN0cm9uZz4nLiRu YW1lLic8L3N0cm9uZz4gJy5nVHh0KCdhbHJlYWR5X2V4aXN0cycpKTsNCgl9DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fc2F2ZV9hc19maWxlKCkgew0KCWlmIChn cHMoJ25hbWUnKSkgew0KCQkkbmFtZSA9IGdwcygnbmFtZScpOw0KCQkkZGVzY3JpcHRpb24g PSAoJG5hbWUpID8gZmV0Y2goJ2Rlc2NyaXB0aW9uJywndHhwX3BsdWdpbicsJ25hbWUnLCRu YW1lKSA6ICcnOw0KCQkkYXV0aG9yID0gKCRuYW1lKSA/IGZldGNoKCdhdXRob3InLCd0eHBf cGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7DQoJCSRhdXRob3JfdXJpID0gKCRuYW1lKSA/ IGZldGNoKCdhdXRob3JfdXJpJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOw0K CQkkdmVyc2lvbiA9ICgkbmFtZSkgPyBmZXRjaCgndmVyc2lvbicsJ3R4cF9wbHVnaW4nLCdu YW1lJywkbmFtZSkgOiAnJzsNCgkJJGNvZGUgPSAoJG5hbWUpID8gZmV0Y2goJ2NvZGUnLCd0 eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7DQoJCSRoZWxwID0gKCRuYW1lKSA/IGZl dGNoKCdoZWxwJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOw0KCQkkdHlwZSA9 ICgkbmFtZSkgPyBmZXRjaCgndHlwZScsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAn JzsNCgkJbGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3Rf aHVuaygkaGVscCwgIkNTUyIsICIvLyIsIHRydWUpIDogYXJyYXkoJycsJGhlbHApOw0KCX0g ZWxzZWlmIChncHMoJ2ZpbGVuYW1lJykpIHsNCgkJJHBsdWdpbj1pZWRfcGx1Z2luX3JlYWRf ZmlsZSgkR0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLkRTLmdwcygnZmls ZW5hbWUnKSk7DQoJCWV4dHJhY3QoJHBsdWdpbik7DQoJfQ0KCSR6aXAgPSBncHMoJ3ppcCcp Ow0KCWlmIChncHMoJ3RyaW0nKT09MSkgew0KCQkkY29kZT1leHBsb2RlKCJcclxuIiwkY29k ZSk7DQoJCSRjb2RlPWFycmF5X21hcCgndHJpbScsJGNvZGUpOw0KCQkkY29kZT1pbXBsb2Rl KCJcclxuIiwkY29kZSk7DQoJfQ0KDQoJaGVhZGVyKCJDb250ZW50LXR5cGU6IHRleHQvcGxh aW4iKTsNCgloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVu YW1lPSInIC4gJG5hbWUuJ192Jy4kdmVyc2lvbi4gKCgkemlwKT8nX3ppcCc6JycpIC4gJy50 eHQnKTsNCg0KCSR0eXBlcyA9IGFycmF5KCAnQ2xpZW50IHNpZGUnICwgJ0FkbWluICsgQ2xp ZW50JyAsICdMaWJyYXJ5JyApOw0KCSRwbHVnaW5bJ25hbWUnXSA9ICRuYW1lOw0KCSRwbHVn aW5bJ2F1dGhvciddID0gJGF1dGhvcjsNCgkkcGx1Z2luWydhdXRob3JfdXJpJ10gPSAkYXV0 aG9yX3VyaTsNCgkkcGx1Z2luWyd2ZXJzaW9uJ10gPSAkdmVyc2lvbjsNCgkkcGx1Z2luWydk ZXNjcmlwdGlvbiddID0gJGRlc2NyaXB0aW9uOw0KCSRwbHVnaW5bJ2hlbHAnXSA9ICRoZWxw Ow0KCSRwbHVnaW5bJ2NvZGUnXSA9ICRjb2RlOw0KCSRwbHVnaW5bJ3R5cGUnXSA9ICR0eXBl Ow0KCSRwbHVnaW5bJ21kNSddID0gbWQ1KCAkcGx1Z2luWydjb2RlJ10gKTsNCg0KCUBpbmNs dWRlKHR4cGF0aC4nL2xpYi9jbGFzc1RleHRpbGUucGhwJyk7DQoJaWYgKGNsYXNzX2V4aXN0 cygnVGV4dGlsZScpKSB7DQoJCSR0ZXh0aWxlID0gbmV3IFRleHRpbGUoKTsNCgkJJHBsdWdp blsnaGVscCddID0gIiRjc3NcbiIuJHRleHRpbGUtPlRleHRpbGVUaGlzKCRwbHVnaW5bJ2hl bHAnXSk7DQoJfQ0KDQoJZWNobyAnIyBOYW1lOiAnLiRuYW1lLicgdicuJHZlcnNpb24uJyAn LigoJHppcCkgPyAiKGNvbXByZXNzZWQpIiA6ICIiKS4nDQojIFR5cGU6ICcuJHR5cGVzWyR0 eXBlXS4nIHBsdWdpbg0KIyAnLiRkZXNjcmlwdGlvbi4nDQojIEF1dGhvcjogJy4kYXV0aG9y LicNCiMgVVJMOiAnLiRhdXRob3JfdXJpLicNCg0KIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCiMgVGhp cyBpcyBhIHBsdWdpbiBmb3IgVGV4dHBhdHRlcm4gLSBodHRwOi8vdGV4dHBhdHRlcm4uY29t Lw0KIyBUbyBpbnN0YWxsOiB0ZXh0cGF0dGVybiA+IGFkbWluID4gcGx1Z2lucw0KIyBQYXN0 ZSB0aGUgZm9sbG93aW5nIHRleHQgaW50byB0aGUgXCdJbnN0YWxsIHBsdWdpblwnIGJveDoN CiMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uDQoNCicuKCgkemlwKSA/IGNodW5rX3NwbGl0KGJhc2U2NF9l bmNvZGUoZ3plbmNvZGUoc2VyaWFsaXplKCRwbHVnaW4pKSksIDcyKSA6IGNodW5rX3NwbGl0 KGJhc2U2NF9lbmNvZGUoc2VyaWFsaXplKCRwbHVnaW4pKSwgNzIpKTsNCg0KCWRpZSgpOw0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3NhdmVfYXNfcGhwX2ZpbGUo KSB7DQoJJG5hbWUgPSBncHMoJ25hbWUnKTsNCgkkZGVzY3JpcHRpb24gPSAoJG5hbWUpID8g ZmV0Y2goJ2Rlc2NyaXB0aW9uJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOw0K CSRhdXRob3IgPSAoJG5hbWUpID8gZmV0Y2goJ2F1dGhvcicsJ3R4cF9wbHVnaW4nLCduYW1l JywkbmFtZSkgOiAnJzsNCgkkYXV0aG9yX3VyaSA9ICgkbmFtZSkgPyBmZXRjaCgnYXV0aG9y X3VyaScsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsNCgkkdmVyc2lvbiA9ICgk bmFtZSkgPyBmZXRjaCgndmVyc2lvbicsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAn JzsNCgkkY29kZSA9ICgkbmFtZSkgPyBmZXRjaCgnY29kZScsJ3R4cF9wbHVnaW4nLCduYW1l JywkbmFtZSkgOiAnJzsNCgkkaGVscCA9ICgkbmFtZSkgPyBmZXRjaCgnaGVscCcsJ3R4cF9w bHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsNCgkkdHlwZSA9ICgkbmFtZSkgPyBmZXRjaCgn dHlwZScsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsNCglsaXN0KCRjc3MsJGhl bHApID0gKCRoZWxwKSA/IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwg Ii8vIiwgdHJ1ZSkgOiBhcnJheSgnJywkaGVscCk7DQoNCgloZWFkZXIoIkNvbnRlbnQtdHlw ZTogdGV4dC9waHAiKTsNCgloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1l bnQ7IGZpbGVuYW1lPSInIC4gJG5hbWUuJ192Jy4kdmVyc2lvbi4gJy5waHAnKTsNCg0KCWVj aG8gJzw/cGhwJy5uDQouJy8vIFRoaXMgaXMgYSBQTFVHSU4gVEVNUExBVEUuJy5uDQouJy8v IENvcHkgdGhpcyBmaWxlIHRvIGEgbmV3IG5hbWUgbGlrZSBhYmNfbXlwbHVnaW4ucGhwLiAg RWRpdCB0aGUgY29kZSwgdGhlbicubg0KLicvLyBydW4gdGhpcyBmaWxlIGF0IHRoZSBjb21t YW5kIGxpbmUgdG8gcHJvZHVjZSBhIHBsdWdpbiBmb3IgZGlzdHJpYnV0aW9uOicubg0KLicv LyAkIHBocCBhYmNfbXlwbHVnaW4ucGhwID4gYWJjX215cGx1Z2luLTAuMS50eHQnLm4NCi5u DQouJy8vIFBsdWdpbiBuYW1lIGlzIG9wdGlvbmFsLiAgSWYgdW5zZXQsIGl0IHdpbGwgYmUg ZXh0cmFjdGVkIGZyb20gdGhlIGN1cnJlbnQnLm4NCi4nLy8gZmlsZSBuYW1lLiBVbmNvbW1l bnQgYW5kIGVkaXQgdGhpcyBsaW5lIHRvIG92ZXJyaWRlOicubg0KLickcGx1Z2luW1wnbmFt ZVwnXSA9ICcuZG9RdW90ZSgkbmFtZSkuJzsnLm4NCi4nJHBsdWdpbltcJ3ZlcnNpb25cJ10g PSAnLmRvUXVvdGUoJHZlcnNpb24pLic7Jy5uDQouJyRwbHVnaW5bXCdhdXRob3JcJ10gPSAn LmRvUXVvdGUoJGF1dGhvcikuJzsnLm4NCi4nJHBsdWdpbltcJ2F1dGhvcl91cmlcJ10gPSAn LmRvUXVvdGUoJGF1dGhvcl91cmkpLic7Jy5uDQouJyRwbHVnaW5bXCdkZXNjcmlwdGlvblwn XSA9ICcuZG9RdW90ZSgkZGVzY3JpcHRpb24pLic7Jy5uDQoubg0KLicvLyBQbHVnaW4gdHlw ZXM6Jy5uDQouJy8vIDAgPSByZWd1bGFyIHBsdWdpbjsgbG9hZGVkIG9uIHRoZSBwdWJsaWMg d2ViIHNpZGUgb25seScubg0KLicvLyAxID0gYWRtaW4gcGx1Z2luOyBsb2FkZWQgb24gYm90 aCB0aGUgcHVibGljIGFuZCBhZG1pbiBzaWRlJy5uDQouJy8vIDIgPSBsaWJyYXJ5OyBsb2Fk ZWQgb25seSB3aGVuIGluY2x1ZGVfcGx1Z2luKCkgb3IgcmVxdWlyZV9wbHVnaW4oKSBpcyBj YWxsZWQnLm4NCi4nJHBsdWdpbltcJ3R5cGVcJ10gPSAnLmRvUXVvdGUoJHR5cGUpLic7Jy5u DQoubg0KLidAaW5jbHVkZV9vbmNlKFwnemVtX3RwbC5waHBcJyk7Jy5uDQoubg0KLidpZiAo MCkgeycubg0KLic/Picubg0KLic8IS0tIENTUyBTRUNUSU9OJy5uDQouJyMgLS0tIEJFR0lO IFBMVUdJTiBDU1MgLS0tJy5uDQouJGNzcy5uDQouJyMgLS0tIEVORCBQTFVHSU4gQ1NTIC0t LScubg0KLictLT4nLm4NCi4nPCEtLSBIRUxQIFNFQ1RJT04nLm4NCi4nIyAtLS0gQkVHSU4g UExVR0lOIEhFTFAgLS0tJy5uDQouJGhlbHAubg0KLicjIC0tLSBFTkQgUExVR0lOIEhFTFAg LS0tJy5uDQouJy0tPicubg0KLic8P3BocCcubg0KLid9Jy5uDQouJyMgLS0tIEJFR0lOIFBM VUdJTiBDT0RFIC0tLScubg0KLiRjb2RlLm4NCi4nIyAtLS0gRU5EIFBMVUdJTiBDT0RFIC0t LScubg0KLic/Pic7DQoJZGllKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9w bHVnaW5fdXBsb2FkKCkgew0KCSRzdGFydF9jc3MgPSAiLy8gLS0tIEJFR0lOIFBMVUdJTiBD U1MgLS0tIjsNCgkkZW5kX2NzcyA9ICIvLyAtLS0gRU5EIFBMVUdJTiBDU1MgLS0tIjsNCg0K CWlmICghJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddKSB7DQoJCWllZF9wbHVnaW5f bGlzdCgnWW91IGFyZSBzdXBwb3NlZCB0byBjaG9vc2UgdGhlIGZpbGUgOyknKTtyZXR1cm47 DQoJfQ0KCSRwbHVnaW4gPSBpZWRfcGx1Z2luX3JlYWRfZmlsZSgkX0ZJTEVTWyd0aGVmaWxl J11bJ3RtcF9uYW1lJ10pOw0KCSRuZXduYW1lID0gKGVtcHR5KCRwbHVnaW5bJ25hbWUnXSkp ID8gYmFzZW5hbWUoJF9GSUxFU1sndGhlZmlsZSddWyduYW1lJ10sICcucGhwJykgOiAkcGx1 Z2luWyduYW1lJ107DQoJaWYgKGdwcygnbmFtZScpIGFuZCBncHMoJ25hbWUnKSE9J3h4eF94 eHh4eHgnKSB7DQoJCSRuZXduYW1lPWdwcygnbmFtZScpOw0KCX0NCglpZiAoZW1wdHkoJHBs dWdpblsnY29kZSddKSkgew0KCQkkcGx1Z2luWydjb2RlJ10gPSBpbXBsb2RlICgiIiwgZmls ZSgkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10pKTsNCgl9DQoNCglpZiAoTUFHSUNf UVVPVEVTX0dQQykgew0KCQlmb3JlYWNoICgkcGx1Z2luIGFzICRpdGVtID0+ICR2YWx1ZSkg ew0KCQkJJHBsdWdpblskaXRlbV0gPSBhZGRzbGFzaGVzKCR2YWx1ZSk7DQoJCX0NCgl9DQoJ ZXh0cmFjdCgkcGx1Z2luKTsNCgkkbWQ1PW1kNSgkY29kZSk7DQoJJHZlcnNpb24gPSAoZW1w dHkoJHZlcnNpb24pKSA/ICIwLjEiIDogJHZlcnNpb247DQoJJGhlbHAgPSAkaGVscC4oKCRj c3MpID8gbi4kc3RhcnRfY3NzLm4uJGNzcy5uLiRlbmRfY3NzIDogJycpOw0KCSRleGlzdHMg PSBmZXRjaCgnbmFtZScsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmV3bmFtZSk7DQoJaWYgKCRl eGlzdHMpIHsNCgkJJHN0YXR1cyA9IGZldGNoKCdzdGF0dXMnLCd0eHBfcGx1Z2luJywnbmFt ZScsJG5ld25hbWUpOw0KCQkkcnMgPSBzYWZlX3VwZGF0ZSgNCgkJCSJ0eHBfcGx1Z2luIiwN CgkJCSJzdGF0dXMgICAgICA9ICckc3RhdHVzJywNCgkJCXR5cGUgICAgICAgICA9ICckdHlw ZScsDQoJCQlhdXRob3IgICAgICAgPSAnJGF1dGhvcicsDQoJCQlhdXRob3JfdXJpICAgPSAn JGF1dGhvcl91cmknLA0KCQkJdmVyc2lvbiAgICAgID0gJyR2ZXJzaW9uJywNCgkJCWRlc2Ny aXB0aW9uICA9ICckZGVzY3JpcHRpb24nLA0KCQkJaGVscCAgICAgICAgID0gJyRoZWxwJywN CgkJCWNvZGUgICAgICAgICA9ICckY29kZScsDQoJCQljb2RlX3Jlc3RvcmUgPSAnJGNvZGUn LA0KCQkJY29kZV9tZDUgICAgID0gJyRtZDUnIiwNCgkJCSJuYW1lICAgICAgICA9ICckbmV3 bmFtZSciDQoJCSk7DQoJfSBlbHNlIHsNCgkJJHJzID0gc2FmZV9pbnNlcnQoDQoJCQkidHhw X3BsdWdpbiIsDQoJCQkibmFtZSAgICAgICAgID0gJyRuZXduYW1lJywNCgkJCXN0YXR1cyAg ICAgICA9IDAsDQoJCQl0eXBlICAgICAgICAgPSAnJHR5cGUnLA0KCQkJYXV0aG9yICAgICAg ID0gJyRhdXRob3InLA0KCQkJYXV0aG9yX3VyaSAgID0gJyRhdXRob3JfdXJpJywNCgkJCXZl cnNpb24gICAgICA9ICckdmVyc2lvbicsDQoJCQlkZXNjcmlwdGlvbiAgPSAnJGRlc2NyaXB0 aW9uJywNCgkJCWhlbHAgICAgICAgICA9ICckaGVscCcsDQoJCQljb2RlICAgICAgICAgPSAn JGNvZGUnLA0KCQkJY29kZV9yZXN0b3JlID0gJyRjb2RlJywNCgkJCWNvZGVfbWQ1ICAgICA9 ICckbWQ1JyINCgkJKTsNCgl9DQoNCglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycpLCBt ZXNzZW5nZXIoJ3BsdWdpbicsJG5ld25hbWUsKCRleGlzdHMpPyd1cGRhdGVkJzondXBsb2Fk ZWQnKSk7DQoJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmV3bmFtZSk7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fcmVhZF9maWxlKCRmaWxlcGF0aCkgew0K CSRjb250ZW50ID0gZmlsZSgkZmlsZXBhdGgpOw0KCSRzb3VyY2VfbGluZXMgPSBjb3VudCgk Y29udGVudCk7DQoJJG1ldGFkYXRhID0gYXJyYXkoDQoJCQkJCQknbmFtZScgPT4gJycsDQoJ CQkJCQkndmVyc2lvbicgPT4gJycsDQoJCQkJCQknYXV0aG9yJyA9PiAnJywNCgkJCQkJCSdh dXRob3JfdXJpJyA9PiAnJywNCgkJCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJCQkn dHlwZScgPT4gJycsDQoJCQkJCSk7DQoJZm9yICgkaWR4PTA7ICRpZHggPCAkc291cmNlX2xp bmVzOyAkaWR4KyspIHsNCgkJJGNvbnRlbnRbJGlkeF0gPSBydHJpbSgkY29udGVudFskaWR4 XSk7DQoJCWlmIChzdHJwb3MoJGNvbnRlbnRbJGlkeF0sICckcGx1Z2luWycpID09PSAwKSB7 DQoJCQkvLyBGb3VuZCBhIHBsdWdpbiB2YXJpYWJsZSBzbyBleHRyYWN0IGl0DQoJCQkkcGFy dHMgPSBleHBsb2RlKCIgPSAiLCAkY29udGVudFskaWR4XSk7DQoJCQkkcGFydHNbMF0gPSBz dHJfcmVwbGFjZSgiJyIsICIiLCAkcGFydHNbMF0pOw0KCQkJcHJlZ19tYXRjaCgiL3BsdWdp blxbKC4qKVxdLyIsICRwYXJ0c1swXSwgJHZhcik7DQoJCQkkdmFsID0gdHJpbSgkcGFydHNb MV0sICInOyIpOw0KCQkJJG1ldGFkYXRhWyR2YXJbMV1dID0gJHZhbDsNCgkJfQ0KCX0NCgkk bWV0YWRhdGFbJ2hlbHAnXSA9IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRjb250ZW50LCAn SEVMUCcpOw0KCSRtZXRhZGF0YVsnY3NzJ10gID0gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmso JGNvbnRlbnQsICdDU1MnICk7DQoJJG1ldGFkYXRhWydjb2RlJ10gPSBpZWRfcGx1Z2luX2V4 dHJhY3RfaHVuaygkY29udGVudCwgJ0NPREUnKTsNCg0KCXJldHVybiAkbWV0YWRhdGE7DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCi8vIHJpcHBlZCBhbmQgbW9kZGVkIGZyb20gbmV0LWNhcnZlcidz IHZlcnNpb24gb2YgdGhlIHRoZSB6ZW1fdHBsIHRlbXBsYXRlDQpmdW5jdGlvbiBpZWRfcGx1 Z2luX2V4dHJhY3RfaHVuaygkY29udGVudCwgJGh1bmssICRjbW50PSIjIiwgJGRlbGV0ZT1m YWxzZSkgew0KCSRsaW5lcyA9IGllZF9wbHVnaW5fbWFrZV9hcnJheSgkY29udGVudCk7DQoJ JHN0YXJ0X2RlbGltID0gIiRjbW50IC0tLSBCRUdJTiBQTFVHSU4gJGh1bmsgLS0tIjsNCgkk ZW5kX2RlbGltID0gIiRjbW50IC0tLSBFTkQgUExVR0lOICRodW5rIC0tLSI7DQoJJHN0YXJ0 ID0gYXJyYXlfc2VhcmNoKCRzdGFydF9kZWxpbSwgJGxpbmVzKSArIDE7DQoJJGVuZCA9IGFy cmF5X3NlYXJjaCgkZW5kX2RlbGltLCAkbGluZXMpOw0KCSRleHRyYWN0ZWQgPSBhcnJheSgp Ow0KCWlmIChpc19udW1lcmljKCRzdGFydCkgJiYgaXNfbnVtZXJpYygkZW5kKSAmJiAkZW5k ID4gJHN0YXJ0KSB7DQoJCSRleHRyYWN0ZWQgPSBhcnJheV9zbGljZSgkbGluZXMsICRzdGFy dCwgJGVuZC0kc3RhcnQpOw0KCQlpZiAoJGRlbGV0ZSkgew0KCQkJJGNob3BwZWQgPSBhcnJh eV9zcGxpY2UoJGxpbmVzLCAkc3RhcnQtMSwgJGVuZC0kc3RhcnQrMiwgIiIpOw0KCQl9DQoJ fQ0KCSRyZW1haW5zID0gJGxpbmVzOw0KCS8vIENoZWNrIGlmIHRoZSBDU1Mgc2VjdGlvbiBo YXMgPHN0eWxlPiB0YWdzIGFyb3VuZCBpdDsgYWRkIHRoZW0gaWYgbm90DQoJaWYgKCRodW5r ID09ICJDU1MiKSB7DQoJCSRudW1yb3dzID0gY291bnQoJGV4dHJhY3RlZCk7DQoJCWlmICgk bnVtcm93cyA+IDEpIHsNCgkJCWlmIChzdHJwb3MoJGV4dHJhY3RlZFskbnVtcm93cy0xXSwg Jzwvc3R5bGU+JykgPT09IGZhbHNlKSB7DQoJCQkJJGV4dHJhY3RlZFtdID0gJzwvc3R5bGU+ JzsNCgkJCX0NCgkJCWlmIChzdHJwb3MoJGV4dHJhY3RlZFswXSwgJzxzdHlsZSAnKSA9PT0g ZmFsc2UpIHsNCgkJCQlhcnJheV91bnNoaWZ0KCRleHRyYWN0ZWQsICc8c3R5bGUgdHlwZT0i dGV4dC9jc3MiPicpOw0KCQkJfQ0KCQl9DQogICB9DQoJaWYgKCRkZWxldGUpIHsNCgkJcmV0 dXJuIGFycmF5KHRyaW0oam9pbigiXG4iLCAkZXh0cmFjdGVkKSksIHRyaW0oam9pbigiXG4i LCAkcmVtYWlucykpKTsNCgl9IGVsc2Ugew0KCQlyZXR1cm4gdHJpbShqb2luKCJcbiIsICRl eHRyYWN0ZWQpKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5f bWFrZV9hcnJheSgkYXJyKSB7DQoJaWYgKCFpc19hcnJheSgkYXJyKSkgew0KCQkkYXJyID0g ZXhwbG9kZSgiXG4iLCAkYXJyKTsNCgl9DQoJJHNvdXJjZV9saW5lcyA9IGNvdW50KCRhcnIp Ow0KCWZvciAoJGlkeD0wOyAkaWR4IDwgJHNvdXJjZV9saW5lczsgJGlkeCsrKSB7DQoJCSRh cnJbJGlkeF0gPSBydHJpbSgkYXJyWyRpZHhdKTsNCgl9DQoJcmV0dXJuICRhcnI7DQp9Ijtz OjQ6InR5cGUiO3M6MToiMSI7czozOiJtZDUiO3M6MzI6IjUyODIwNjcxNDFmNGEyNGQ5ZWJj ZGY4YTg0Yjk4ZGVhIjt9