# Name: ied_plugin_composer v0.75 # Type: Admin/Client side plugin # Write and publish plugins easily # Author: Yura Linnyk / Stef Dawson / Steve Dickinson # URL: http://stefdawson.com/ # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE5OiJpZWRfcGx1Z2luX2NvbXBvc2VyIjtzOjc6InZlcnNp b24iO3M6NDoiMC43NSI7czo4OiJyZXZpc2lvbiI7czowOiIiO3M6NjoiYXV0aG9yIjtzOjQz OiJZdXJhIExpbm55ayAvIFN0ZWYgRGF3c29uIC8gU3RldmUgRGlja2luc29uIjtzOjEwOiJh dXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRhd3Nvbi5jb20vIjtzOjExOiJkZXNjcmlw dGlvbiI7czozMjoiV3JpdGUgYW5kIHB1Ymxpc2ggcGx1Z2lucyBlYXNpbHkiO3M6NDoidHlw ZSI7czoxOiIxIjtzOjQ6ImhlbHAiO3M6MTM2MzQ6Igk8cD48ZGl2IGlkPSJpZWRfaGVscCI+ PC9wPgoKCTxoMSBpZD0idG9wIj5JbnNwaXJlZCBwbHVnaW4gY29tcG9zZXI8L2gxPgoKCTxw PlRoaXMgcGx1Z2luIGNyZWF0ZXMgYSBuZXcgcGFnZSB1bmRlciB0aGUgJiM4MjE2O0V4dGVu c2lvbnMmIzgyMTc7IHRhYiB3aGVyZSB5b3UgY2FuIGVkaXQgcGx1Z2lucyB0aGF0IGFyZSBh bHJlYWR5IGluc3RhbGxlZCBpbiBUZXh0UGF0dGVybiBhbmQgcmVnaXN0ZXIgbmV3IHBsdWdp bnMuPC9wPgoKCTxoMiBpZD0iZmVhdHVyZXMiPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxp PkNyZWF0ZSwgZWRpdCBvciB1cGxvYWQgcGx1Z2luIGNvZGUgYW5kIGhlbHAsIHRoZW4gcHVi bGlzaCB0aGUgcmVzdWx0IGluIHRoZSBzdGFuZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiBwbHVnaW4gZm9ybWF0PC9saT4KCQk8bGk+RnVsbCBzdXBwb3J0IGZvciB0aGUg PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9lbXB0eV9wbHVnaW5f dGVtcGxhdGUudHh0Ij56ZW1fdHBsLnBocCBwbHVnaW4gdGVtcGxhdGU8L2E+LiBUaGUgPGEg aHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9lbXB0eV9wbHVnaW5fdGVt cGxhdGVfY29kZV9maXJzdC50eHQiPmxhdGVzdCByZXZpc2lvbjwvYT4gYnkgPGEgaHJlZj0i aHR0cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL3BsdWdpbnMvbW9kaWZpZWQtcGx1 Z2luLWNvbXBpbGVyIj5uZXQtY2FydmVyPC9hPiBhbHNvIGluY29ycG9yYXRlcyBhICYjODIx NjtzdHlsZSYjODIxNzsgc2VjdGlvbiBmb3IgZWFzeSBzdHlsaW5nIG9mIHlvdXIgaGVscCB0 ZXh0LiBUaGUgUGx1Z2luIENvbXBvc2VyIGxvb2tzIGZvciA8c3BhbiBjbGFzcz0iY2FwcyI+ Q1NTPC9zcGFuPiBzZWN0aW9ucyBpbiB0aGUgdGVtcGxhdGUgYW5kIHdpbGwgdXNlIHRoZW0g YWNjb3JkaW5nbHkuIEl0IHdpbGwgYWxzbyByZWFkIDxzcGFuIGNsYXNzPSJjYXBzIj5TVk48 L3NwYW4+ICRMYXN0Q2hhbmdlZFJldmlzaW9uIGVudHJpZXMgKHRoYW5rcyBuZXQtY2FydmVy KTwvbGk+CgkJPGxpPkV4cG9ydCBhIHBsdWdpbiBhcyBlaXRoZXIgYSBzdGFuZGFyZCBCQVNF NjQtZW5jb2RlZCBwbHVnaW4gKG5vdyBpbiBzdGFuZGFyZCA3Mi1jaGFyIGNodW5rIG1vZGUp IG9yIGFzIGEgZ3ppcHBlZCB2ZXJzaW9uIG9mIHRoZSBhYm92ZSAodXNlZnVsIGZvciBsYXJn ZSBwbHVnaW5zKSBvciBhcyBhIHBocCBmaWxlIGluIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSBm b3JtYXQuIFRoaXMgbWVhbnMgeW91IGNhbiBzd2l0Y2ggYmV0d2VlbiBlZGl0aW5nIGluIHRo ZSBwbHVnaW4gY29tcG9zZXIgb3IgeW91ciBmYXZvdXJpdGUgZWRpdGluZyBwcm9ncmFtLCB0 ZXN0IHRoZSBmaWxlIGluIHRoZSBwbHVnaW5fY2FjaGVfZGlyLCB0aGVuIGltcG9ydCBpdCBi YWNrIGludG8gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gd2l0aCB0aGUgaGVscCBv ZiB0aGUgQ29tcG9zZXIgYW5kIHB1Ymxpc2ggeW91ciBwbHVnaW4gZm9yIGV2ZXJ5b25lLiBM b29rIGF0IHRoZSBib3R0b20gb2YgdGhlIFBsdWdpbiBDb21wb3NlciYjODIxNztzIDxhIGhy ZWY9IiNlZGl0cGFnZSI+RWRpdCBwYWdlPC9hPiBmb3IgdGhlIG9wdGlvbnM7IGp1c3QgcmVt ZW1iZXIgdG8gc2F2ZSB5b3VyIGNoYW5nZXMgYmVmb3JlIGV4cG9ydGluZyBvciBjb3B5aW5n L3Bhc3RpbmcgdGhlIGNvZGUhPC9saT4KCQk8bGk+V2hlbiBleHBvcnRpbmcsIGZpbGVzIGNh biBiZSBzYXZlZCB3aXRoIGVpdGhlciB0aGUgY29kZSBibG9jayBmaXJzdCBvciB0aGUgaGVs cCBibG9jayBmaXJzdC4gVXNlIHRoZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5TZXR1cCBidXR0 b248L2E+IHRvIGNvbmZpZ3VyZTwvbGk+CgkJPGxpPlN1cHBvcnQgZm9yIENsaWVudCwgQWRt aW4sIGFuZCBMaWJyYXJ5IHR5cGUgcGx1Z2luczwvbGk+CgkJPGxpPkhlbHAgdGV4dCBjYW4g YmUgd3JpdHRlbiBpbiBUZXh0aWxlIG9yIChYKUhUTUwuIFN0eWxlcyBjYW4gYmUgYWRkZWQg dG8gdGhlIGhlbHAgc2VjdGlvbjwvbGk+CgkJPGxpPlRha2UgYWR2YW50YWdlIG9mIHRoZSA8 YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9 MTMwODkiPlRpbnlNQ0UgPHNwYW4gY2xhc3M9ImNhcHMiPldZU0lXWUc8L3NwYW4+IGVkaXRv cjwvYT4gZm9yIHRoZSBoZWxwIHNlY3Rpb24gb3IgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZv cmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9MTY0MDA4Ij5FZGl0IEFy ZWE8L2E+IGZvciBjb2RlIG1hcmt1cCAodGhhbmtzIHZhcmlhYXMpLiBTZWUgdGhlIDxhIGhy ZWY9IiNzZXR1cHBhZ2UiPnNldHVwPC9hPiBhbmQgPGEgaHJlZj0iI25vdGVzIj5ub3Rlczwv YT4gc2VjdGlvbnMgZm9yIG1vcmUgb24gdGhlc2UgZWRpdG9yczwvbGk+CgkJPGxpPkJ1aWx0 LWluIFRleHRpbGUgaGVscCB2aWV3ZXIgKHRoYW5rcyB0byBuZXQtY2FydmVyJiM4MjE3O3Mg PGEgaHJlZj0iaHR0cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL3BsdWdpbnMvcGx1 Z2luLWhlbHAtdmlld2VyIj5QbHVnaW4gSGVscCBWaWV3ZXI8L2E+KSB0byBhbGxvdyB5b3Ug dG8gcHJldmlldyB5b3VyIEhlbHAgdGV4dCBkdXJpbmcgZGV2ZWxvcG1lbnQgKHRoZSB0d28g dmlld2VycyB3aWxsIGhhcHBpbHkgY28tZXhpc3QgaWYgeW91IHdpc2gpPC9saT4KCQk8bGk+ UmVzaXphYmxlIHRleHRhcmVhPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJhdXRob3JzIj5BdXRo b3JzPC9oMj4KCgk8cD5PcmlnaW5hbCBwbHVnaW46IDxhIGhyZWY9Imh0dHA6Ly9pbnNwaXJl ZC5raWV2LnVhL2ZlZWRiYWNrLyI+WXVyYSBMaW5ueWs8L2E+PGJyIC8+Ck1vZGlmaWNhdGlv bnMgKHYwLjUrKTogPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbW1lbnRGb3Jt Ij5TdGVmIERhd3NvbjwvYT48YnIgLz4KQSB0b3VjaCBvZiBjbGFzczogPGEgaHJlZj0iaHR0 cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL2NvbnRhY3QiPlN0ZXZlIERpY2tpbnNv bjwvYT48L3A+CgoJPGgyIGlkPSJpbnN0YWxsIj5JbnN0YWxsYXRpb24gLyBVbmluc3RhbGxh dGlvbjwvaDI+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiAodjAuNSBhbmQgYWJvdmUpIGZy b20gPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zdGVmZGF3c29uLmNvbTwv YT4gKHByZXZpb3VzIHZlcnNpb25zIGFyZSBzdGlsbCBhdmFpbGFibGUgb24gdGhlIDxhIGhy ZWY9Imh0dHA6Ly9pbnNwaXJlZC5raWV2LnVhL3R4cC9pZWRfcGx1Z2luX2NvbXBvc2VyIj5J bnNwaXJlZCBob21lcGFnZTwvYT4pLCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UsIGluc3Rh bGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLjwvcD4KCgk8cD5WaXNpdCB0aGUgRXh0ZW5zaW9u cyAtJmd0OyBQbHVnaW4gQ29tcG9zZXIgdGFiIGFuZCBjbGljayB0aGUgU2V0dXAgYnV0dG9u IGluIHRoZSB0b3AtcmlnaHQgb2YgdGhlIHNjcmVlbi4gRnJvbSBoZXJlIHlvdSBjYW4gSW5z dGFsbCwgRGVsZXRlIGFuZCBTYXZlIHRoZSBwbHVnaW4gcHJlZmVyZW5jZXMuIFNlZSB0aGUg PGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0dXAgc2VjdGlvbjwvYT4gZm9yIGRldGFpbHMuPC9w PgoKCTxwPlRvIHJlbW92ZSB0aGUgUGx1Z2luIENvbXBvc2VyIChub29vbyEpIHZpc2l0IHRo ZSBTZXR1cCBwYWdlIGFnYWluIGZyb20gdGhlIFBsdWdpbiBDb21wb3NlciB0YWIsIGhpdCBE ZWxldGUgdG8gcmVtb3ZlIHRoZSBwcmVmZXJlbmNlcywgdGhlbiBzaW1wbHkgZGVsZXRlIHRo ZSBwbHVnaW4gYXMgbm9ybWFsIGZyb20gdGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFnZS48 L3A+CgoJPGgyIGlkPSJ1c2FnZSI+VXNhZ2U8L2gyPgoKCTxoMyBpZD0ibGlzdHBhZ2UiPkxp c3QgcGFnZTwvaDM+CgoJPHA+QWxsIGluc3RhbGxlZCBwbHVnaW5zIGFyZSBsaXN0ZWQgb24g dGhlIFBsdWdpbiBDb21wb3NlciBwYWdlLiBUaGV5IGNhbiBiZSBlbmFibGVkL2Rpc2FibGVk LCBkZWxldGVkLCBwdWJsaXNoZWQgb3IgZWRpdGVkIGZyb20gaGVyZS4gVGhlIGhlbHAgY2Fu IGFsc28gYmUgdmlld2VkIGZyb20gdGhpcyBwYWdlLCBvciB3aGlsZSBlZGl0aW5nIGEgcGx1 Z2luIGJ5IHVzaW5nIHRoZSBsaW5rIG5leHQgdG8gdGhlIHRvcG1vc3QgU2F2ZSBidXR0b24g b24gdGhlIDxhIGhyZWY9IiNlZGl0cGFnZSI+ZWRpdCBwYWdlPC9hPi48L3A+CgoJPHA+SWYg eW91IGFyZSB1c2luZyB0aGUgcGx1Z2luX2NhY2hlX2RpciAoQWRtaW4gLSZndDsgQWR2YW5j ZWQgUHJlZnMpLCBhbnkgcGx1Z2lucyBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdz b24uY29tL2Rvd25sb2Fkcy9leGFtcGxlX3BsdWdpbl90ZW1wbGF0ZS50eHQiPnN0YW5kYXJk IHRlbXBsYXRlIGZvcm1hdDwvYT4gdXBsb2FkZWQgdG8gdGhpcyBkaXJlY3Rvcnkgd2lsbCBi ZSBhdmFpbGFibGUgaW1tZWRpYXRlbHkgZm9yIGVkaXRpbmcgYW5kIHRlc3RpbmcuIEluIGFk ZGl0aW9uLCB0aGVzZSBwbHVnaW5zIGJlbmVmaXQgZnJvbSBiZWluZyAmIzgyMjA7YWx3YXlz IG9uJiM4MjIxOzsgbm8gbmVlZCB0byBpbnN0YWxsIHRoZW0uPC9wPgoKCTxwPlRoZXJlIGFy ZSB0d28gd2F5cyBvZiBjcmVhdGluZyBwbHVnaW5zIGZyb20gdGhlIFBsdWdpbiBDb21wb3Nl ciBsaXN0IHBhZ2UuIFRoZSBmaXJzdCBpcyB0byBjcmVhdGUgYSBibGFuaywgZW1wdHkgcGx1 Z2luLiBVc2UgdGhlIHRleHQgYm94IGF0IHRoZSB0b3AgZm9yIHRoaXMuIFRoZSBzZWNvbmQg aXMgdG8gdXBsb2FkIG9uZSB1c2luZyB0aGUgQnJvd3NlL3VwbG9hZCBib3ggYXQgdGhlIGJv dHRvbS4gWW91IGNhbiB1cGxvYWQgY29kZSBpbiBlaXRoZXIgc3RhbmRhcmQgcGx1Z2luIHRl bXBsYXRlIGZvcm1hdCAoZWl0aGVyIGNvZGUtZmlyc3Qgb3IgaGVscC1maXJzdCwgY29tcGxl dGUgd2l0aCA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBhcmVhcykgb3Igc2ltcGx5 IHVwbG9hZCBhIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUgY29udGFpbmlu ZyBjb2RlIG9ubHkuIDxlbT5Ob3RlIHRoaXMgaXMgdGhlIG9ubHkgcGxhY2UgeW91IGNhbiB1 cGxvYWQgcmF3IDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGNvbXBsZXRlIHdpdGgg dGhlIDxjb2RlPiZsdDs/cGhwID8mZ3Q7PC9jb2RlPiBtYXJrZXJzLiBFdmVyeXdoZXJlIGVs c2UgeW91IHNob3VsZCB1c2UgYSBmdWxsIHRlbXBsYXRlLjwvZW0+PC9wPgoKCTxoMyBpZD0i ZWRpdHBhZ2UiPkVkaXQgcGFnZTwvaDM+CgoJPHA+T24gdGhlIEVkaXQgcGFnZSwgY29kZSBn b2VzIGluIHRoZSAmIzgyMTY7UGx1Z2luJiM4MjE3OyBib3gsIGhlbHAgZ29lcyBpbiB0aGUg JiM4MjE2O1BsdWdpbiBIZWxwJiM4MjE3OyBib3gsIHN0eWxpbmcgZ29lcyBpbiB0aGUgJiM4 MjE2O1N0eWxlJiM4MjE3OyBib3ghIFN0eWxlcyBhcmUgPGVtPm5vdDwvZW0+IHBhc3NlZCB0 aHJvdWdoIHRoZSBUZXh0aWxlIG1hbmdsZSBhbmQgaWYgeW91IGZvcmdldCAob3IgZG9uJiM4 MjE3O3QgYWRkKSB0aGUgPGNvZGU+Jmx0O3N0eWxlJmd0OzwvY29kZT4gdGFncywgdGhlIENv bXBvc2VyIHdpbGwgYWRkIHRoZW0gZm9yIHlvdS4gVGhlIHBsdWdpbiBjb2RlIGJveCBpcyB2 ZXJ0aWNhbGx5IHJlc2l6YWJsZTsgZ3JhYiB0aGUgbWFya2VyIGJlbmVhdGggdGhlIGJveCBh bmQgZHJhZyB0byBzZXQuIFRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIHJldGFpbmVkIGFzIGEg Y29va2llIChleHBpcmVzIDMwIGRheXMgYWZ0ZXIgbGFzdCByZXNpemUpIHNvIHRoZSBib3gg d2lsbCBhbHdheXMgcmVzaXplIHdoZW4gdGhlIGVkaXQgcGFnZSBpcyBkaXNwbGF5ZWQuIE5v dGUgdGhhdCB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgd2hlbiB1c2luZyBFZGl0IEFyZWEg KHNlZSB0aGUgPGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0dXAgcGFnZTwvYT4pLjwvcD4KCgk8 cD5GaWxsIGluIHRoZSBvdGhlciBmaWVsZHMgd2l0aCByZWxldmFudCBkZXRhaWxzIGFib3V0 IHlvdXJzZWxmIGFuZCB5b3VyIHBsdWdpbiBhbmQgeW91JiM4MjE3O3JlIGdvb2QgdG8gZ28u IENob29zZSBmcm9tIGVpdGhlciBDbGllbnQtc2lkZSBvbmx5LCBBZG1pbi1zaWRlICh3aGlj aCBpbmNsdWRlcyBjbGllbnQgc2lkZSBieSBkZWZhdWx0KSBvciBMaWJyYXJ5IHBsdWdpbiB0 eXBlcy4gQSB3YXJuaW5nIGlzIGlzc3VlZCBpZiB5b3Ugc2F2ZSBhIENsaWVudCBwbHVnaW4g dGhhdCB1c2VzIEFkbWluLXNpZGUgY29kZSAodGhhbmtzIG5ldC1jYXJ2ZXIpLjwvcD4KCgk8 cD5JZiB5b3UgYXJlIGVkaXRpbmcgYSBwbHVnaW4gaW4gdGhlIGNhY2hlIGRpcmVjdG9yeSwg YW4gYWRkaXRpb25hbCBjaGVja2JveCBhcHBlYXJzIGFsb25nc2lkZSB0aGUgVmVyc2lvbiBm aWVsZC4gU2VsZWN0IHRoYXQgYm94IGlmIHlvdSB3aXNoIHRvIHVwZGF0ZSB0aGUgZmlsZW5h bWUmIzgyMTc7cyB2ZXJzaW9uIHRvIHJlZmxlY3QgdGhlIG9uZSBpbiB0aGUgVmVyc2lvbiBi b3guIFNhZGx5LCBrZWVwaW5nIHByZXZpb3VzIGNvcGllcyBpcyBub3QgcG9zc2libGUgYmVj YXVzZSB0aGUgcGx1Z2luIG5hbWVzIGNsYXNoIHNvIGJlIHN1cmUgeW91IGhhdmUgYmFja2Vk IHVwIHRoZSBvbGQgZmlsZSBpZiB5b3Ugd2lzaCB0byBrZWVwIGl0IGZvciByb2xsYmFjayBw dXJwb3Nlcy48L3A+CgoJPHA+SGl0IFNhdmUgdG8gc3RvcmUgeW91ciBwbHVnaW4uIE9uY2Ug eW91JiM4MjE3O3JlIGhhcHB5IHdpdGggaXQsIHNjcm9sbCB0byB0aGUgYm90dG9tIG9mIHRo ZSBlZGl0IHBhZ2UgYW5kIGNob29zZSBob3cgdG8gZXhwb3J0IGl0LiBUaGUgZmlyc3QgbGlu ayBpcyBmb3Igc3RhbmRhcmQgcGx1Z2lucyB3aGljaCBhcmUgZGlzdHJpYnV0ZWQgdG8gYWxs IHVzZXJzOyB0aGUgc2Vjb25kIGlzIGZvciBjb21wcmVzc2VkIHBsdWdpbnMgJiM4MjEyOyB1 c2UgdGhpcyBpZiB5b3VyIHBsdWdpbnMgYXJlIGxhcmdlLCBvciBzaW1wbHkgYXMgYW4gYWx0 ZXJuYXRpdmUgZm9ybWF0LiBCb3RoIHRoZXNlIG9wdGlvbnMgY29udmVydCB0aGUgaGVscCB0 byA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4uIFRoZSB0aGlyZCBsaW5rLCBob3dl dmVyLCByZXRhaW5zIHRoZSBoZWxwIGZvcm1hdHRpbmcgYXMgaXQgaXM7IHVzZWZ1bCB0byBl eHBvcnQgdGhlIHBsdWdpbiBiYWNrIG91dCBpbiB0aGUgc3RhbmRhcmQgdGVtcGxhdGUgZm9y bWF0IHRvIHBlcmhhcHMgZ2l2ZSB0byBhbm90aGVyIGRldmVsb3BlciBkaXJlY3RseSwgb3Ig dG8ga2VlcCB0aGUgVGV4dGlsZSBtYXJrdXAgZm9yIGZ1dHVyZSB1cGRhdGVzLjwvcD4KCgk8 cD5bIE5vdGUgdGhhdCB3aGVuIGV4cG9ydGluZyBhcyBhIHN0YW5kYXJkIHBsdWdpbiwgdGhl IFRleHRpbGUgcHJvY2Vzc29yIGF0dGVtcHRzIHRvIGRlY2lkZSBpZiB5b3UgaGF2ZSB1c2Vk IFRleHRpbGUgb3Igbm90IChpdCBzaW1wbHkgbG9va3MgZm9yIGEgdGV4dGlsZWQgJiM4MjE2 O2gxJiM4MjE3OykuIFJ1bm5pbmcgcHVyZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bh bj4gdGhyb3VnaCB0ZXh0aWxlIG1heSBvY2Nhc2lvbmFsbHkgY2F1c2UgZW5jb2RpbmcgaXNz dWVzIGRlcGVuZGluZyBvbiB0aGUgb3JpZ2luYWwgY2hhcmFjdGVyIHNldCB1c2VkICYjODIx MjsgaGF2ZW4mIzgyMTc7dCB0cmFja2VkIGRvd24gdGhlIGNpcmN1bXN0YW5jZXMgdW5kZXIg d2hpY2ggaXQgaGFwcGVucyB5ZXQgXTwvcD4KCgk8cD5Zb3UgY2FuIGFsc28gZXhwb3J0IHBs dWdpbnMgZnJvbSB0aGUgbWFpbiBQbHVnaW4gQ29tcG9zZXIgbGlzdCBwYWdlLiBUaGUgUHVi bGlzaCBjb2x1bW4gaGFzIHR3byBlbnRyaWVzIGluIGl0OiAmIzgyMTY7cHVibGlzaCYjODIx NzsgdG8gcHJvZHVjZSBhIHN0YW5kYXJkIHBsdWdpbjsgb3IgJiM4MjE2O3ppcCYjODIxNzsg dG8gZ2VuZXJhdGUgYSBjb21wcmVzc2VkIHZlcnNpb24uPC9wPgoKCTxoMyBpZD0ic2V0dXBw YWdlIj5TZXR1cCBwYWdlPC9oMz4KCgk8cD5DbGlja2luZyBTZXR1cCBmcm9tIHRoZSBtYWlu IGxpc3Qgc2NyZWVuIGFsbG93cyBhY2Nlc3MgdG8gdGhlIHBsdWdpbiBwcmVmZXJlbmNlcy48 L3A+CgoJPHA+WW91IGNhbiBJbnN0YWxsIHRoZW0gJiM4MjEyOyB3aGljaCByZXRhaW5zIGFu eSBwcmV2aW91cyBzZXR0aW5ncyBhbmQgYWRkcyBuZXcgb25lcyB3aGVuIHVwZGF0aW5nIHRo ZSBwbHVnaW4gJiM4MjEyOyBvciBEZWxldGUgdGhlbS4gVGhlIHBsdWdpbiBjaGVja3MgaWYg YWxsIHJlcXVpcmVkIHByZWZlcmVuY2VzIGFyZSBhdmFpbGFibGUgYW5kIG9mZmVycyB5b3Ug dGhlIGNob2ljZSBvZiBkZWxldGluZy9yZWluc3RhbGxpbmcgaW4gY2FzZSB0aGUgcHJlZnMg YmVjb21lIGNvcnJ1cHRlZCBvciBuZWVkIHVwZGF0aW5nLjwvcD4KCgk8cD5PbmNlIHRoZSBw cmVmcyBhcmUgaW5zdGFsbGVkIHlvdSB3aWxsIHNlZSB0aGUgYXZhaWxhYmxlIG9wdGlvbnMu IFRoZSB3aWR0aCBvZiB0aGUgdGV4dGFyZWFzIG9uIHRoZSA8YSBocmVmPSIjZWRpdHBhZ2Ui PmVkaXQgcGFnZTwvYT4gYXJlIGN1c3RvbWlzYWJsZSB0byBhY2NvbW1vZGF0ZSB5b3VyIHNj cmVlbiByZXNvbHV0aW9uLiBFbnRlciBhIG51bWJlciB0byBzZXQgdGhlIHdpZHRoIGluIGNo YXJhY3RlcnMgb2YgdGhlIGVkaXQgYm94ZXMuPC9wPgoKCTxwPllvdSBtYXkgY2hvb3NlIHRv IGVkaXQgdGhlIGNvZGUgdXNpbmcgYSAzcmQgcGFydHkgY29kZSBzeW50YXggaGlnaGxpZ2h0 ZXIuIEN1cnJlbnQgc3VwcG9ydCBpcyBmb3IgRWRpdCBBcmVhIGFuZCAoc29ydCBvZikgQ29k ZVByZXNzICYjODIxMjsgc2VlIHRoZSA8YSBocmVmPSIjbm90ZXMiPm5vdGVzPC9hPi48L3A+ CgoJPHA+SWYgeW91IHdpc2ggdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgRWRpdCBBcmVhLCBncmFi IGl0IGZyb20gc291cmNlZm9yZ2UsIGluc3RhbGwgaXQsIHNlbGVjdCAmIzgyMTY7RWRpdCBB cmVhJiM4MjE3OyBmcm9tIHRoZSBkcm9wZG93biBvbiB0aGUgUGx1Z2luIENvbXBvc2VyJiM4 MjE3O3MgU2V0dXAgcGFnZSBhbmQgZ2l2ZSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwv c3Bhbj4gcGF0aCB0byB0aGUgaW5zdGFsbGF0aW9uIG9uIHlvdXIgc2VydmVyOyB0aGlzIGlz IG5vcm1hbGx5IGV2ZXJ5dGhpbmcgdXAgdG8gYW5kIGluY2x1ZGluZyAvZWRpdF9hcmVhLiBO byB0cmFpbGluZyBzbGFzaCBpcyByZXF1aXJlZC4gU2ltaWxhcmx5IGZvciBDb2RlUHJlc3Mu PC9wPgoKCTxwPkZvciB0aGUgaGVscCBzeXN0ZW0geW91IGNhbiB1c2UgVGV4dGlsZSB0YWdz IChyZWNvbW1lbmRlZCkgb3IgY2hvb3NlIFRpbnlNQ0UuIDxlbT5Ob3RlIHRoYXQgVGlueU1D RSBpcyBub3QgZnVsbHkgaW50ZWdyYXRlZCB5ZXQgc28gPHNwYW4gY2xhc3M9ImNhcHMiPllN TVY8L3NwYW4+PC9lbT4uPC9wPgoKCTxoMyBpZD0ibm90ZXMiPk5vdGVzPC9oMz4KCgk8cD5N b3JlIGVkaXRvcnMgY2FuIGJlIGludGVncmF0ZWQgaW50byB0aGUgQ29tcG9zZXIgZmFpcmx5 IGVhc2lseS4gSWYgeW91IGZpbmQgYSBnb29kIG9uZSwgZ2V0IGluIGNvbnRhY3QuIEJlIHdh cm5lZCB0aGF0IHRoZSBlZGl0b3JzIGRvIHRlbmQgdG8gc2xvdyB0aGUgcGx1Z2luIGRvd24s IGVzcGVjaWFsbHkgYXMgY29kZSBzaXplIGluY3JlYXNlcy48L3A+CgoJPHA+VGVudGF0aXZl IHN1cHBvcnQgZm9yIENvZGVQcmVzcyBpcyBhbHJlYWR5IGluIHRoZXJlIGJ1dCBJIGZvdW5k IGl0IGluZXhwbGljYWJseSBibGFua2VkIG91dCB0aGUgcGx1Z2luIGNvZGUgd2hlbiBpdCB3 YXMgc2F2ZWQgc28gSSYjODIxNzt2ZSBjb21tZW50ZWQgb3V0IHN1cHBvcnQgZm9yIG5vdy4g SWYgYW55b25lIGNhbiBzaGVkIGFueSBsaWdodCBvbiB3aHkgaXQgZG9lcyB0aGlzLCBwbGVh c2Ugc3BlYWsgdXAhIFVuY29tbWVudCB0aGUgY29kZSBvbiBsaW5lIDg2MCBhbmQgY29tbWVu dCBvdXQgbGluZSA4NjEgdG8gZW5hYmxlIHN1cHBvcnQsIHRoZW4gdmlzaXQgdGhlIFNldHVw IHBhZ2UgYW5kIHNlbGVjdCBDb2RlUHJlc3MgZnJvbSB0aGUgbGlzdC4gRG9uJiM4MjE3O3Qg ZXhwZXJpbWVudCB3aXRoIHRoaXMgc2V0dGluZyBvbiBhbiBpbXBvcnRhbnQgcGx1Z2luIDot KTwvcD4KCgk8aDMgaWQ9ImNoYW5nZWxvZyI+Q2hhbmdlbG9nPC9oMz4KCgk8dWw+CgkJPGxp PjI1IEZlYiAwNiB8IDAuMSB8IEluaXRpYWwgcmVsZWFzZTwvbGk+CgkJPGxpPjI1IEZlYiAw NiB8IDAuMiB8IEFkZGVkICYjODIxNjtzYXZlIGFzJiM4MjE3OyBvcHRpb248L2xpPgoJCTxs aT4xNyBNYXIgMDYgfCAwLjMgfCBBZGRlZCAmIzgyMTY7c2F2ZSBhcyBwaHAmIzgyMTc7PC9s aT4KCQk8bGk+MTAgQXByIDA2IHwgMC40IHwgQWRkZWQgc3VwcG9ydCBmb3IgcGx1Z2luX2Nh Y2hlX2RpcjwvbGk+CgkJPGxpPjA0IEphbiAwOCB8IDAuNSB8IEZ1bGwgc3VwcG9ydCBmb3Ig c3RkIHRlbXBsYXRlOyBjb21wcmVzc2VkIHBsdWdpbnM7IExpYnJhcnkgcGx1Z2luczsgVGV4 dGlsZSBoZWxwIGFuZCBzdHlsaW5nOyBpbnRlZ3JhdGlvbiB3aXRoIG5ldC1jYXJ2ZXImIzgy MTc7cyBQbHVnaW4gSGVscCBWaWV3ZXI8L2xpPgoJCTxsaT4wNyBKYW4gMDggfCAwLjYgfCBC dWlsdC1pbiBoZWxwIHZpZXdlciAodGhhbmtzIG5ldC1jYXJ2ZXIpOyBzdXBwb3J0IGZvciBF ZGl0IEFyZWEgJmFtcDsgQ29kZVByZXNzKGlzaCkgKHRoYW5rcyB2YXJpYWFzKTsgSGVscCBi bG9jay9Db2RlIGJsb2NrIHBvc2l0aW9uIHN3aXRjaGFibGUgb24gZXhwb3J0OyBhZGRlZCBT ZXR1cCBwcmVmcyBwYWdlOyBsaW5lIGJyZWFrL3N0eWxlIGJ1Z2ZpeGVzPC9saT4KCQk8bGk+ MDggSmFuIDA4IHwgMC43IHwgUmUtaW1wb3J0aW5nIHBsdWdpbnMgbm93IHJldGFpbnMgc3R5 bGUgYmxvY2s7IGFkZGVkICYjODIxNjthZG1pbiBzaWRlIHBsdWdpbiB3aXRoIGNsaWVudC1z aWRlIHR5cGUmIzgyMTc7IHdhcm5pbmc7IGNoYW5nZWQgYnV0dG9uIHN0eWxpbmcgYW5kIHBv c2l0aW9ucyAoYWxsIHRoYW5rcyBuZXQtY2FydmVyKTsgZ1R4dCgpIHByZWYgbGFiZWxzIGFu ZCAmIzgyMTY7aW50ZWxsaWdlbnQmIzgyMTc7IHByZWZzIChnbyBqUXVlcnkgZ28hKTsgY2Fj aGVkIHBsdWdpbnMgbm93IGFsc28gaGF2ZSBkaXJlY3QgZXhwb3J0IGZyb20gRWRpdCBwYWdl OyAmIzgyMTY7ZG9uJiM4MjE3O3QgdGV4dGlsZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwv c3Bhbj4mIzgyMTc7IGNoZWNrOyBtaW5vciBidWdmaXhlczwvbGk+CgkJPGxpPjA5IEphbiAw OCB8IDAuNzEgfCBUZXh0YXJlYSB3aWR0aCBjYW4gbm93IGJlIGNvbnRyb2xsZWQgZnJvbSBw cmVmcywgYW5kIGhlaWdodCBmcm9tIGEgZHJhZyBiYXI7IGRlZmF1bHQgd2lkdGggaW5jcmVh c2VkIHRvIDExMCBjaGFyczsgcHVibGlzaCBwbHVnaW5zIGZyb20gdGhlIGxpc3QgcGFnZTsg SW5zdGFsbCBidXR0b24gcmVtb3ZlZCB3aGVuIHByZWZzIGFsbCBjb3JyZWN0bHkgaW5zdGFs bGVkIChhbGwgdGhhbmtzIHZhcmlhYXMgLyBpYmxhc3RvZmYpPC9saT4KCQk8bGk+MTAgSmFu IDA4IHwgMC43MiB8IEZpeGVkIGJ1ZyBpZiBwbHVnaW4gaGFzIG5vIGhlbHA7IHN0eWxlIHNl Y3Rpb24gbm8gbG9uZ2VyIHN0b3JlZC9leHBvcnRlZCBpZiBpdCYjODIxNztzIG5vdCBpbiB1 c2UgKHRoYW5rcyB0aGVfZ2hvc3QgLyBpYmxhc3RvZmYpPC9saT4KCQk8bGk+MTEgSmFuIDA4 IHwgMC43MyB8IEFkZGVkIHN1cHBvcnQgZm9yIDxlbT5yZWFkaW5nPC9lbT4gYW4gb3B0aW9u YWwgcmV2aXNpb24gZnJvbSB0aGUgdGVtcGxhdGUgcGFyc2VyIGFuZCBhcHBlbmRpbmcgaXQg dG8gdGhlIHZlcnNpb24gKHRoYW5rcyBuZXQtY2FydmVyKTsgbW9yZSBnVHh0KCkgc3RyaW5n cyBjb252ZXJ0ZWQ8L2xpPgoJCTxsaT4yOCBNYXIgMDggfCAwLjc0IHwgRml4ZWQgZW1wdHkg cGx1Z2luIGNvZGUgaWYgU3R5bGUgYmxvY2sgbGVmdCBibGFuayA7IGZpeGVkIHN0cmlwL3Ns YXNoL2VuY29kaW5nIGVycm9ycyAodGhhbmtzIHRoZV9naG9zdC9ydXVkKSA7IGZpeGVkIGNy bGYgbmV3bGluZXMgaW4gY29kZSBibG9jayAodGhhbmtzIGhha2pvb24vcnV1ZCk8L2xpPgoJ CTxsaT4yOCBNYXkgMDggfCAwLjc1IHwgQWRkZWQgJiM4MjE2O21vZGlmaWVkJiM4MjE3OyB0 byB0aGUgVmVyc2lvbiBjb2x1bW4gKHRoYW5rcyB1bGkpIDsgYWRkZWQgYWJpbGl0eSB0byBy ZW5hbWUgZmlsZXMgaW4gdGhlIHBsdWdpbiBjYWNoZSBkaXIgd2hlbiB0aGUgdmVyc2lvbiBj aGFuZ2VzPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJ3cml0aW5nIj5Xcml0aW5nIGEgcGx1Z2lu PC9oMj4KCgk8cD5Zb3Ugc2hvdWxkIGJlIGF3YXJlIG9mIHRoZSA8YSBocmVmPSJodHRwOi8v Zm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9OTg4MSI+UGx1Z2luIEF1 dGhvciBSZXNvdXJjZXM8L2E+IHRvcGljIG9uIHRoZSBUZXh0cGF0dGVybiBTdXBwb3J0IEZv cnVtLCBhbmQgeW91IG1pZ2h0IGFsc28gd2FudCB0byBoYXZlIGEgbG9vayBhdCB0aGUgPGEg aHJlZj0iaHR0cDovL2luc3BpcmVkLmtpZXYudWEvdHhwLXBsdWdpbi1jaGVhdHNoZWV0Ij5U ZXh0UGF0dGVybiBwbHVnaW4gY2hlYXQgc2hlZXQ8L2E+LjwvcD4KCgk8cD5IYXBweSBwbHVn aW4gYXV0aG9yaW5nIDotKTwvcD4KCgk8cD48L2Rpdj48L3A+CjwhLS0gLS0tIEJFR0lOIFBM VUdJTiBDU1MgLS0tIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojaWVkX2hlbHAgeyBs aW5lLWhlaWdodDoxLjUgO30KI2llZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xkOyBm b250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBiYWNr Z3JvdW5kLWNvbG9yOiAjRkZGRkNDO30KI2llZF9oZWxwIGNvZGUuc2VkX2NvZGVfdGFnIHsg Zm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBiYWNrZ3JvdW5k LWNvbG9yOiAjZjBlNjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7 IHBhZGRpbmc6MTBweDsgfQojaWVkX2hlbHAgYTpsaW5rLCAjaWVkX2hlbHAgYTp2aXNpdGVk IHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTog MXB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNpZWRfaGVscCBhOmhvdmVy LCAjaWVkX2hlbHAgYTphY3RpdmUgeyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiBu b25lOyBib3JkZXItYm90dG9tOiAycHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4 O30KI2llZF9oZWxwIGgxIHsgY29sb3I6ICMzNjk7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fu cy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI2llZF9oZWxwIGgy IHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBj b2xvcjogIzM2OTsgZm9udDogMTdweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNpZWRfaGVs cCBoMyB7IGNvbG9yOiAjMTA4MDMwOyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2Vy aWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTVweCAwIDA7dGV4dC10cmFuc2Zv cm06IHVwcGVyY2FzZTt9Cjwvc3R5bGU+CjwhLS0gLS0tIEVORCBQTFVHSU4gQ1NTIC0tLSAt LT4KIjtzOjM6ImNzcyI7czo5MjU6IjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNpZWRfaGVs cCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojaWVkX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJv bGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7 IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQojaWVkX2hlbHAgY29kZS5zZWRfY29kZV90 YWcgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGJhY2tn cm91bmQtY29sb3I6ICNmMGU2OGM7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHgg MjBweDsgcGFkZGluZzoxMHB4OyB9CiNpZWRfaGVscCBhOmxpbmssICNpZWRfaGVscCBhOnZp c2l0ZWQgeyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90 dG9tOiAxcHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30KI2llZF9oZWxwIGE6 aG92ZXIsICNpZWRfaGVscCBhOmFjdGl2ZSB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRp b246IG5vbmU7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRv bToxcHg7fQojaWVkX2hlbHAgaDEgeyBjb2xvcjogIzM2OTsgZm9udDogMjBweCBHZW9yZ2lh LCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgfQojaWVkX2hl bHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAw IDA7IGNvbG9yOiAjMzY5OyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI2ll ZF9oZWxwIGgzIHsgY29sb3I6ICMxMDgwMzA7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fu cy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxNXB4IDAgMDt0ZXh0LXRy YW5zZm9ybTogdXBwZXJjYXNlO30KPC9zdHlsZT4iO3M6NDoiY29kZSI7czo0MDY5NzoiaWYo QHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7CglhZGRfcHJpdnMoJ2llZF9wbHVnaW5fY29t cG9zZXInLCcxLDInKTsKCXJlZ2lzdGVyX3RhYignZXh0ZW5zaW9ucycsICdpZWRfcGx1Z2lu X2NvbXBvc2VyJywgaWVkX3BsdWdpbl9nVHh0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykpOwoJ cmVnaXN0ZXJfY2FsbGJhY2soJ2llZF9wbHVnaW5fY29tcG9zZXInLCAnaWVkX3BsdWdpbl9j b21wb3NlcicpOwoJZ2xvYmFsICRpZWRfcGx1Z2luX2NvbXBvc2VyLCAkaWVkX3BsdWdpbl9w cmVmcywgJGllZF9wbHVnaW5fZ2xvYmFsczsKCSRpZWRfcGx1Z2luX2dsb2JhbHMgPSBhcnJh eSgKCQknY3NzX3N0YXJ0JyA9PiAnPCEtLScsCgkJJ2Nzc19lbmQnID0+ICctLT4nLAoJCSdk bG1fc3RhcnQnID0+ICcjJywKCQknZGxtX2VuZCcgPT4gJycsCgkJJ3N0YXJ0JyA9PiAnIC0t LSBCRUdJTiBQTFVHSU4gU0VDVElPTiAtLS0nLAoJCSdlbmQnID0+ICcgLS0tIEVORCBQTFVH SU4gU0VDVElPTiAtLS0nLAoJKTsKCS8vIERvdWJsZSBhcnJheTogMXN0IGlzIGEgbGlzdCBv ZiBjdXJyZW50IHByZWZzIGFuZCB0aGVpciBkZWZhdWx0cywKCS8vIDJuZCBpcyBhIGxpc3Qg b2YgbGVnYWN5IHByZWZzIHRoYXQgbWF5IG5lZWQgcmVtb3ZpbmcgaW4gZnV0dXJlIChkZWZh dWx0cyBhbGwgc2V0IGVtcHR5KQoJJGllZF9wbHVnaW5fcHJlZnMgPSBhcnJheSgKCQlhcnJh eSgKCQkJJ2llZF9wbHVnaW5fZWRpdG9yJyA9PiAnbm9uZScsCgkJCSdpZWRfcGx1Z2luX2Vk aXRvcl9wYXRoJyA9PiBodS4nanMnLkRTLAoJCQknaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgn ID0+ICcxMTAnLAoJCQknaWVkX3BsdWdpbl9oZWxwX2VkaXRvcicgPT4gJ3RleHRpbGUnLAoJ CQknaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRoJyA9PiBodS4nanMnLkRTLAoJCQknaWVk X3BsdWdpbl9vdXRwdXRfb3JkZXInID0+ICcwJywKCQkpLAoJCWFycmF5KAoJCQknaWVkX3Bs dWdpbl9ub3RfdXNlZF9hbnlfbW9yZV90ZXN0ZXInID0+ICcnLAoJCSkKCSk7Cn0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9jb21wb3NlciAoJGV2ZW50LCAkc3RlcCkgewoJ aWYoISRzdGVwIG9yICFpbl9hcnJheSgkc3RlcCwgYXJyYXkoJ2llZF9wbHVnaW5fZGVsZXRl JywKCQkJJ2llZF9wbHVnaW5fZWRpdCcsCgkJCSdpZWRfcGx1Z2luX2hlbHAnLAoJCQknaWVk X3BsdWdpbl9saXN0JywKCQkJJ2llZF9wbHVnaW5faW5zdGFsbCcsCgkJCSdpZWRfcGx1Z2lu X3NhdmUnLAoJCQknaWVkX3BsdWdpbl9zYXZlX2ZpbGUnLAoJCQknaWVkX3BsdWdpbl92ZXJp ZnknLAoJCQknaWVkX3N3aXRjaF9zdGF0dXMnLAoJCQknaWVkX3BsdWdpbl9zZXR1cCcsCgkJ CSdpZWRfcGx1Z2luX3ByZWZzX2luc3RhbGwnLAoJCQknaWVkX3BsdWdpbl9wcmVmc19yZW1v dmUnLAoJCQknaWVkX3BsdWdpbl9wcmVmc191cGRhdGUnLAoJCQknaWVkX3BsdWdpbl9jcmVh dGVfbmV3JywKCQkJJ2llZF9wbHVnaW5fc2F2ZV9hc19maWxlJywKCQkJJ2llZF9wbHVnaW5f c2F2ZV9hc19waHBfZmlsZScsCgkJCSdpZWRfcGx1Z2luX3VwbG9hZCcsCgkJCSdpZWRfcGx1 Z2luX2hlbHBfdmlld2VyJywKCQkpKSkgewoJCWllZF9wbHVnaW5fbGlzdCgpOwoJfSBlbHNl ICRzdGVwKCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9saXN0KCRtZXNz YWdlPScnKSB7CglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycpLCRtZXNzYWdlKTsKCWVj aG8gc3RhcnRUYWJsZSgnbGlzdCcpLgp0cih0ZGEoCmZvcm0oCmZJbnB1dCgndGV4dCcsJ25h bWUnLCcnLCcnLCcnLCcnLCczMCcsJzAnKQouIGZJbnB1dCgnc3VibWl0Jywnc3VibWl0Jyxp ZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fY3JlYXRlX25ldycpLCdzbWFsbGVyYm94JykK LiBzSW5wdXQoJ2llZF9wbHVnaW5fY3JlYXRlX25ldycpCi4gZUlucHV0KCdpZWRfcGx1Z2lu X2NvbXBvc2VyJykKKQosJyBjb2xzcGFuPSI2IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjUw cHgiJykKLnRkYShmb3JtKGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsICdTZXR1cCcsICdw dWJsaXNoJykuc0lucHV0KCdpZWRfcGx1Z2luX3NldHVwJykuZUlucHV0KCdpZWRfcGx1Z2lu X2NvbXBvc2VyJykpLCcgY29sc3Bhbj0iNiIgc3R5bGU9ImJvcmRlcjowO2hlaWdodDo1MHB4 IicpKS4KYXNzSGVhZCgncGx1Z2luJywnYXV0aG9yJyxnVHh0KCd2ZXJzaW9uJykuJyAoJy5n VHh0KCdwbHVnaW5fbW9kaWZpZWQnKS4nKScsJ2Rlc2NyaXB0aW9uJywnbWFuYWdlJywncHVi bGlzaCcsICdhY3RpdmUnLCcnKTsKCgkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoIioiLCJ0eHBf cGx1Z2luIiwgIjE9MSBvcmRlciBieSBuYW1lIik7CgoJd2hpbGUgKCRhID0gbmV4dFJvdygk cnMpKSB7CgkJZXh0cmFjdCgkYSk7CgkJJGVsaW5rID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRf cGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fZWRpdCYjMzg7bmFtZT0nLiRu YW1lLiciPicuZ1R4dCgnZWRpdCcpLic8L2E+JzsKCQkkaGxpbmsgPSAoJGhlbHApID8gJzxh IGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5f aGVscF92aWV3ZXImIzM4O25hbWU9Jy4kbmFtZS4nIj4nLmdUeHQoJ2hlbHAnKS4nPC9hPicg OiAnTm9uZSc7CgkJJHB1YnRhZyA9IHRhZyhnVHh0KCdwdWJsaXNoJyksJ2EnLCcgaHJlZj0i P2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2Fz X2ZpbGUmIzM4O25hbWU9Jy4kbmFtZS4nIiB0aXRsZT0iJyAuIGllZF9wbHVnaW5fZ1R4dCgn aWVkX3BsdWdpbl9leHBvcnQnKSAuJyAnLiAkbmFtZS4nX3YnLiR2ZXJzaW9uLiAnLnR4dCIn KTsKCQkkcHVienRhZyA9IHRhZyhpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fY29tcHJl c3MnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1p ZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7bmFtZT0nLiRuYW1lLicmIzM4O3ppcD10cnVl IiB0aXRsZT0iJyAuIGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9leHBvcnQnKSAuJyAn LiAkbmFtZS4nX3YnLiR2ZXJzaW9uLiAnX3ppcC50eHQiJyk7CgkJJG1vZGlmaWVkID0gKHN0 cnRvbG93ZXIoJGNvZGUpICE9IChzdHJ0b2xvd2VyKCRjb2RlX3Jlc3RvcmUpKSk7CgoJCWVj aG8gdHIodGQoJG5hbWUpCi50ZCgnPGEgaHJlZj0iJy4kYXV0aG9yX3VyaS4nIj4nLiRhdXRo b3IuJzwvYT4nLDE2MCkKLnRkKCR2ZXJzaW9uIC4gKCgkbW9kaWZpZWQpID8gJyZuYnNwOygn LmdUeHQoJ3llcycpLicpJyA6ICcnKSwxMCkKLnRkKCRkZXNjcmlwdGlvbiwyNjApCi50ZCgk ZWxpbmsgLicgfCAnLiAkaGxpbmspCi50ZCgkcHVidGFnIC4nIHwgJy4gJHB1Ynp0YWcpCi50 ZChpZWRfc3RhdHVzX2xpbmsoJHN0YXR1cywkbmFtZSx5ZXNfbm8oJHN0YXR1cykpLDMwKQoK LnRkKGRMaW5rKCdpZWRfcGx1Z2luX2NvbXBvc2VyJywnaWVkX3BsdWdpbl9kZWxldGUnLCdu YW1lJywkbmFtZSksMzApCik7CgkJdW5zZXQoJG5hbWUsJHBhZ2UsJGRlbGV0ZWxpbmspOwoJ fQoKCWlmICghZW1wdHkoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXSkp IHsKCQkkZmlsZW5hbWVzID0gYXJyYXkoKTsKCQkkZGlyID0gZGlyKCRHTE9CQUxTWydwcmVm cyddWydwbHVnaW5fY2FjaGVfZGlyJ10pOwoJCXdoaWxlICgkZmlsZSA9ICRkaXItPnJlYWQo KSkgewoJCQlpZigkZmlsZSAhPSAiLiIgJiYgJGZpbGUgIT0gIi4uIikgewoJCQkJJGZpbGVh ZGRyID0gJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy4kZmlsZTsK CQkJCWlmICghaXNfZGlyKCRmaWxlYWRkcikpIHsKCQkJCQkkZmlsZW5hbWVzW109JGZpbGU7 CgkJCQl9CgkJCX0KCQl9CgkJJGRpci0+Y2xvc2UoKTsKCQkoJGZpbGVuYW1lcyk/bmF0Y2Fz ZXNvcnQoJGZpbGVuYW1lcyk6Jyc7CgkJZWNobyB0cigKCQl0ZGEoCgkJdGFnKGllZF9wbHVn aW5fZ1R4dCgnaWVkX3BsdWdpbl9ydW5fZnJvbScpLicgJy50YWcoJ3BsdWdpbl9jYWNoZV9k aXInLCdhY3JvbnltJywnIHRpdGxlPSInLiRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2Fj aGVfZGlyJ10uJyIgc3R5bGU9ImJvcmRlci1ib3R0b206MXB4IGRhc2hlZCBibGFjayInKS4n OicsJ2gxJykKCQksJyBjb2xzcGFuPSI4IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHg7 dGV4dC1hbGlnbjpsZWZ0IicpCgoJCSk7CgoJCWVjaG8gYXNzSGVhZCgncGx1Z2luJywnYXV0 aG9yJywndmVyc2lvbicsJ2Rlc2NyaXB0aW9uJywnbWFuYWdlJywncHVibGlzaCcsJycsJycp OwoJCWZvcmVhY2goJGZpbGVuYW1lcyBhcyAkZmlsZW5hbWUpIHsKCQkJJGVsaW5rID0gJzxh IGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5f ZWRpdCYjMzg7ZmlsZW5hbWU9Jy4kZmlsZW5hbWUuJyI+Jy5nVHh0KCdlZGl0JykuJzwvYT4n OwoKCQkJJGZpbGVleHQ9IGFycmF5X3BvcChleHBsb2RlICgnLicsJGZpbGVuYW1lKSk7CgkJ CWlmICgkZmlsZWV4dD09J3BocCcpIHsKCQkJCSRiYXNlbmFtZT1iYXNlbmFtZSgkZmlsZW5h bWUpOwoJCQkJJHBsdWdpbiA9IGllZF9wbHVnaW5fcmVhZF9maWxlKCRHTE9CQUxTWydwcmVm cyddWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuJGZpbGVuYW1lKTsKCQkJCSRobGluayA9ICgk cGx1Z2luWydoZWxwJ10pID8gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2Vy JiMzODtzdGVwPWllZF9wbHVnaW5faGVscF92aWV3ZXImIzM4O2ZpbGVuYW1lPScuJGZpbGVu YW1lLiciPicuZ1R4dCgnaGVscCcpLic8L2E+JyA6ICdOb25lJzsKCgkJCQllY2hvIHRyKAoJ CQkJdGQoCgkJCQl0YWcoJGZpbGVuYW1lLCdkaXYnLCcgc3R5bGU9ImNvbG9yOmdyYXk7Ym9y ZGVyOjBweCBzb2xpZCBncmF5O3BhZGRpbmc6MXB4IDJweCAycHggMXB4OyInKQoJCQkJLihp c3NldCgkcGx1Z2luWyduYW1lJ10pPyRwbHVnaW5bJ25hbWUnXS4nPGJyIC8+JzonJykuJyAn CgkJCQkpCgkJCQkudGQoCgkJCQkoIGlzc2V0KCRwbHVnaW5bJ2F1dGhvcl91cmknXSk/Jzxh IGhyZWY9IicuJHBsdWdpblsnYXV0aG9yX3VyaSddLiciPic6JycgKSAuCgkJCQkoIGlzc2V0 KCRwbHVnaW5bJ2F1dGhvciddKT8kcGx1Z2luWydhdXRob3InXTonJm5ic3A7JyApLgoJCQkJ KCBpc3NldCgkcGx1Z2luWydhdXRob3JfdXJpJ10pPyc8L2E+JzonJyApLCAxNjAKCQkJCSkK CQkJCS50ZCgoaXNzZXQoJHBsdWdpblsndmVyc2lvbiddKT8kcGx1Z2luWyd2ZXJzaW9uJ106 JyZuYnNwOycpLDEwKQoJCQkJLnRkKChpc3NldCgkcGx1Z2luWydkZXNjcmlwdGlvbiddKT8k cGx1Z2luWydkZXNjcmlwdGlvbiddOicmbmJzcDsnKSwyNjApCgkJCQkudGQoJGVsaW5rIC4n IHwgJy4gJGhsaW5rKQoJCQkJLnRkKChpc3NldCgkcGx1Z2luWyduYW1lJ10pPwoJCQkJdGFn KGdUeHQoJ3B1Ymxpc2gnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3Nl ciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7ZmlsZW5hbWU9Jy4kZmls ZW5hbWUuJyIgdGl0bGU9IicgLiBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fZXhwb3J0 JykgLicgJy4gJHBsdWdpblsnbmFtZSddLidfdicuJHBsdWdpblsndmVyc2lvbiddLiAnLnR4 dCInKQoJCQkJCQkuJyB8ICcudGFnKGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9jb21w cmVzcycpLCdhJywnIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVw PWllZF9wbHVnaW5fc2F2ZV9hc19maWxlJiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4nJiMz ODt6aXA9dHJ1ZSIgdGl0bGU9IicgLiBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fZXhw b3J0JykgLicgJy4gJHBsdWdpblsnbmFtZSddLidfdicuJHBsdWdpblsndmVyc2lvbiddLiAn X3ppcC50eHQiJyk6CgkJCQl0YWcoJyZuYnNwOycsJ3NwYW4nLCcgc3R5bGU9ImNvbG9yOmdy YXkiJykKCQkJCSkpCgkJCQkudGQoJycpCgkJCQkudGQoJycpCgkJCQkpOwoJCQl9CgkJfQoJ fQoKCWVjaG8gdHIoCnRkYSgKJzxmb3JtIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEi IGFjdGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9InBvc3QiPicuCnN0YXJ0VGFibGUoJ2VkaXQn LCdsZWZ0JykuCnRyKHRkYSggaElucHV0KCdNQVhfRklMRV9TSVpFJywxMDAwMDAwKS4KZ3Jh ZihpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fdXBsb2FkX3BocCcpLic6ICcuCmZJbnB1 dCgnZmlsZScsJ3RoZWZpbGUnLCcnLCdlZGl0JykuCmZJbnB1dCgnc3VibWl0Jywnc3VibWl0 JyxnVHh0KCd1cGxvYWQnKSwnc21hbGxlcmJveCcpKS4KZUlucHV0KCdpZWRfcGx1Z2luX2Nv bXBvc2VyJykuCnNJbnB1dCgnaWVkX3BsdWdpbl91cGxvYWQnKSAsICcgc3R5bGU9ImJvcmRl cjowcHggc29saWQgZ3JheSInICkuCnRkYSggdGFnKGllZF9wbHVnaW5fZ1R4dCgnaWVkX3Bs dWdpbl9uYW1lJyksICdhY3JvbnltJywnIHRpdGxlPSInLmllZF9wbHVnaW5fZ1R4dCgnaWVk X3BsdWdpbl9uYW1lX3Rvb2x0aXAnKS4nIiBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggZGFz aGVkIGJsYWNrIicpLic6ICcuIGZJbnB1dCgndGV4dCcsJ25hbWUnLCd4eHhfeHh4eHh4Jywn JywnJywnJywnMzAnLCcwJykgLCAnIHN0eWxlPSJib3JkZXI6MHB4IHNvbGlkIGdyYXk7dmVy dGljYWwtYWxpZ246bWlkZGxlOyInICkpLgplbmRUYWJsZSgpLgonPC9mb3JtPicKLCcgY29s c3Bhbj0iOCIgc3R5bGU9ImJvcmRlcjowO2hlaWdodDo1MHB4O3RleHQtYWxpZ246bGVmdCIn KQopOwoJZWNobyBlbmRUYWJsZSgpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9zdGF0 dXNfbGluaygkc3RhdHVzLCRuYW1lLCRsaW5rdGV4dCkgewoJJG91dCA9ICc8YSBocmVmPSJp bmRleC5waHA/JzsKCSRvdXQgLj0gJ2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0 ZXA9aWVkX3N3aXRjaF9zdGF0dXMmIzM4O3N0YXR1cz0nLgoJJHN0YXR1cy4nJiMzODtuYW1l PScudXJsZW5jb2RlKCRuYW1lKS4nIic7Cgkkb3V0IC49ICc+Jy4kbGlua3RleHQuJzwvYT4n OwoJcmV0dXJuICRvdXQ7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3N3aXRjaF9zdGF0 dXMoKSB7CglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnbmFtZScsJ3N0YXR1cycpKSkp OwoJJGNoYW5nZSA9ICgkc3RhdHVzKSA/IDAgOiAxOwoJc2FmZV91cGRhdGUoInR4cF9wbHVn aW4iLCAic3RhdHVzPSRjaGFuZ2UiLCAibmFtZT0nJG5hbWUnIik7CglpZWRfcGx1Z2luX2xp c3QobWVzc2VuZ2VyKCdwbHVnaW4nLCRuYW1lLCd1cGRhdGVkJykpOwp9CgovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CmZ1bmN0aW9uIGllZF9wbHVnaW5fZGVsZXRlKCkgewoJJG5hbWUgPSBkb1NsYXNoKHBzKCdu YW1lJykpOwoJc2FmZV9kZWxldGUoInR4cF9wbHVnaW4iLCJuYW1lPSckbmFtZSciKTsKCWll ZF9wbHVnaW5fbGlzdChtZXNzZW5nZXIoJ3BsdWdpbicsJG5hbWUsJ2RlbGV0ZWQnKSk7Cn0K Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9lZGl0KCRtZXNzYWdlPScnLCRuZXdm aWxlPScnKSB7Cgkkc2l0ZV9kaXIgPSBodTsKCSRuYW1lID0gZ3BzKCduZXduYW1lJyk/Z3Bz KCduZXduYW1lJyk6Z3BzKCduYW1lJyk7CglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycp LCRtZXNzYWdlKTsKCWVjaG8gaWVkX2luc2VydF9lZGl0b3JzKCk7CgkkdGhlRmlsZSA9ICgk bmV3ZmlsZSkgPyAkbmV3ZmlsZSA6ICgoZ3BzKCdmaWxlbmFtZScpKSA/IGdwcygnZmlsZW5h bWUnKSA6ICRuYW1lKTsKCWVjaG8gaWVkX3BsdWdpbl9lZGl0X2Zvcm0oJHRoZUZpbGUsIGdw cygnZmlsZW5hbWUnKT8gMTogMCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdp bl9lZGl0X2Zvcm0oJG5hbWU9JycsJGVkaXRmaWxlPTApIHsKCWdsb2JhbCAkcHJlZnMsICRp ZWRfcGx1Z2luX3ByZWZzOwoJaWYgKCEkZWRpdGZpbGUpIHsKCQkkYXV0aG9yID0gKCRuYW1l KSA/IGZldGNoKCdhdXRob3InLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJ JGF1dGhvcl91cmkgPSAoJG5hbWUpID8gZmV0Y2goJ2F1dGhvcl91cmknLCd0eHBfcGx1Z2lu JywnbmFtZScsJG5hbWUpIDogJyc7CgkJJHZlcnNpb24gPSAoJG5hbWUpID8gZmV0Y2goJ3Zl cnNpb24nLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJGRlc2NyaXB0aW9u ID0gKCRuYW1lKSA/IGZldGNoKCdkZXNjcmlwdGlvbicsJ3R4cF9wbHVnaW4nLCduYW1lJywk bmFtZSkgOiAnJzsKCQkkY29kZSA9ICgkbmFtZSkgPyBmZXRjaCgnY29kZScsJ3R4cF9wbHVn aW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkaGVscCA9ICgkbmFtZSkgPyBmZXRjaCgnaGVs cCcsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkc3RhdHVzID0gKCRuYW1l KSA/IGZldGNoKCdzdGF0dXMnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJ JHR5cGUgPSAoJG5hbWUpID8gZmV0Y2goJ3R5cGUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5h bWUpIDogJyc7CgkJbGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4 dHJhY3RfaHVuaygkaGVscCwgIkNTUyIsICI8IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycs JGhlbHApOwoJfSBlbHNlIHsKCQkkcGx1Z2luID0gaWVkX3BsdWdpbl9yZWFkX2ZpbGUoJEdM T0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy4kbmFtZSk7CgkJJGZpbGVu YW1lPSRuYW1lOwoJCSRmaWxlZXh0PSBhcnJheV9wb3AoJG5hbWU9ZXhwbG9kZSAoJy4nLCRu YW1lKSk7CgkJJG5hbWU9aW1wbG9kZSgkbmFtZSk7CgkJZXh0cmFjdCAoJHBsdWdpbik7IC8v IGNvZGUsIGhlbHAsIGNzcywgbmFtZSwgdmVyc2lvbiwgdHlwZSwgZGVzY3JpcHRpb24sIGF1 dGhvciwgYXV0aG9yX3VyaQoJCSRzdGF0dXM9ICgkZmlsZWV4dD09J3BocCcpPyAxOiAwOwoJ fQoJJGVkd2lkdGggPSAoaXNzZXQoJHByZWZzWydpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCdd KSAmJiBpc19udW1lcmljKCRwcmVmc1snaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgnXSkpID8g JHByZWZzWydpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCddIDogJGllZF9wbHVnaW5fcHJlZnNb MF1bJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ107CgkkcGx1Z2luWyduYW1lJ10gPSAkbmFt ZTsKCSRwbHVnaW5bJ2F1dGhvciddID0gJGF1dGhvcjsKCSRwbHVnaW5bJ2F1dGhvcl91cmkn XSA9ICRhdXRob3JfdXJpOwoJJHBsdWdpblsndmVyc2lvbiddID0gJHZlcnNpb247CgkkcGx1 Z2luWydkZXNjcmlwdGlvbiddID0gJGRlc2NyaXB0aW9uOwoJJHBsdWdpblsnaGVscCddID0g JGhlbHA7CgkkcGx1Z2luWydjb2RlJ10gPSAkY29kZTsKCSRwbHVnaW5bJ3R5cGUnXSA9ICR0 eXBlOwoJJHBsdWdpblsnbWQ1J10gPSBtZDUoICRwbHVnaW5bJ2NvZGUnXSApOwoKCSRkaXN0 cmlidXRpb249Jzx0ZXh0YXJlYSBuYW1lPSJkaXN0cmlidXRpb24iIHJvd3M9IjEiIGNvbHM9 IicuJGVkd2lkdGguJyIgb25jbGljaz0idGhpcy5zZWxlY3QoKSI+Jy5iYXNlNjRfZW5jb2Rl KHNlcmlhbGl6ZSgkcGx1Z2luKSkuJzwvdGV4dGFyZWE+JzsKCgkkbmFtZWRMaW5rID0gKGlz c2V0KCRmaWxlbmFtZSkpID8gJ2ZpbGVuYW1lPScuJGZpbGVuYW1lIDogJ25hbWU9Jy4kbmFt ZTsKCSRuYW1lZEZpbGUgPSAoaXNzZXQoJGZpbGVuYW1lKSkgPyAkZmlsZW5hbWUgOiAkbmFt ZS4nX3YnLiR2ZXJzaW9uLicucGhwJzsKCSRuYW1lZEZpbGVOb0V4dCA9IHByZWdfcmVwbGFj ZSgnLyguKylcLi4qJC8nLCAnJDEnLCAkbmFtZWRGaWxlKTsKCgkkc2xpbmsgPSAnPGEgaHJl Zj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZl X2FzX2ZpbGUmIzM4OycuJG5hbWVkTGluay4nIj4nIC5pZWRfcGx1Z2luX2dUeHQoJ2llZF9w bHVnaW5fZXhwb3J0JykgLicgJy4gJG5hbWVkRmlsZU5vRXh0LiAnLnR4dDwvYT4nOwoJJHN6 aXBsaW5rID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVw PWllZF9wbHVnaW5fc2F2ZV9hc19maWxlJiMzODsnLiRuYW1lZExpbmsuJyYjMzg7emlwPXRy dWUiPicgLiBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fZXhwb3J0JykgLicgJy4gJG5h bWVkRmlsZU5vRXh0LiAnLnR4dCAoY29tcHJlc3NlZCk8L2E+JzsKCSRzcGhwbGluayA9ICc8 YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2lu X3NhdmVfYXNfcGhwX2ZpbGUmIzM4OycuJG5hbWVkTGluay4nIj4nIC4gaWVkX3BsdWdpbl9n VHh0KCdpZWRfcGx1Z2luX3NhdmVfYXMnKSAuJyAnLiAkbmFtZWRGaWxlLiAnPC9hPic7Cgkk dmhlbHBsaW5rZnVsbCA9ICgkaGVscCkgPyAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5f Y29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9oZWxwX3ZpZXdlciYjMzg7Jy4kbmFtZWRM aW5rLiciPlsgJy5zdHJvbmcoZ1R4dCgndmlldycpLicgJy5nVHh0KCdoZWxwJykpLicgXTwv YT4nIDogJyc7CgoJJG5ld25hbWUgPWZJbnB1dCgndGV4dCcsJ25ld25hbWUnLCRuYW1lLCdl ZGl0JywnJywnJywkZWR3aWR0aCwnMicpOwoJJGF1dGhvciA9ZklucHV0KCd0ZXh0JywnYXV0 aG9yJywkYXV0aG9yLCdlZGl0JywnJywnJywkZWR3aWR0aCwnMicpOwoJJGF1dGhvcl91cmkg PWZJbnB1dCgndGV4dCcsJ2F1dGhvcl91cmknLCRhdXRob3JfdXJpLCdlZGl0JywnJywnJywk ZWR3aWR0aCwnMicpOwoJJHZlcnNpb24gPSgkZWRpdGZpbGUpID8gZklucHV0KCd0ZXh0Jywn dmVyc2lvbicsJHZlcnNpb24sJ2VkaXQnLCcnLCcnLCRlZHdpZHRoIC0gKGludCkoJGVkd2lk dGgqMC4zKSwnMicpIC4gJyA8bGFiZWwgZm9yPSJyZW5hbWVfZmlsZSI+JiMxNjA7JiMxNjA7 JiMxNjA7Jy5pZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fcmVuYW1lX2ZpbGUnKS4nOjwv bGFiZWw+JyAuIGNoZWNrYm94KCdyZW5hbWVfZmlsZScsICcxJywgMCwgJycsJ3JlbmFtZV9m aWxlJykgOiBmSW5wdXQoJ3RleHQnLCd2ZXJzaW9uJywkdmVyc2lvbiwnZWRpdCcsJycsJycs JGVkd2lkdGgsJzInKTsKCSRkZXNjcmlwdGlvbiA9ZklucHV0KCd0ZXh0JywnZGVzY3JpcHRp b24nLCRkZXNjcmlwdGlvbiwnZWRpdCcsJycsJycsJGVkd2lkdGgsJzInKTsKCSRjb2RlID0g Jzx0ZXh0YXJlYSBuYW1lPSJjb2RlIiBpZD0icGx1Z2luX2VkaXRvciIgcm93cz0iMzAiIGNv bHM9IicuJGVkd2lkdGguJyIgY2xhc3M9ImNvZGVwcmVzcyBwaHAiPicuaHRtbHNwZWNpYWxj aGFycygkY29kZSkuJzwvdGV4dGFyZWE+JzsKCSRoZWxwID0gJzx0ZXh0YXJlYSBuYW1lPSJo ZWxwIiByb3dzPSIzMCIgY29scz0iJy4kZWR3aWR0aC4nIiBjbGFzcz0ibWNlRWRpdG9yIj4n Lmh0bWxzcGVjaWFsY2hhcnMoJGhlbHApLic8L3RleHRhcmVhPic7CgkkY3NzID0gJzx0ZXh0 YXJlYSBuYW1lPSJjc3MiIHJvd3M9IjE1IiBjb2xzPSInLiRlZHdpZHRoLiciPicuaHRtbHNw ZWNpYWxjaGFycygkY3NzKS4nPC90ZXh0YXJlYT4nOwoJJHByZWZzID0gKCghJGVkaXRmaWxl KT9jaGVja2JveCgnc3RhdHVzJywxLCRzdGF0dXMpLiAnIDxsYWJlbCBmb3I9InN0YXR1cyI+ Jy5pZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fZW5hYmxlJykuJzwvbGFiZWw+JzonJykg LiAnIDxsYWJlbCBmb3I9InR5cGUiPiYjMTYwOyYjMTYwOyYjMTYwOycuaWVkX3BsdWdpbl9n VHh0KCdpZWRfcGx1Z2luX3R5cGUnKS4nOjwvbGFiZWw+Jy4gcmFkaW8oJ3R5cGUnLDAsKCgk dHlwZT09MCk/MTowKSkuaWVkX3BsdWdpbl9nVHh0KCdpZWRfcGx1Z2luX3R5cGVfMCcpLiIg IiAuIHJhZGlvKCd0eXBlJywxLCgoJHR5cGU9PTEpPzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgn aWVkX3BsdWdpbl90eXBlXzEnKS4iICIgLiByYWRpbygndHlwZScsMiwoKCR0eXBlPT0yKT8x OjApKS5pZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fdHlwZV8yJyk7CgoJJHN1YiA9IGZJ bnB1dCgnc3VibWl0JywnJyxnVHh0KCdzYXZlJyksJ3B1Ymxpc2gnKTsKCXJldHVybiBmb3Jt KHN0YXJ0VGFibGUoJ2VkaXQnKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgk c3ViIC4gJHZoZWxwbGlua2Z1bGwpKQoJLiAoIChpc3NldCgkZmlsZW5hbWUpKT8gdHIoIGZM YWJlbENlbGwoJyZuYnNwOycpIC4gdGQoJGZpbGVuYW1lLmhJbnB1dCgnZmlsZW5hbWUnLCRm aWxlbmFtZSkpKSA6ICcnICkKCS4gdHIoIGZMYWJlbENlbGwoICdwbHVnaW4nICkgLiB0ZCgk bmV3bmFtZSkpCgkuIHRyKCBmTGFiZWxDZWxsKCAncGx1Z2luJyApIC4gdGQoJGNvZGUpKQoJ LiB0ciggZkxhYmVsQ2VsbCggJ3ByZWZzJyApIC4gdGQoJHByZWZzKSkKCS4gdHIoIGZMYWJl bENlbGwoICd2ZXJzaW9uJyApIC4gdGQoJHZlcnNpb24pKQoJLiB0ciggZkxhYmVsQ2VsbCgg J2F1dGhvcicgKSAuIHRkKCRhdXRob3IpKQoJLiB0ciggZkxhYmVsQ2VsbCggJ3dlYnNpdGUn ICkgLiB0ZCgkYXV0aG9yX3VyaSkpCgkuIHRyKCBmTGFiZWxDZWxsKCAnZGVzY3JpcHRpb24n ICkgLiB0ZCgkZGVzY3JpcHRpb24pKQoJLiB0ciggdGRhKGdUeHQoJ3BsdWdpbl9oZWxwJyks ICcgY2xhc3M9Im5vbGluZSIgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyB2ZXJ0aWNhbC1h bGlnbjogbWlkZGxlOyInKSAuIHRkKCRoZWxwKSkKCS4gdHIoIGZMYWJlbENlbGwoICdjc3Mn ICkgLiB0ZCgkY3NzKSkKCS4gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoJHN1Yikp CgoJLiB0ciggdGRjcygnPGhyPicsMikpCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAu IHRkKGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl91dGlsaXRpZXMnKS4nOicpKQoKCS4g dHIoIGZMYWJlbENlbGwoIGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9jb2RlX2Rpc3Qn KSApIC4gdGQoJGRpc3RyaWJ1dGlvbikpCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAu IHRkKCRzbGluaykpCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRzemlwbGlu aykpCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRzcGhwbGluaykpCgkuIGVu ZFRhYmxlKCkKCS4gc0lucHV0KCdpZWRfcGx1Z2luX3NhdmUnKQoJLiBlSW5wdXQoJ2llZF9w bHVnaW5fY29tcG9zZXInKQoJLiBoSW5wdXQoJ25hbWUnLCRuYW1lKSkJLiA8PDxFT0YKPHNj cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpqUXVlcnkuZm4ucmVzaXplaGFuZGxlID0g ZnVuY3Rpb24oY3VyaCkgewoJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKCQl2YXIg bWUgPSBqUXVlcnkodGhpcyk7CgkJbWUuYW5pbWF0ZSh7aGVpZ2h0OiBjdXJofSk7CgkJbWUu YWZ0ZXIoCgkJCWpRdWVyeSgnPGRpdiBjbGFzcz0icmVzaXplaGFuZGxlIj4tLS0gKyAtLS08 L2Rpdj4nKS5iaW5kKCJtb3VzZWRvd24iLCBmdW5jdGlvbihlKSB7CgkJCQl2YXIgaCA9IG1l LmhlaWdodCgpOwoJCQkJdmFyIHkgPSBlLmNsaWVudFk7CgkJCQl2YXIgbW92ZUhhbmRsZXIg PSBmdW5jdGlvbihlKSB7CgkJCQkJbWUuaGVpZ2h0KE1hdGgubWF4KDIwLCBlLmNsaWVudFkg KyBoIC0geSkpOwoJCQkJfTsKCQkJCXZhciB1cEhhbmRsZXIgPSBmdW5jdGlvbihlKSB7CgkJ CQkJalF1ZXJ5KCJodG1sIikudW5iaW5kKCJtb3VzZW1vdmUiLG1vdmVIYW5kbGVyKS51bmJp bmQoIm1vdXNldXAiLHVwSGFuZGxlcik7CgkJCQkJbmV3aCA9IG1lLmhlaWdodCgpOwoJCQkJ CXNldENvb2tpZSgnaWVkX3BsdWdpbl9lZGhlaWdodCcsIG5ld2gsIDMwKTsKCQkJCX07CgkJ CQlqUXVlcnkoImh0bWwiKS5iaW5kKCJtb3VzZW1vdmUiLCBtb3ZlSGFuZGxlcikuYmluZCgi bW91c2V1cCIsIHVwSGFuZGxlcik7CgkJCX0pCgkJKTsKCX0pOwp9CmZ1bmN0aW9uIHNldENv b2tpZShuYW1lLHZhbHVlLGRheXMpIHsKCWlmIChkYXlzKSB7CgkJdmFyIGRhdGUgPSBuZXcg RGF0ZSgpOwoJCWRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSsoZGF5cyoyNCo2MCo2MCox MDAwKSk7CgkJdmFyIGV4cGlyZXMgPSAiOyBleHBpcmVzPSIrZGF0ZS50b0dNVFN0cmluZygp OwoJfSBlbHNlIHZhciBleHBpcmVzID0gIiI7Cglkb2N1bWVudC5jb29raWUgPSBuYW1lKyI9 Iit2YWx1ZStleHBpcmVzKyI7IHBhdGg9LyI7Cn0KZnVuY3Rpb24gZ2V0Q29va2llKG5hbWUp IHsKCXZhciBuYW1lRVEgPSBuYW1lICsgIj0iOwoJdmFyIGNhID0gZG9jdW1lbnQuY29va2ll LnNwbGl0KCc7Jyk7Cglmb3IodmFyIGk9MDtpIDwgY2EubGVuZ3RoO2krKykgewoJCXZhciBj ID0gY2FbaV07CgkJd2hpbGUgKGMuY2hhckF0KDApPT0nICcpIGMgPSBjLnN1YnN0cmluZygx LGMubGVuZ3RoKTsKCQlpZiAoYy5pbmRleE9mKG5hbWVFUSkgPT0gMCkgcmV0dXJuIGMuc3Vi c3RyaW5nKG5hbWVFUS5sZW5ndGgsYy5sZW5ndGgpOwoJfQoJcmV0dXJuIG51bGw7Cn0KXCQo ZnVuY3Rpb24oKSB7CgljdXJoID0gZ2V0Q29va2llKCdpZWRfcGx1Z2luX2VkaGVpZ2h0Jyk7 CgljdXJoID0gKGN1cmggPT0gbnVsbCkgPyAnNDgwJyA6IGN1cmg7CglcJCgiI3BsdWdpbl9l ZGl0b3IiKS5yZXNpemVoYW5kbGUocGFyc2VJbnQoY3VyaCkpOwp9KTsKPC9zY3JpcHQ+Cjxz dHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ci5yZXNpemVoYW5kbGUgewoJY3Vyc29yOnMtcmVzaXpl OwoJdGV4dC1hbGlnbjpjZW50ZXI7Cglmb250LXNpemU6MWVtOwoJd2lkdGg6MTAwJTsKCXBh ZGRpbmc6MnB4IDAgNnB4Owp9Cjwvc3R5bGU+CkVPRjsKfQoKLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlv biBpZWRfcGx1Z2luX3NhdmUoKSB7CglnbG9iYWwgJGllZF9wbHVnaW5fZ2xvYmFsczsKCWV4 dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCduYW1lJywnbmV3bmFtZScsJ2ZpbGVuYW1lJywn Y29kZScsJ2F1dGhvcicsJ2F1dGhvcl91cmknLCd2ZXJzaW9uJywnZGVzY3JpcHRpb24nLCdo ZWxwJywnY3NzJywnc3RhdHVzJywndHlwZScsJ3JlbmFtZV9maWxlJykpKSk7CglsaXN0ICgk c3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NTIiwg JGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNb J2Nzc19lbmQnXSk7CgkkZXh0cmFNc2cgPSAkbmV3ZmlsZW5hbWUgPSAnJzsKCglpZiAoZW1w dHkoJGZpbGVuYW1lKSkgewoJCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwibmFtZT0nJG5l d25hbWUnIiwgIm5hbWU9JyRuYW1lJyIpOwoJCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwi Y29kZT0nJGNvZGUnIiwgIm5hbWU9JyRuZXduYW1lJyIpOwoJCXNhZmVfdXBkYXRlKCJ0eHBf cGx1Z2luIiwiYXV0aG9yPSckYXV0aG9yJyIsICJuYW1lPSckbmV3bmFtZSciKTsKCQlzYWZl X3VwZGF0ZSgidHhwX3BsdWdpbiIsImF1dGhvcl91cmk9JyRhdXRob3JfdXJpJyIsICJuYW1l PSckbmV3bmFtZSciKTsKCQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsInZlcnNpb249JyR2 ZXJzaW9uJyIsICJuYW1lPSckbmV3bmFtZSciKTsKCQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdp biIsImRlc2NyaXB0aW9uPSckZGVzY3JpcHRpb24nIiwgIm5hbWU9JyRuZXduYW1lJyIpOwoJ CXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwiaGVscD0nIi4kaGVscC4oKCRjc3MpID8gbi4k c3RhcnRfY3NzLm4uJGNzcy5uLiRlbmRfY3NzOicnKS4iJyIsICJuYW1lPSckbmV3bmFtZSci KTsKCQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsInN0YXR1cz0nJHN0YXR1cyciLCAibmFt ZT0nJG5ld25hbWUnIik7CgkJc2FmZV91cGRhdGUoInR4cF9wbHVnaW4iLCJ0eXBlPSckdHlw ZSciLCAibmFtZT0nJG5ld25hbWUnIik7Cgl9IGVsc2UgewoJCSRkaXIgPSAkR0xPQkFMU1sn cHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLkRTOwoJCSRmaWxlY29udGVudCA9IGZpbGUo JGRpci4kZmlsZW5hbWUpOwoJCSRmaWxlY29udGVudCA9IGllZF9wbHVnaW5fbWFrZV9hcnJh eSgkZmlsZWNvbnRlbnQpOwoJCSRtZXRhdmFycyA9IGFycmF5KCJuYW1lIiA9PiAiJG5ld25h bWUiLAoJCQkJCQkJCSJ2ZXJzaW9uIiA9PiAiJHZlcnNpb24iLAoJCQkJCQkJCSJhdXRob3Ii ID0+ICIkYXV0aG9yIiwKCQkJCQkJCQkiYXV0aG9yX3VyaSIgPT4gIiRhdXRob3JfdXJpIiwK CQkJCQkJCQkiZGVzY3JpcHRpb24iID0+ICIkZGVzY3JpcHRpb24iLAoJCQkJCQkJCSJ0eXBl IiA9PiAiJHR5cGUiCgkJCQkJCSk7CgkJJGh1bmt2YXJzID0gYXJyYXkoIkNPREUiID0+IGRv U3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcKJywkY29kZSkpLCAvLyBuZXdsaW5lIHdvcmth cm91bmQKCQkJCQkiSEVMUCIgPT4gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbicsJwonLCRo ZWxwKSksCgkJCQkJIkNTUyIgPT4gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbicsJwonLCRj c3MpKSwKCQkJCQkJKTsKCQlmb3JlYWNoICgkbWV0YXZhcnMgYXMgJHZhcm5hbWUgPT4gJHZh bHVlKSB7CgkJCWZvcigkaWR4ID0gMDsgJGlkeCA8IGNvdW50KCRmaWxlY29udGVudCk7ICRp ZHgrKykgewoJCQkJaWYgKHN0cnBvcygkZmlsZWNvbnRlbnRbJGlkeF0sICckcGx1Z2luW1wn Jy4kdmFybmFtZS4nXCddJykgPT09IDApIHsKCQkJCQkkZmlsZWNvbnRlbnRbJGlkeF0gPSAn JHBsdWdpbltcJycuJHZhcm5hbWUuJ1wnXSA9ICcuZG9RdW90ZSgkdmFsdWUpLic7JzsKCQkJ CQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCQlmb3JlYWNoICgkaHVua3ZhcnMgYXMgJHZhcm5h bWUgPT4gJGh1bmspIHsKCQkJbGlzdCAoJHN0YXJ0X2RlbGltLCAkZW5kX2RlbGltKSA9IGll ZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCR2YXJuYW1lLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydk bG1fc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snZGxtX2VuZCddKTsKCQkJJHN0YXJ0 ID0gYXJyYXlfc2VhcmNoKCRzdGFydF9kZWxpbSwgJGZpbGVjb250ZW50KSArIDE7CgkJCSRl bmQgPSBhcnJheV9zZWFyY2goJGVuZF9kZWxpbSwgJGZpbGVjb250ZW50KTsKCQkJaWYgKGlz X251bWVyaWMoJHN0YXJ0KSAmJiBpc19udW1lcmljKCRlbmQpICYmICRlbmQgPj0gJHN0YXJ0 KSB7CgkJCQlhcnJheV9zcGxpY2UoJGZpbGVjb250ZW50LCAkc3RhcnQsICRlbmQtJHN0YXJ0 LCAkaHVuayk7CgkJCX0KCQl9CgkJJGZpbGVjb250ZW50ID0gaW1wbG9kZSgiXG4iLCAkZmls ZWNvbnRlbnQpOwoKCQkkZmggPSBmb3BlbigkZGlyLiRmaWxlbmFtZSwgJ3crJyk7CgkJZndy aXRlKCRmaCwgJGZpbGVjb250ZW50KTsKCQlmY2xvc2UoJGZoKTsKCgkJLy8gTWFrZSBuZXcg ZmlsZSBpZiByZXF1aXJlZAoJCWlmICgkcmVuYW1lX2ZpbGUgPT0gMSkgewoJCQkkbmV3Zmls ZW5hbWUgPSAkbmV3bmFtZS4nX3YnLiR2ZXJzaW9uLicucGhwJzsKCQkJJHJlcyA9IHJlbmFt ZSgkZGlyLiRmaWxlbmFtZSwgJGRpci4kbmV3ZmlsZW5hbWUpOwoJCQkkZXh0cmFNc2cgPSAo JHJlcykgPyBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fcmVuYW1lZCcpIDogaWVkX3Bs dWdpbl9nVHh0KCdpZWRfcGx1Z2luX3JlbmFtZV9mYWlsZWQnKTsKCQl9Cgl9CgkvLyBDaGVj ayB0aGUgcGx1Z2luIHR5cGUgbWF0Y2hlcyB0aGUgY29kZSB1c2VkCgkkZXh0cmFNc2cgLj0g KGllZF9wbHVnaW5fYWRtaW5fY2hlY2soJGNvZGUsICR0eXBlKSkgPyAnJyA6IHN0cm9uZyhp ZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fY2hlY2tfdHlwZScpKTsKCSRtZXNzYWdlID0g bWVzc2VuZ2VyKCdwbHVnaW4nLCRuZXduYW1lLCdzYXZlZCcpLmJyLiRleHRyYU1zZzsKCWll ZF9wbHVnaW5fZWRpdCgkbWVzc2FnZSwgJG5ld2ZpbGVuYW1lKTsKfQoKLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpm dW5jdGlvbiBpZWRfcGx1Z2luX2NyZWF0ZV9uZXcoKSB7CglleHRyYWN0KGRvU2xhc2goZ3Bz YShhcnJheSgnbmFtZScpKSkpOwoJaWYgKCRuYW1lPT0nJykgewoJCWllZF9wbHVnaW5fbGlz dChpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fbmFtZV9maXJzdCcpKTsKCQlyZXR1cm47 Cgl9CgkkZXhpc3RzID0gZmV0Y2goJ25hbWUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUp OwoJaWYgKCEkZXhpc3RzKSB7CgkJc2FmZV9pbnNlcnQoInR4cF9wbHVnaW4iLCAiCgkJCW5h bWU9JyRuYW1lJywKCQkJc3RhdHVzPScwJywKCQkJdHlwZT0nMCcsCgkJCXZlcnNpb249JzAu MScKCQkiKTsKCQlwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycpLCAnZWRpdCB5b3VyIG5l dyBwbHVnaW4nKTsKCQllY2hvIGllZF9wbHVnaW5fZWRpdF9mb3JtKCRuYW1lKTsKCX0gZWxz ZSB7CgkJaWVkX3BsdWdpbl9saXN0KGdUeHQoJ3BsdWdpbicpLicgPHN0cm9uZz4nLiRuYW1l Lic8L3N0cm9uZz4gJy5nVHh0KCdhbHJlYWR5X2V4aXN0cycpKTsKCX0KfQoKLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQpmdW5jdGlvbiBpZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSgpIHsKCWdsb2JhbCAkaWVkX3Bs dWdpbl9nbG9iYWxzOwoJaWYgKGdwcygnbmFtZScpKSB7CgkJJG5hbWUgPSBncHMoJ25hbWUn KTsKCQkkZGVzY3JpcHRpb24gPSAoJG5hbWUpID8gZmV0Y2goJ2Rlc2NyaXB0aW9uJywndHhw X3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSRhdXRob3IgPSAoJG5hbWUpID8gZmV0 Y2goJ2F1dGhvcicsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkYXV0aG9y X3VyaSA9ICgkbmFtZSkgPyBmZXRjaCgnYXV0aG9yX3VyaScsJ3R4cF9wbHVnaW4nLCduYW1l JywkbmFtZSkgOiAnJzsKCQkkdmVyc2lvbiA9ICgkbmFtZSkgPyBmZXRjaCgndmVyc2lvbics J3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkY29kZSA9ICgkbmFtZSkgPyBm ZXRjaCgnY29kZScsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkaGVscCA9 ICgkbmFtZSkgPyBmZXRjaCgnaGVscCcsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAn JzsKCQkkdHlwZSA9ICgkbmFtZSkgPyBmZXRjaCgndHlwZScsJ3R4cF9wbHVnaW4nLCduYW1l JywkbmFtZSkgOiAnJzsKCQlsaXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/IGllZF9wbHVn aW5fZXh0cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwgIjwhLS18LS0+IiwgdHJ1ZSkgOiBhcnJh eSgnJywkaGVscCk7Cgl9IGVsc2VpZiAoZ3BzKCdmaWxlbmFtZScpKSB7CgkJJHBsdWdpbj1p ZWRfcGx1Z2luX3JlYWRfZmlsZSgkR0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2Rp ciddLkRTLmdwcygnZmlsZW5hbWUnKSk7CgkJZXh0cmFjdCgkcGx1Z2luKTsKCX0KCSR6aXAg PSBncHMoJ3ppcCcpOwoJaWYgKGdwcygndHJpbScpPT0xKSB7CgkJJGNvZGU9ZXhwbG9kZSgi XHJcbiIsJGNvZGUpOwoJCSRjb2RlPWFycmF5X21hcCgndHJpbScsJGNvZGUpOwoJCSRjb2Rl PWltcGxvZGUoIlxyXG4iLCRjb2RlKTsKCX0KCglsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2Nz cykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFs c1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7CgoJaGVh ZGVyKCJDb250ZW50LXR5cGU6IHRleHQvcGxhaW4iKTsKCWhlYWRlcignQ29udGVudC1EaXNw b3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IicgLiAkbmFtZS4nX3YnLiR2ZXJzaW9u LiAoKCR6aXApPydfemlwJzonJykgLiAnLnR4dCcpOwoKCSR0eXBlcyA9IGFycmF5KCAnQ2xp ZW50IHNpZGUnICwgJ0FkbWluL0NsaWVudCBzaWRlJyAsICdMaWJyYXJ5JyApOwoJJHBsdWdp blsnbmFtZSddID0gJG5hbWU7CgkkcGx1Z2luWydhdXRob3InXSA9ICRhdXRob3I7CgkkcGx1 Z2luWydhdXRob3JfdXJpJ10gPSAkYXV0aG9yX3VyaTsKCSRwbHVnaW5bJ3ZlcnNpb24nXSA9 ICR2ZXJzaW9uOwoJJHBsdWdpblsnZGVzY3JpcHRpb24nXSA9ICRkZXNjcmlwdGlvbjsKCSRw bHVnaW5bJ2NvZGUnXSA9ICRjb2RlOwoJJHBsdWdpblsndHlwZSddID0gJHR5cGU7Ci8vCSRw bHVnaW5bJ2FsbG93X2h0bWxfaGVscCddID0gdHJ1ZTsKLy8JJHBsdWdpblsnaGVscF9yYXcn XSA9ICRoZWxwLiRzdGFydF9jc3MuJGNzcy4kZW5kX2NzczsKCSRwbHVnaW5bJ2hlbHAnXSA9 IGllZF9wbHVnaW5fdGV4dGlsZSgkaGVscCwgJGNzcywgJHN0YXJ0X2NzcywgJGVuZF9jc3Mp OwoJJHBsdWdpblsnbWQ1J10gPSBtZDUoICRwbHVnaW5bJ2NvZGUnXSApOwoKCWVjaG8gJyMg TmFtZTogJy4kbmFtZS4nIHYnLiR2ZXJzaW9uLicgJy4oKCR6aXApID8gIihjb21wcmVzc2Vk KSIgOiAiIikuJwojIFR5cGU6ICcuJHR5cGVzWyR0eXBlXS4nIHBsdWdpbgojICcuJGRlc2Ny aXB0aW9uLicKIyBBdXRob3I6ICcuJGF1dGhvci4nCiMgVVJMOiAnLiRhdXRob3JfdXJpLicK CiMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uCiMgVGhpcyBpcyBhIHBsdWdpbiBmb3IgVGV4dHBhdHRlcm4g LSBodHRwOi8vdGV4dHBhdHRlcm4uY29tLwojIFRvIGluc3RhbGw6IHRleHRwYXR0ZXJuID4g YWRtaW4gPiBwbHVnaW5zCiMgUGFzdGUgdGhlIGZvbGxvd2luZyB0ZXh0IGludG8gdGhlIFwn SW5zdGFsbCBwbHVnaW5cJyBib3g6CiMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgonLigoJHppcCkgPyBj aHVua19zcGxpdChiYXNlNjRfZW5jb2RlKGd6ZW5jb2RlKHNlcmlhbGl6ZSgkcGx1Z2luKSkp LCA3MikgOiBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKHNlcmlhbGl6ZSgkcGx1Z2luKSks IDcyKSk7CgoJZGllKCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9zYXZl X2FzX3BocF9maWxlKCkgewoJZ2xvYmFsICRwcmVmczsKCWlmIChncHMoJ25hbWUnKSkgewoJ CSRuYW1lID0gZ3BzKCduYW1lJyk7CgkJJGRlc2NyaXB0aW9uID0gKCRuYW1lKSA/IGZldGNo KCdkZXNjcmlwdGlvbicsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkYXV0 aG9yID0gKCRuYW1lKSA/IGZldGNoKCdhdXRob3InLCd0eHBfcGx1Z2luJywnbmFtZScsJG5h bWUpIDogJyc7CgkJJGF1dGhvcl91cmkgPSAoJG5hbWUpID8gZmV0Y2goJ2F1dGhvcl91cmkn LCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJHZlcnNpb24gPSAoJG5hbWUp ID8gZmV0Y2goJ3ZlcnNpb24nLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJ JGNvZGUgPSAoJG5hbWUpID8gZmV0Y2goJ2NvZGUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5h bWUpIDogJyc7CgkJJGhlbHAgPSAoJG5hbWUpID8gZmV0Y2goJ2hlbHAnLCd0eHBfcGx1Z2lu JywnbmFtZScsJG5hbWUpIDogJyc7CgkJJHR5cGUgPSAoJG5hbWUpID8gZmV0Y2goJ3R5cGUn LCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJbGlzdCgkY3NzLCRoZWxwKSA9 ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkaGVscCwgIkNTUyIsICI8IS0t fC0tPiIsIHRydWUpIDogYXJyYXkoJycsJGhlbHApOwoJfSBlbHNlaWYgKGdwcygnZmlsZW5h bWUnKSkgewoJCSRwbHVnaW49aWVkX3BsdWdpbl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3ByZWZz J11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy5ncHMoJ2ZpbGVuYW1lJykpOwoJCWV4dHJhY3Qo JHBsdWdpbik7Cgl9CgoJJG9yZGVyID0gKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRw dXRfb3JkZXInXSkgJiYgaXNfbnVtZXJpYygkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29y ZGVyJ10pKSA/ICRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInXSA6IDA7CgoJaGVh ZGVyKCJDb250ZW50LXR5cGU6IHRleHQvcGhwIik7CgloZWFkZXIoJ0NvbnRlbnQtRGlzcG9z aXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInIC4gJG5hbWUuJ192Jy4kdmVyc2lvbi4g Jy5waHAnKTsKCgkkaGVscGNodW5rID0gJ2lmICgwKSB7Jy5uCi4nPz4nLm4KLiAoKCRjc3Mp ID8gJzwhLS0nLm4KLicjIC0tLSBCRUdJTiBQTFVHSU4gQ1NTIC0tLScubgouJGNzcy5uCi4n IyAtLS0gRU5EIFBMVUdJTiBDU1MgLS0tJy5uCi4nLS0+Jy5uIDogJycpCi4nPCEtLScubgou JyMgLS0tIEJFR0lOIFBMVUdJTiBIRUxQIC0tLScubgouJGhlbHAubgouJyMgLS0tIEVORCBQ TFVHSU4gSEVMUCAtLS0nLm4KLictLT4nLm4KLic8P3BocCcubgouJ30nLm47CgoJJGNvZGVj aHVuayA9ICcjIC0tLSBCRUdJTiBQTFVHSU4gQ09ERSAtLS0nLm4KLnN0cl9yZXBsYWNlKCJc clxuIiwiXG4iLCRjb2RlKS5uCi4nIyAtLS0gRU5EIFBMVUdJTiBDT0RFIC0tLScubjsKCgll Y2hvICc8P3BocCcubgouJy8vIFRoaXMgaXMgYSBQTFVHSU4gVEVNUExBVEUuJy5uCi4nLy8g Q29weSB0aGlzIGZpbGUgdG8gYSBuZXcgbmFtZSBsaWtlIGFiY19teXBsdWdpbi5waHAuICBF ZGl0IHRoZSBjb2RlLCB0aGVuJy5uCi4nLy8gcnVuIHRoaXMgZmlsZSBhdCB0aGUgY29tbWFu ZCBsaW5lIHRvIHByb2R1Y2UgYSBwbHVnaW4gZm9yIGRpc3RyaWJ1dGlvbjonLm4KLicvLyAk IHBocCBhYmNfbXlwbHVnaW4ucGhwID4gYWJjX215cGx1Z2luLTAuMS50eHQnLm4KLm4KLicv LyBQbHVnaW4gbmFtZSBpcyBvcHRpb25hbC4gIElmIHVuc2V0LCBpdCB3aWxsIGJlIGV4dHJh Y3RlZCBmcm9tIHRoZSBjdXJyZW50Jy5uCi4nLy8gZmlsZSBuYW1lLiBVbmNvbW1lbnQgYW5k IGVkaXQgdGhpcyBsaW5lIHRvIG92ZXJyaWRlOicubgouJyRwbHVnaW5bXCduYW1lXCddID0g Jy5kb1F1b3RlKCRuYW1lKS4nOycubgouJyRwbHVnaW5bXCd2ZXJzaW9uXCddID0gJy5kb1F1 b3RlKCR2ZXJzaW9uKS4nOycubgouJyRwbHVnaW5bXCdhdXRob3JcJ10gPSAnLmRvUXVvdGUo JGF1dGhvcikuJzsnLm4KLickcGx1Z2luW1wnYXV0aG9yX3VyaVwnXSA9ICcuZG9RdW90ZSgk YXV0aG9yX3VyaSkuJzsnLm4KLickcGx1Z2luW1wnZGVzY3JpcHRpb25cJ10gPSAnLmRvUXVv dGUoJGRlc2NyaXB0aW9uKS4nOycubgoubgouJy8vIFBsdWdpbiB0eXBlczonLm4KLicvLyAw ID0gcmVndWxhciBwbHVnaW47IGxvYWRlZCBvbiB0aGUgcHVibGljIHdlYiBzaWRlIG9ubHkn Lm4KLicvLyAxID0gYWRtaW4gcGx1Z2luOyBsb2FkZWQgb24gYm90aCB0aGUgcHVibGljIGFu ZCBhZG1pbiBzaWRlJy5uCi4nLy8gMiA9IGxpYnJhcnk7IGxvYWRlZCBvbmx5IHdoZW4gaW5j bHVkZV9wbHVnaW4oKSBvciByZXF1aXJlX3BsdWdpbigpIGlzIGNhbGxlZCcubgouJyRwbHVn aW5bXCd0eXBlXCddID0gJy5kb1F1b3RlKCR0eXBlKS4nOycubgoubgouJ0BpbmNsdWRlX29u Y2UoXCd6ZW1fdHBsLnBocFwnKTsnLm4KLm4KLigoJG9yZGVyID09IDApID8gJGNvZGVjaHVu ayA6ICRoZWxwY2h1bmspCi4oKCRvcmRlciA9PSAxKSA/ICRjb2RlY2h1bmsgOiAkaGVscGNo dW5rKQouJz8+JzsKCWRpZSgpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5f dXBsb2FkKCkgewoJZ2xvYmFsICRpZWRfcGx1Z2luX2dsb2JhbHM7CglsaXN0ICgkc3RhcnRf Y3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NTIiwgJGllZF9w bHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19l bmQnXSk7CgoJaWYgKCEkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10pIHsKCQlpZWRf cGx1Z2luX2xpc3QoJ1lvdSBhcmUgc3VwcG9zZWQgdG8gY2hvb3NlIHRoZSBmaWxlIDspJyk7 cmV0dXJuOwoJfQoJJHBsdWdpbiA9IGllZF9wbHVnaW5fcmVhZF9maWxlKCRfRklMRVNbJ3Ro ZWZpbGUnXVsndG1wX25hbWUnXSk7CgkkbmV3bmFtZSA9IChlbXB0eSgkcGx1Z2luWyduYW1l J10pKSA/IGJhc2VuYW1lKCRfRklMRVNbJ3RoZWZpbGUnXVsnbmFtZSddLCAnLnBocCcpIDog JHBsdWdpblsnbmFtZSddOwoJaWYgKGdwcygnbmFtZScpIGFuZCBncHMoJ25hbWUnKSE9J3h4 eF94eHh4eHgnKSB7CgkJJG5ld25hbWU9Z3BzKCduYW1lJyk7Cgl9CglpZiAoZW1wdHkoJHBs dWdpblsnY29kZSddKSkgewoJCSRwbHVnaW5bJ2NvZGUnXSA9IGltcGxvZGUgKCIiLCBmaWxl KCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSkpOwoJfQoKCWlmIChNQUdJQ19RVU9U RVNfR1BDKSB7CgkJJHBsdWdpbiA9IGRvU3RyaXAoJHBsdWdpbik7Cgl9CglleHRyYWN0KGRv U2xhc2goJHBsdWdpbikpOwoJJG1kNT1tZDUoJGNvZGUpOwoJJHZlcnNpb24gPSAoZW1wdHko JHZlcnNpb24pKSA/ICIwLjEiIDogJHZlcnNpb247CgkkaGVscCA9ICRoZWxwLigoJGNzcykg PyBuLiRzdGFydF9jc3Mubi4kY3NzLm4uJGVuZF9jc3MgOiAnJyk7CgkkZXhpc3RzID0gZmV0 Y2goJ25hbWUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5ld25hbWUpOwoJaWYgKCRleGlzdHMp IHsKCQkkc3RhdHVzID0gZmV0Y2goJ3N0YXR1cycsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmV3 bmFtZSk7CgkJJHJzID0gc2FmZV91cGRhdGUoCgkJCSJ0eHBfcGx1Z2luIiwKCQkJInN0YXR1 cyA9ICckc3RhdHVzJywKCQkJdHlwZSA9ICckdHlwZScsCgkJCWF1dGhvciA9ICckYXV0aG9y JywKCQkJYXV0aG9yX3VyaSA9ICckYXV0aG9yX3VyaScsCgkJCXZlcnNpb24gPSAnJHZlcnNp b24nLAoJCQlkZXNjcmlwdGlvbiA9ICckZGVzY3JpcHRpb24nLAoJCQloZWxwID0gJyRoZWxw JywKCQkJY29kZSA9ICckY29kZScsCgkJCWNvZGVfcmVzdG9yZSA9ICckY29kZScsCgkJCWNv ZGVfbWQ1ID0gJyRtZDUnIiwKCQkJIm5hbWUgPSAnJG5ld25hbWUnIgoJCSk7Cgl9IGVsc2Ug ewoJCSRycyA9IHNhZmVfaW5zZXJ0KAoJCQkidHhwX3BsdWdpbiIsCgkJCSJuYW1lID0gJyRu ZXduYW1lJywKCQkJc3RhdHVzID0gMCwKCQkJdHlwZSA9ICckdHlwZScsCgkJCWF1dGhvciA9 ICckYXV0aG9yJywKCQkJYXV0aG9yX3VyaSA9ICckYXV0aG9yX3VyaScsCgkJCXZlcnNpb24g PSAnJHZlcnNpb24nLAoJCQlkZXNjcmlwdGlvbiA9ICckZGVzY3JpcHRpb24nLAoJCQloZWxw ID0gJyRoZWxwJywKCQkJY29kZSA9ICckY29kZScsCgkJCWNvZGVfcmVzdG9yZSA9ICckY29k ZScsCgkJCWNvZGVfbWQ1ID0gJyRtZDUnIgoJCSk7Cgl9CgoJcGFnZXRvcChnVHh0KCdlZGl0 X3BsdWdpbnMnKSwgbWVzc2VuZ2VyKCdwbHVnaW4nLCRuZXduYW1lLCgkZXhpc3RzKT8ndXBk YXRlZCc6J3VwbG9hZGVkJykpOwoJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmV3bmFt ZSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9yZWFkX2ZpbGUoJGZpbGVw YXRoKSB7CgkkY29udGVudCA9IGZpbGUoJGZpbGVwYXRoKTsKCSRzb3VyY2VfbGluZXMgPSBj b3VudCgkY29udGVudCk7CgkkbWV0YWRhdGEgPSBhcnJheSgKCQkJCQkJJ25hbWUnID0+ICcn LAoJCQkJCQkndmVyc2lvbicgPT4gJycsCgkJCQkJCSdyZXZpc2lvbicgPT4gJycsCgkJCQkJ CSdhdXRob3InID0+ICcnLAoJCQkJCQknYXV0aG9yX3VyaScgPT4gJycsCgkJCQkJCSdkZXNj cmlwdGlvbicgPT4gJycsCgkJCQkJCSd0eXBlJyA9PiAnJywKCQkJCQkpOwoJZm9yICgkaWR4 PTA7ICRpZHggPCAkc291cmNlX2xpbmVzOyAkaWR4KyspIHsKCQkkY29udGVudFskaWR4XSA9 IHJ0cmltKCRjb250ZW50WyRpZHhdKTsKCQlpZiAoc3RycG9zKCRjb250ZW50WyRpZHhdLCAn JHBsdWdpblsnKSA9PT0gMCkgewoJCQkvLyBGb3VuZCBhIHBsdWdpbiB2YXJpYWJsZSBzbyBl eHRyYWN0IGl0CgkJCSRwYXJ0cyA9IGV4cGxvZGUoIiA9ICIsICRjb250ZW50WyRpZHhdKTsK CQkJJHBhcnRzWzBdID0gc3RyX3JlcGxhY2UoIiciLCAiIiwgJHBhcnRzWzBdKTsgLy8gTWFr ZSB0aGUgbWF0Y2ggZWFzaWVyIQoJCQlwcmVnX21hdGNoKCIvcGx1Z2luXFsoLiopXF0vIiwg JHBhcnRzWzBdLCAkdmFyKTsgLy8gRXh0cmFjdCBqdXN0IHRoZSB2YXJpYWJsZSBuYW1lCgkJ CXByZWdfbWF0Y2goIi8uKicoLiopJy4qLyIsICRwYXJ0c1sxXSwgJHZhbCk7IC8vIFJlbW92 ZSBhbnl0aGluZyBvdXRzaWRlIHRoZSBxdW90ZXMgKGUuZy4gJHJldmlzaW9uKQoJCQlpZiAo JHZhclsxXSA9PSAncmV2aXNpb24nICYmICFlbXB0eSgkdmFsWzFdKSkgewoJCQkJJHJldnBh cnRzID0gZXhwbG9kZSgnICcsIHRyaW0oJHZhbFsxXSwgJyQgJykpOwoJCQkJJHZhbFsxXSA9 ICRyZXZwYXJ0c1tjb3VudCgkcmV2cGFydHMpLTFdOwoJCQkJJHZhbFsxXSA9IChlbXB0eSgk dmFsWzFdKSkgPyAnJyA6ICcuJyAuJHZhbFsxXTsKCQkJfQoJCQkkbWV0YWRhdGFbJHZhclsx XV0gPSAkdmFsWzFdOwoJCX0KCX0KCSRtZXRhZGF0YVsndmVyc2lvbiddIC49ICRtZXRhZGF0 YVsncmV2aXNpb24nXTsKCSRtZXRhZGF0YVsnaGVscCddID0gaWVkX3BsdWdpbl9leHRyYWN0 X2h1bmsoJGNvbnRlbnQsICdIRUxQJyk7CgkkbWV0YWRhdGFbJ2NzcyddICA9IGllZF9wbHVn aW5fZXh0cmFjdF9odW5rKCRjb250ZW50LCAnQ1NTJyApOwoJJG1ldGFkYXRhWydjb2RlJ10g PSBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkY29udGVudCwgJ0NPREUnKTsKCglyZXR1cm4g JG1ldGFkYXRhOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIHJpcHBlZCBhbmQgbW9kZGVkIGZyb20gbmV0 LWNhcnZlcidzIHplbV90cGwgdGVtcGxhdGUKZnVuY3Rpb24gaWVkX3BsdWdpbl9leHRyYWN0 X2h1bmsoJGNvbnRlbnQsICRodW5rLCAkY21udD0iIyIsICRkZWxldGU9ZmFsc2UpIHsKCSRk bG0gPSBleHBsb2RlKCJ8IiwgJGNtbnQpOwoJJGRsbVN0YXJ0ID0gJGRsbVswXTsKCSRkbG1F bmQgPSAoY291bnQoJGRsbSkgPiAxKSA/ICRkbG1bMV0gOiAnJzsKCSRsaW5lcyA9IGllZF9w bHVnaW5fbWFrZV9hcnJheSgkY29udGVudCk7CgoJbGlzdCAoJHN0YXJ0X2RlbGltLCAkZW5k X2RlbGltKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCRodW5rLCAkZGxtU3RhcnQsICRk bG1FbmQpOwoJJHN0YXJ0ID0gYXJyYXlfc2VhcmNoKCRzdGFydF9kZWxpbSwgJGxpbmVzKSAr IDE7CgkkZW5kID0gYXJyYXlfc2VhcmNoKCRlbmRfZGVsaW0sICRsaW5lcyk7CgkkZXh0cmFj dGVkID0gYXJyYXkoKTsKCWlmIChjb3VudCgkbGluZXMpID4gMCAmJiBpc19udW1lcmljKCRz dGFydCkgJiYgaXNfbnVtZXJpYygkZW5kKSAmJiAkZW5kID4gJHN0YXJ0KSB7CgkJJGV4dHJh Y3RlZCA9IGFycmF5X3NsaWNlKCRsaW5lcywgJHN0YXJ0LCAkZW5kLSRzdGFydCk7CgkJJGxp bmVOdW0gPSBjb3VudCgkZXh0cmFjdGVkKS0xOwoJCXdoaWxlICgkbGluZU51bSA+IDAgJiYg dHJpbSgkZXh0cmFjdGVkWyRsaW5lTnVtLS1dKSA9PSAiIikgewoJCQlhcnJheV9wb3AoJGV4 dHJhY3RlZCk7CgkJfQoJCXdoaWxlIChjb3VudCgkZXh0cmFjdGVkKSA+IDAgJiYgdHJpbSgk ZXh0cmFjdGVkWzBdKSA9PSAiIikgewoJCQlhcnJheV9zaGlmdCgkZXh0cmFjdGVkKTsKCQl9 CgkJaWYgKCRkZWxldGUpIHsKCQkJJGNob3BwZWQgPSBhcnJheV9zcGxpY2UoJGxpbmVzLCAk c3RhcnQtMSwgJGVuZC0kc3RhcnQrMiwgIiIpOwoJCX0KCX0KCSRyZW1haW5zID0gJGxpbmVz OwoJLy8gQ2hlY2sgaWYgdGhlIENTUyBzZWN0aW9uIGhhcyA8c3R5bGU+IHRhZ3MgYXJvdW5k IGl0OyBhZGQgdGhlbSBpZiBub3QKCWlmICgkaHVuayA9PSAiQ1NTIikgewoJCSRudW1yb3dz ID0gY291bnQoJGV4dHJhY3RlZCk7CgkJaWYgKCRudW1yb3dzID4gMSkgewoJCQlpZiAoc3Ry cG9zKCRleHRyYWN0ZWRbJG51bXJvd3MtMV0sICc8L3N0eWxlPicpID09PSBmYWxzZSkgewoJ CQkJJGV4dHJhY3RlZFtdID0gJzwvc3R5bGU+JzsKCQkJfQoJCQlpZiAoc3RycG9zKCRleHRy YWN0ZWRbMF0sICc8c3R5bGUgJykgPT09IGZhbHNlKSB7CgkJCQlhcnJheV91bnNoaWZ0KCRl eHRyYWN0ZWQsICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPicpOwoJCQl9CgkJfQoJfQoJaWYg KCRkZWxldGUpIHsKCQlyZXR1cm4gYXJyYXkodHJpbShqb2luKCJcbiIsICRleHRyYWN0ZWQp KSwgdHJpbShqb2luKCJcbiIsICRyZW1haW5zKSkpOwoJfSBlbHNlIHsKCQlyZXR1cm4gdHJp bShqb2luKCJcbiIsICRleHRyYWN0ZWQpKTsKCX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBp ZWRfcGx1Z2luX21ha2VfYXJyYXkoJGFycikgewoJaWYgKCFpc19hcnJheSgkYXJyKSkgewoJ CSRhcnIgPSBleHBsb2RlKCJcbiIsICRhcnIpOwoJfQoJJHNvdXJjZV9saW5lcyA9IGNvdW50 KCRhcnIpOwoJZm9yICgkaWR4PTA7ICRpZHggPCAkc291cmNlX2xpbmVzOyAkaWR4KyspIHsK CQkkYXJyWyRpZHhdID0gcnRyaW0oJGFyclskaWR4XSk7Cgl9CglyZXR1cm4gJGFycjsKfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX21ha2VfbWFya2VycygkaHVuaywgJHN0 YXJ0LCAkZW5kKSB7CglnbG9iYWwgJGllZF9wbHVnaW5fZ2xvYmFsczsKCSRzbWFya2VyID0g JHN0YXJ0IC4gc3RyX3JlcGxhY2UoIlNFQ1RJT04iLCAkaHVuaywgJGllZF9wbHVnaW5fZ2xv YmFsc1snc3RhcnQnXSkgLiAoKCRlbmQpPycgJy4kZW5kOicnKTsKCSRlbWFya2VyID0gJHN0 YXJ0IC4gc3RyX3JlcGxhY2UoIlNFQ1RJT04iLCAkaHVuaywgJGllZF9wbHVnaW5fZ2xvYmFs c1snZW5kJ10pIC4gKCgkZW5kKT8nICcuJGVuZDonJyk7CglyZXR1cm4gKGFycmF5KCRzbWFy a2VyLCAkZW1hcmtlcikpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIHJpcHBlZCBhbmQgbW9kZGVkIGZy b20gbmV0LWNhcnZlcidzIHplbV90cGwgdGVtcGxhdGUKZnVuY3Rpb24gaWVkX3BsdWdpbl9h ZG1pbl9jaGVjaygkY29kZWJsb2NrLCAkdHlwZSkgewoJJHJlID0gJy90eHBpbnRlcmZhY2Vc cyooPT18PT09KS4qYWRtaW4vJzsKCSRyZXQgPSB0cnVlOwoJaWYgKHByZWdfbWF0Y2goJHJl LCAkY29kZWJsb2NrKSAmJiAkdHlwZSA9PSAwKSB7CgkJJHJldCA9IGZhbHNlOwoJfQoJcmV0 dXJuICRyZXQ7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl90ZXh0aWxlKCRo ZWxwLCAkY3NzLCAkc3RhcnRfZGxtLCAkZW5kX2RsbSkgewoJQGluY2x1ZGVfb25jZSB0eHBh dGguJy9saWIvY2xhc3NUZXh0aWxlLnBocCc7Cgkkb3V0ID0gJGhlbHA7CglpZiAoY2xhc3Nf ZXhpc3RzKCdUZXh0aWxlJykpIHsKCQkvLyBUcnkgYW5kIGJlIGEgbGl0dGxlIG1vcmUgaW50 ZWxsaWdlbnQgYWJvdXQgYXBwbHlpbmcgdGV4dGlsZSBvciBub3QKCQkkcmUgPSAnL2gxKFwo LipcKSk/XC4vJzsKCQlpZiAocHJlZ19tYXRjaCgkcmUsICRoZWxwKSkgewoJCQkkdGV4dGls ZSA9IG5ldyBUZXh0aWxlKCk7CgkJCSRvdXQgPSAkdGV4dGlsZS0+VGV4dGlsZVRoaXMoJGhl bHApOwoJCX0KCX0KCSRvdXQgLj0gKCRjc3MpID8gIlxuJHN0YXJ0X2RsbVxuJGNzc1xuJGVu ZF9kbG1cbiIgOiAnJzsKCXJldHVybiAkb3V0Owp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGll ZF9pbnNlcnRfZWRpdG9ycygpIHsKCWdsb2JhbCAkcHJlZnMsICRpZWRfcGx1Z2luX3ByZWZz OwoJJG91dCA9IGFycmF5KCk7CgoJJHByZWZrZXlzID0gZG9RdW90ZShpbXBsb2RlKCInLCci LGFycmF5X2tleXMoJGllZF9wbHVnaW5fcHJlZnNbMF0pKSk7CgkkcnMgPSBzYWZlX3Jvd3Mo J25hbWUsdmFsLGh0bWwnLCd0eHBfcHJlZnMnLCduYW1lIGluICgnLiRwcmVma2V5cy4nKScp OwoJaWYgKGNvdW50KCRycykgPT0gY291bnQoJGllZF9wbHVnaW5fcHJlZnNbMF0pKSB7CgkJ JGVkID0gYXJyYXkoKTsKCQkkZWRbJHByZWZzWydpZWRfcGx1Z2luX2VkaXRvciddXSA9ICRw cmVmc1snaWVkX3BsdWdpbl9lZGl0b3JfcGF0aCddOwoJCSRlZFskcHJlZnNbJ2llZF9wbHVn aW5faGVscF9lZGl0b3InXV0gPSAkcHJlZnNbJ2llZF9wbHVnaW5faGVscF9lZGl0b3JfcGF0 aCddOwoKCQlmb3JlYWNoICgkZWQgYXMgJGVkaXRvciA9PiAkZWRpdG9yX2RpcikgewoJCQlz d2l0Y2ggKCRlZGl0b3IpIHsKCQkJCWNhc2UgInRpbnlfbWNlIjoKCQkJCQkkb3V0W10gPSA8 PDxFT0YKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kZWRpdG9yX2Rp ci4nL3RpbnlfbWNlLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp cHQiPgoJdGlueU1DRS5pbml0KHsKCQltb2RlIDogInNwZWNpZmljX3RleHRhcmVhcyIsCgkJ ZWRpdG9yX3NlbGVjdG9yIDogIm1jZUVkaXRvciIsCgkJdGhlbWVfYWR2YW5jZWRfdG9vbGJh cl9sb2NhdGlvbiA6ICJ0b3AiLAoJCXRoZW1lX2FkdmFuY2VkX2J1dHRvbnMxIDogImJvbGQs aXRhbGljLHVuZGVybGluZSxzdHJpa2V0aHJvdWdoLGZvcmVjb2xvcixiYWNrY29sb3IscmVt b3ZlZm9ybWF0LG51bWxpc3QsYnVsbGlzdCxvdXRkZW50LGluZGVudCxqdXN0aWZ5bGVmdCxq dXN0aWZ5Y2VudGVyLGp1c3RpZnlyaWdodCxqdXN0aWZ5ZnVsbCIsCgkJdGhlbWVfYWR2YW5j ZWRfYnV0dG9uczIgOiAibGluayx1bmxpbmssc2VwYXJhdG9yLGlicm93c2VyLHNlcGFyYXRv cixzZWFyY2gscmVwbGFjZSxzZXBhcmF0b3IsY3V0LGNvcHkscGFzdGUsc2VwYXJhdG9yLGNv ZGUsc2VwYXJhdG9yLGZvcm1hdHNlbGVjdCIsCgkJdGhlbWVfYWR2YW5jZWRfYnV0dG9uczMg OiAiIgoJfSk7Cjwvc2NyaXB0PjsKRU9GOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiZWRpdF9h cmVhIjoKCQkJCQkkb3V0W10gPSA8PDxFT0YKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp cHQiIHNyYz0iJGVkaXRvcl9kaXIvZWRpdF9hcmVhX2Z1bGwuanMiPjwvc2NyaXB0Pgo8c2Ny aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkvLyBpbml0aWFsaXNhdGlvbgoJZWRpdEFy ZWFMb2FkZXIuaW5pdCh7CgkJaWQ6ICJwbHVnaW5fZWRpdG9yIgkvLyBpZCBvZiB0aGUgdGV4 dGFyZWEgdG8gdHJhbnNmb3JtCgkJLHN0YXJ0X2hpZ2hsaWdodDogdHJ1ZQkvLyBpZiBzdGFy dCB3aXRoIGhpZ2hsaWdodAoJCSxhbGxvd19yZXNpemU6ICJib3RoIgoJCSxhbGxvd190b2dn bGU6IHRydWUKCQksbGFuZ3VhZ2U6ICJlbiIKCQksc3ludGF4OiAicGhwIgoJfSk7Cjwvc2Ny aXB0PgpFT0Y7CgkJCQkJYnJlYWs7CgkJCQljYXNlICJjb2RlcHJlc3MiOgoJCQkJCSRvdXRb XSA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRlZGl0b3JfZGly LicvY29kZXByZXNzLmpzIj48L3NjcmlwdD4nOwoJCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQoK CXJldHVybiBpbXBsb2RlKCJcbiIsICRvdXQpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGll ZF9wbHVnaW5faGVscF92aWV3ZXIoJG1lc3NhZ2U9JycpIHsKCWdsb2JhbCAkaWVkX3BsdWdp bl9nbG9iYWxzOwoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwkbWVzc2FnZSk7CgoJ aWYgKGdwcygnbmFtZScpKSB7CgkJJG5hbWUgPSBncHMoJ25hbWUnKTsKCQkkaGVscCA9ICgk bmFtZSkgPyBmZXRjaCgnaGVscCcsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsK CQlsaXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/IGllZF9wbHVnaW5fZXh0cmFjdF9odW5r KCRoZWxwLCAiQ1NTIiwgIjwhLS18LS0+IiwgdHJ1ZSkgOiBhcnJheSgnJywkaGVscCk7Cgl9 IGVsc2UgaWYgKGdwcygnZmlsZW5hbWUnKSkgewoJCSRwbHVnaW49aWVkX3BsdWdpbl9yZWFk X2ZpbGUoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy5ncHMoJ2Zp bGVuYW1lJykpOwoJCWV4dHJhY3QoJHBsdWdpbik7Cgl9CgllY2hvIHN0YXJ0VGFibGUoJ2Vk aXQnKTsKCWlmIChlbXB0eSgkaGVscCkpIHsKCQllY2hvIHRyKHRkYSgnPHA+SGVscCBub3Qg YWNjZXNzaWJsZSBmcm9tIHRoaXMgZmlsZS48L3A+JykpOwoJfSBlbHNlIHsKCQlsaXN0ICgk c3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NTIiwg JGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNb J2Nzc19lbmQnXSk7CgkJJHBsdWdpblsnaGVscCddID0gaWVkX3BsdWdpbl90ZXh0aWxlKCRo ZWxwLCAkY3NzLCAkc3RhcnRfY3NzLCAkZW5kX2Nzcyk7CgkJZWNobyB0cih0ZGEoICc8cD5F eHRyYWN0ZWQgJy4oIWVtcHR5KCRwbHVnaW5bJ2hlbHAnXSkgPyAnYW5kIFRleHRpbGUgcHJv Y2Vzc2VkJyA6ICcnKS4nIGhlbHAgc2VjdGlvbiBmb2xsb3dzJiM4MjMwOzwvcD48aHI+Jywg JyB3aWR0aD0iNjAwIicpKTsKCQllY2hvIHRyKHRkYSgkcGx1Z2luWydoZWxwJ10sICcgd2lk dGg9IjYwMCInKSk7Cgl9CgllY2hvIGVuZFRhYmxlKCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rp b24gaWVkX3BsdWdpbl9zZXR1cCgkbWVzc2FnZT0nJykgewoJZ2xvYmFsICRpZWRfcGx1Z2lu X3ByZWZzOwoJJG51bVJlcVByZWZzID0gY291bnQoJGllZF9wbHVnaW5fcHJlZnNbMF0pOwoK CXBhZ2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksJG1lc3NhZ2UpOwoJJHByZWZrZXlzID0g ZG9RdW90ZShpbXBsb2RlKCInLCciLGFycmF5X2tleXMoJGllZF9wbHVnaW5fcHJlZnNbMF0p KSk7CgkkcnMgPSBzYWZlX3Jvd3MoJ25hbWUsdmFsLGh0bWwnLCd0eHBfcHJlZnMnLCduYW1l IGluICgnLiRwcmVma2V5cy4nKScpOwoJJG51bVJvd3MgPSBjb3VudCgkcnMpOwoKCSRidG5T YXZlID0gZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnc2F2ZScpLCAncHVibGlz aCcpOwoJJGJ0bkluc3RhbGwgPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVu dD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fcHJlZnNfaW5zdGFs bCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcs IGdUeHQoJ2luc3RhbGwnKSwgJ3B1Ymxpc2gnKS4nPC9mb3JtPic7CgkkYnRuUmVtb3ZlID0g Jzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3Nl ciYjMzg7c3RlcD1pZWRfcGx1Z2luX3ByZWZzX3JlbW92ZSIgc3R5bGU9ImRpc3BsYXk6aW5s aW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2RlbGV0ZScpLCAncHVi bGlzaCcpLic8L2Zvcm0+JzsKCSRidG5TdHlsZSA9ICcgc3R5bGU9ImJvcmRlcjowO2hlaWdo dDoyNXB4Iic7CgoJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7CglpZiAoJG51bVJvd3MgPT0g JG51bVJlcVByZWZzKSB7CgkJLy8gUHJlZnMgYWxsIGluc3RhbGxlZAoJCWVjaG8gdHIodGRh KHN0cm9uZyhpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fcHJlZnNfdGl0bGUnKSksICcg Y29sc3Bhbj0iMiInKSAuIHRkYSgkYnRuUmVtb3ZlLCAkYnRuU3R5bGUpICk7CgkJZWNobyAn PGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2Vy JiMzODtzdGVwPWllZF9wbHVnaW5fcHJlZnNfdXBkYXRlIj4nOwoJCWZvciAoJGlkeCA9IDA7 ICRpZHggPCAkbnVtUm93czsgJGlkeCsrKSB7CgkJCSRhID0gJHJzWyRpZHhdOwoJCQkkbGFi ZWwgPSAnPGxhYmVsIGZvcj0iJy4kYVsnbmFtZSddLiciPicuaWVkX3BsdWdpbl9nVHh0KCRh WyduYW1lJ10pLic6PC9sYWJlbD4nOwoJCQkkb3V0ID0gdGRhKCRsYWJlbCwgJyBzdHlsZT0i dGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IicpOwoJCQlzd2l0 Y2goJGFbJ25hbWUnXSkgewoJCQkJY2FzZSAiaWVkX3BsdWdpbl9lZGl0b3JfcGF0aCI6CgkJ CQljYXNlICJpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3BhdGgiOgoJCQkJCSRvdXQgLj0gdGQo ZklucHV0KCd0ZXh0JywgJGFbJ25hbWUnXSwgJGFbJ3ZhbCddLCAnZWRpdCcsICcnLCAnJywg NTAsICcnLCAkYVsnbmFtZSddKSk7CgkJCQkJYnJlYWs7CgkJCQljYXNlICJpZWRfcGx1Z2lu X2VkaXRvciI6Ci8vCQkJCQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1lJ10sIGFy cmF5KCdub25lJyA9PiAnTm9uZScsICdlZGl0X2FyZWEnID0+ICdFZGl0IEFyZWEnLCAnY29k ZXByZXNzJyA9PiAnQ29kZVByZXNzJyksICRhWyd2YWwnXSwgJycsICcgb25jaGFuZ2U9Imll ZF9wbHVnaW5fcHJlZnN3YXAodGhpcy5pZCwgdGhpcy52YWx1ZSk7IicsICRhWyduYW1lJ10p KTsKCQkJCQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1lJ10sIGFycmF5KCdub25l JyA9PiAnTm9uZScsICdlZGl0X2FyZWEnID0+ICdFZGl0IEFyZWEnKSwgJGFbJ3ZhbCddLCAn JywgJyBvbmNoYW5nZT0iaWVkX3BsdWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZhbHVl KTsiJywgJGFbJ25hbWUnXSkpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiaWVkX3BsdWdpbl9o ZWxwX2VkaXRvciI6CgkJCQkJJG91dCAuPSB0ZChzZWxlY3RJbnB1dCgkYVsnbmFtZSddLCBh cnJheSgndGV4dGlsZScgPT4gJ05vbmUgKFRleHRpbGUpJywgJ3RpbnlfbWNlJyA9PiAnVGlu eSBNQ0UnKSwgJGFbJ3ZhbCddLCAnJywgJyBvbmNoYW5nZT0iaWVkX3BsdWdpbl9wcmVmc3dh cCh0aGlzLmlkLCB0aGlzLnZhbHVlKTsiJywgJGFbJ25hbWUnXSkpOwoJCQkJCWJyZWFrOwoJ CQkJY2FzZSAiaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXIiOgoJCQkJCSRvdXQgLj0gdGQocmFk aW8oJGFbJ25hbWUnXSwwLCgoJGFbJ3ZhbCddPT0wKT8xOjApKS5pZWRfcGx1Z2luX2dUeHQo J2llZF9wbHVnaW5fb3V0cHV0X2NvZGVfZmlyc3QnKS4iICIgLiByYWRpbygkYVsnbmFtZSdd LDEsKCgkYVsndmFsJ109PTEpPzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9v dXRwdXRfaGVscF9maXJzdCcpLiIgIik7CgkJCQkJYnJlYWs7CgkJCQljYXNlICJpZWRfcGx1 Z2luX2VkaXRvcl93aWR0aCI6CgkJCQkJJG91dCAuPSB0ZChmSW5wdXQoJ3RleHQnLCAkYVsn bmFtZSddLCAkYVsndmFsJ10sICdlZGl0JywgJycsICcnLCA1LCAnJywgJGFbJ25hbWUnXSkp OwoJCQkJCWJyZWFrOwoJCQl9CgkJCWVjaG8gdHIoJG91dCk7CgkJfQoJCWVjaG8gdHIodGRh KCRidG5TYXZlLCAkYnRuU3R5bGUpKTsKCQllY2hvICc8L2Zvcm0+JzsKCX0gZWxzZSBpZiAo JG51bVJvd3MgPiAwICYmICRudW1Sb3dzIDwgJG51bVJlcVByZWZzKSB7CgkJZWNobyB0cih0 ZGEoc3Ryb25nKGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9wcmVmc19zb21lJykpLmJy LmJyCgkJCQkJCS5pZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fcHJlZnNfc29tZV9leHBs YWluJykuYnIuYnIKCQkJCQkJLmllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9wcmVmc19z b21lX29wdGlvbnMnKSwgJyBjb2xzcGFuPSIyIicpKTsKCQllY2hvIHRyKHRkYSgkYnRuUmVt b3ZlLCRidG5TdHlsZSkgLiB0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkpOwoJfSBlbHNl IHsKCQllY2hvIHRyKHRkYShpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fcHJlZnNfbm90 X2luc3RhbGxlZCcpLCAnIGNvbHNwYW49IjIiJykpOwoJCWVjaG8gdHIodGRhKCRidG5JbnN0 YWxsLCAkYnRuU3R5bGUpKTsKCX0KCWVjaG8gZW5kVGFibGUoKTsKCgllY2hvIDw8PEVPRgo8 c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CnZhciBpZWRfcGx1Z2luX3BhdGhfcmUg PSBuZXcgUmVnRXhwKCJeLipbL1xcXSIsICJnIikKZnVuY3Rpb24gaWVkX3BsdWdpbl9wcmVm c3dhcChzZWxJRCwgc2VsVmFsdWUpIHsKCXZhciBpZCA9IHNlbElEKydfcGF0aCc7Cgl2YXIg bnV2YWwgPSAoKGJhc2VuYW1lKCQoIiMiK2lkKS52YWwoKSkgPT0gc2VsVmFsdWUpID8gJCgi IyIraWQpLnZhbCgpIDogZGlybmFtZSgkKCIjIitpZCkudmFsKCkpK3NlbFZhbHVlKTsKCWlm ICgkKCIjIitzZWxJRClbMF0uc2VsZWN0ZWRJbmRleCA9PSAwKSB7CgkJJCgiIyIraWQpLmF0 dHIoImRpc2FibGVkIiwgdHJ1ZSk7IDsKCX0gZWxzZSB7CgkJJCgiIyIraWQpLmF0dHIoImRp c2FibGVkIiwgZmFsc2UpOyA7CgkJJCgiIyIraWQpLnZhbChudXZhbCk7Cgl9Cn0KZnVuY3Rp b24gYmFzZW5hbWUocGF0aCwgc3VmZml4KSB7CglyZXR1cm4gcGF0aC5yZXBsYWNlKGllZF9w bHVnaW5fcGF0aF9yZSwgJycpOwp9CmZ1bmN0aW9uIGRpcm5hbWUocGF0aCkgewoJcmV0dXJu IHBhdGgubWF0Y2goaWVkX3BsdWdpbl9wYXRoX3JlKTsKfQokKGZ1bmN0aW9uKCkgewoJJCgi c2VsZWN0Lmxpc3QiKS5lYWNoKGZ1bmN0aW9uKCkgewoJCWllZF9wbHVnaW5fcHJlZnN3YXAo dGhpcy5pZCwgdGhpcy52YWx1ZSk7Cgl9KTsKfSk7Cjwvc2NyaXB0PgpFT0Y7Cn0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9wcmVmc19pbnN0YWxsKCkgewoJZ2xvYmFsICRp ZWRfcGx1Z2luX3ByZWZzOwoJJG1lc3NhZ2UgPSAnJzsKCWZvcmVhY2ggKCRpZWRfcGx1Z2lu X3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7CgkJaWYgKCFmZXRjaCgnbmFtZScsJ3R4 cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgewoJCQkkaWQgPSBzYWZlX2luc2VydCgndHhwX3By ZWZzJywncHJlZnNfaWQ9MSwgbmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpLicsIHZh bD0nLmRvUXVvdGUoZG9TbGFzaCgkZGZsdCkpLicsZXZlbnQ9ImllZF9wbHVnaW4iJyk7CgkJ fQoJfQoJJG1lc3NhZ2UgPSBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fcHJlZnNfaW5z dGFsbGVkJyk7CglpZWRfcGx1Z2luX3NldHVwKCRtZXNzYWdlKTsKfQoKLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpm dW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZzX3JlbW92ZSgpIHsKCWdsb2JhbCAkaWVkX3BsdWdp bl9wcmVmczsKCSRtZXNzYWdlID0gJyc7Cglmb3JlYWNoIChhcnJheV9tZXJnZSgkaWVkX3Bs dWdpbl9wcmVmc1swXSwkaWVkX3BsdWdpbl9wcmVmc1sxXSkgYXMgJHByZWYgPT4gJGRmbHQp IHsKCQlpZiAoZmV0Y2goJ25hbWUnLCd0eHBfcHJlZnMnLCduYW1lJywkcHJlZikpIHsKCQkJ JGlkID0gc2FmZV9kZWxldGUoJ3R4cF9wcmVmcycsJ25hbWU9Jy5kb1F1b3RlKGRvU2xhc2go JHByZWYpKSk7CgkJfQoJfQoJJG1lc3NhZ2UgPSBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVn aW5fcHJlZnNfZGVsZXRlZCcpOwoJaWVkX3BsdWdpbl9zZXR1cCgkbWVzc2FnZSk7Cn0KCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9wcmVmc191cGRhdGUoKSB7CglnbG9iYWwg JGllZF9wbHVnaW5fcHJlZnM7CgkkbWVzc2FnZSA9ICcnOwoJJHBvc3QgPSBkb1NsYXNoKHN0 cmlwUG9zdCgpKTsKCWZvcmVhY2ggKCRpZWRfcGx1Z2luX3ByZWZzWzBdIGFzICRwcmVmID0+ ICRkZmx0KSB7CgkJaWYgKGlzc2V0KCRwb3N0WyRwcmVmXSkpIHsKCQkJc2FmZV91cGRhdGUo InR4cF9wcmVmcyIsICJ2YWwgPSAnIi4kcG9zdFskcHJlZl0uIiciLCAibmFtZSA9ICciLmRv U2xhc2goJHByZWYpLiInIGFuZCBwcmVmc19pZCA9IDEiKTsKCQl9Cgl9CgkkbWVzc2FnZSA9 IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7CglpZWRfcGx1Z2luX3NldHVwKCRtZXNzYWdl KTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX2dUeHQoJHdoYXQsICRhdHRz ID0gYXJyYXkoKSkgewoJJGxhbmcgPSBhcnJheSgKCQknaWVkX3BsdWdpbl9jaGVja190eXBl JyA9PiAnQ2hlY2sgeW91ciBwbHVnaW4gdHlwZSEnLAoJCSdpZWRfcGx1Z2luX2NvZGVfZGlz dCcgPT4gJ1BsdWdpbiBjb2RlPGJyPmZvciBkaXN0cmlidXRpb24nLAoJCSdpZWRfcGx1Z2lu X2NvbXBvc2VyJyA9PiAnUGx1Z2luIENvbXBvc2VyJywKCQknaWVkX3BsdWdpbl9jb21wcmVz cycgPT4gJ1ppcCcsCgkJJ2llZF9wbHVnaW5fY3JlYXRlX25ldycgPT4gJ0NyZWF0ZSBuZXcg cGx1Z2luJywKCQknaWVkX3BsdWdpbl9lZGl0b3InID0+ICdQbHVnaW4gZWRpdG9yJywKCQkn aWVkX3BsdWdpbl9lZGl0b3JfcGF0aCcgPT4gJ1BsdWdpbiBlZGl0b3IgcGF0aCBVUkwnLAoJ CSdpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCcgPT4gJ1BsdWdpbiBlZGl0b3Igd2lkdGggKGNo YXJzKScsCgkJJ2llZF9wbHVnaW5fZW5hYmxlJyA9PiAnRW5hYmxlIHBsdWdpbicsCgkJJ2ll ZF9wbHVnaW5fZXhwb3J0JyA9PiAnRXhwb3J0IGFzJywKCQknaWVkX3BsdWdpbl9oZWxwX2Vk aXRvcicgPT4gJ0hlbHAgZWRpdG9yJywKCQknaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRo JyA9PiAnSGVscCBlZGl0b3IgcGF0aCBVUkwnLAoJCSdpZWRfcGx1Z2luX25hbWUnID0+ICdQ bHVnaW4gbmFtZScsCgkJJ2llZF9wbHVnaW5fbmFtZV9maXJzdCcgPT4gJ1lvdSBhcmUgc3Vw cG9zZWQgdG8gbmFtZSB0aGUgbmV3IHBsdWdpbiA7KScsCgkJJ2llZF9wbHVnaW5fbmFtZV90 b29sdGlwJyA9PiAnT25seSBuZWVkZWQgaWYgdGhlIFBIUCBmaWxlIHlvdSBhcmUgdXBsb2Fk aW5nIGlzIE5PVCBpbiB0aGUgc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0JywKCQknaWVkX3Bs dWdpbl9vdXRwdXRfY29kZV9maXJzdCcgPT4gJ0NvZGUgZmlyc3QnLAoJCSdpZWRfcGx1Z2lu X291dHB1dF9oZWxwX2ZpcnN0JyA9PiAnSGVscCBmaXJzdCcsCgkJJ2llZF9wbHVnaW5fb3V0 cHV0X29yZGVyJyA9PiAnUEhQIGV4cG9ydCBvcmRlcicsCgkJJ2llZF9wbHVnaW5fcHJlZnNf ZGVsZXRlZCcgPT4gJ1ByZWZlcmVuY2VzIGRlbGV0ZWQnLAoJCSdpZWRfcGx1Z2luX3ByZWZz X2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIGluc3RhbGxlZCcsCgkJJ2llZF9wbHVnaW5f cHJlZnNfbm90X2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIG5vdCBpbnN0YWxsZWQuJywK CQknaWVkX3BsdWdpbl9wcmVmc19zb21lJyA9PiAnTm90IGFsbCBwcmVmZXJlbmNlcyBhdmFp bGFibGUuJywKCQknaWVkX3BsdWdpbl9wcmVmc19zb21lX2V4cGxhaW4nID0+ICdJdCBpcyBl aXRoZXIgYmVjYXVzZSB0aGlzIGlzIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhlJy5ici4n cGx1Z2luIHRvIG9uZSB5b3UgaGFkIGJlZm9yZSBvciB0aGUgcHJlZmVyZW5jZXMnLmJyLido YXZlIGJlY29tZSBjb3JydXB0IHNvbWVob3cuJywKCQknaWVkX3BsdWdpbl9wcmVmc19zb21l X29wdGlvbnMnID0+ICdDaG9vc2UgJy5nVHh0KCdkZWxldGUnKS4nIHRvIHJlbW92ZSB0aGVt IGFsbCBvciAnLmdUeHQoJ2luc3RhbGwnKS4nIHRvIGFkZCcuYnIuJ2FueSBuZXcgb25lcywg bGVhdmluZyBhbGwgZXhpc3RpbmcgcHJlZmVyZW5jZXMgdW50b3VjaGVkLicsCgkJJ2llZF9w bHVnaW5fcHJlZnNfdGl0bGUnID0+ICdQbHVnaW4gQ29tcG9zZXIgcHJlZmVyZW5jZXMnLAoJ CSdpZWRfcGx1Z2luX3JlbmFtZV9mYWlsZWQnID0+ICcgKHJlbmFtZSBmYWlsZWQpLiAnLAoJ CSdpZWRfcGx1Z2luX3JlbmFtZV9maWxlJyA9PiAnUmVuYW1lIGZpbGUnLAoJCSdpZWRfcGx1 Z2luX3JlbmFtZWQnID0+ICcgYW5kIHJlbmFtZWQuICcsCgkJJ2llZF9wbHVnaW5fcnVuX2Zy b20nID0+ICdQbHVnaW5zIHRoYXQgcnVuIGZyb20nLAoJCSdpZWRfcGx1Z2luX3NhdmVfYXMn ID0+ICdTYXZlIGFzJywKCQknaWVkX3BsdWdpbl90eXBlJyA9PiAnUGx1Z2luIHR5cGUnLAoJ CSdpZWRfcGx1Z2luX3R5cGVfMCcgPT4gJ0NsaWVudCcsCgkJJ2llZF9wbHVnaW5fdHlwZV8x JyA9PiAnQWRtaW4nLAoJCSdpZWRfcGx1Z2luX3R5cGVfMicgPT4gJ0xpYnJhcnknLAoJCSdp ZWRfcGx1Z2luX3VwbG9hZF9waHAnID0+ICdVcGxvYWQgcGx1Z2luIGZyb20gUEhQIGZpbGUn LAoJCSdpZWRfcGx1Z2luX3V0aWxpdGllcycgPT4gJ1V0aWxpdGllcyAoPHN0cm9uZz51c2Ug b25seSBhZnRlciBzYXZpbmcgdGhlIGRhdGEgYWJvdmU8L3N0cm9uZz4pJywKCSk7CglyZXR1 cm4gc3RydHIoJGxhbmdbJHdoYXRdLCAkYXR0cyk7Cn0iO3M6MzoibWQ1IjtzOjMyOiJlMjRk NTlhYjQzYzk5YWU2ODFiMWU4NzllMzU3YzQyYiI7fQ==