# Name: ied_plugin_composer v0.73 # 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 b24iO3M6NDoiMC43MyI7czo4OiJyZXZpc2lvbiI7czowOiIiO3M6NjoiYXV0aG9yIjtzOjQz OiJZdXJhIExpbm55ayAvIFN0ZWYgRGF3c29uIC8gU3RldmUgRGlja2luc29uIjtzOjEwOiJh dXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRhd3Nvbi5jb20vIjtzOjExOiJkZXNjcmlw dGlvbiI7czozMjoiV3JpdGUgYW5kIHB1Ymxpc2ggcGx1Z2lucyBlYXNpbHkiO3M6NDoidHlw ZSI7czoxOiIxIjtzOjQ6ImhlbHAiO3M6MTI4NTM6Igk8cD48ZGl2IGlkPSJpZWRfaGVscCI+ 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+VFhQPC9zcGFuPiBBZG1pbiAtJiM2MjsgUGx1Z2lucyBwYWdlLCBpbnN0 YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi48L3A+CgoJPHA+VmlzaXQgdGhlIEV4dGVuc2lv bnMgLSYjNjI7IFBsdWdpbiBDb21wb3NlciB0YWIgYW5kIGNsaWNrIHRoZSBTZXR1cCBidXR0 b24gaW4gdGhlIHRvcC1yaWdodCBvZiB0aGUgc2NyZWVuLiBGcm9tIGhlcmUgeW91IGNhbiBJ bnN0YWxsLCBEZWxldGUgYW5kIFNhdmUgdGhlIHBsdWdpbiBwcmVmZXJlbmNlcy4gU2VlIHRo ZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5zZXR1cCBzZWN0aW9uPC9hPiBmb3IgZGV0YWlscy48 L3A+CgoJPHA+VG8gcmVtb3ZlIHRoZSBQbHVnaW4gQ29tcG9zZXIgKG5vb29vISkgdmlzaXQg dGhlIFNldHVwIHBhZ2UgYWdhaW4gZnJvbSB0aGUgUGx1Z2luIENvbXBvc2VyIHRhYiwgaGl0 IERlbGV0ZSB0byByZW1vdmUgdGhlIHByZWZlcmVuY2VzLCB0aGVuIHNpbXBseSBkZWxldGUg dGhlIHBsdWdpbiBhcyBub3JtYWwgZnJvbSB0aGUgQWRtaW4gLSYjNjI7IFBsdWdpbnMgcGFn ZS48L3A+CgoJPGgyIGlkPSJ1c2FnZSI+VXNhZ2U8L2gyPgoKCTxoMyBpZD0ibGlzdHBhZ2Ui Pkxpc3QgcGFnZTwvaDM+CgoJPHA+QWxsIGluc3RhbGxlZCBwbHVnaW5zIGFyZSBsaXN0ZWQg b24gdGhlIFBsdWdpbiBDb21wb3NlciBwYWdlLiBUaGV5IGNhbiBiZSBlbmFibGVkL2Rpc2Fi bGVkLCBkZWxldGVkLCBwdWJsaXNoZWQgb3IgZWRpdGVkIGZyb20gaGVyZS4gVGhlIGhlbHAg Y2FuIGFsc28gYmUgdmlld2VkIGZyb20gdGhpcyBwYWdlLCBvciB3aGlsZSBlZGl0aW5nIGEg cGx1Z2luIGJ5IHVzaW5nIHRoZSBsaW5rIG5leHQgdG8gdGhlIHRvcG1vc3QgU2F2ZSBidXR0 b24gb24gdGhlIDxhIGhyZWY9IiNlZGl0cGFnZSI+ZWRpdCBwYWdlPC9hPi48L3A+CgoJPHA+ SWYgeW91IGFyZSB1c2luZyB0aGUgcGx1Z2luX2NhY2hlX2RpciAoQWRtaW4gLSYjNjI7IEFk dmFuY2VkIFByZWZzKSwgYW55IHBsdWdpbnMgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVm ZGF3c29uLmNvbS9kb3dubG9hZHMvZXhhbXBsZV9wbHVnaW5fdGVtcGxhdGUudHh0Ij5zdGFu ZGFyZCB0ZW1wbGF0ZSBmb3JtYXQ8L2E+IHVwbG9hZGVkIHRvIHRoaXMgZGlyZWN0b3J5IHdp bGwgYmUgYXZhaWxhYmxlIGltbWVkaWF0ZWx5IGZvciBlZGl0aW5nIGFuZCB0ZXN0aW5nLiBJ biBhZGRpdGlvbiwgdGhlc2UgcGx1Z2lucyBiZW5lZml0IGZyb20gYmVpbmcgJiM4MjIwO2Fs d2F5cyBvbiYjODIyMTs7IG5vIG5lZWQgdG8gaW5zdGFsbCB0aGVtLjwvcD4KCgk8cD5UaGVy ZSBhcmUgdHdvIHdheXMgb2YgY3JlYXRpbmcgcGx1Z2lucyBmcm9tIHRoZSBQbHVnaW4gQ29t cG9zZXIgbGlzdCBwYWdlLiBUaGUgZmlyc3QgaXMgdG8gY3JlYXRlIGEgYmxhbmssIGVtcHR5 IHBsdWdpbi4gVXNlIHRoZSB0ZXh0IGJveCBhdCB0aGUgdG9wIGZvciB0aGlzLiBUaGUgc2Vj b25kIGlzIHRvIHVwbG9hZCBvbmUgdXNpbmcgdGhlIEJyb3dzZS91cGxvYWQgYm94IGF0IHRo ZSBib3R0b20uIFlvdSBjYW4gdXBsb2FkIGNvZGUgaW4gZWl0aGVyIHN0YW5kYXJkIHBsdWdp biB0ZW1wbGF0ZSBmb3JtYXQgKGVpdGhlciBjb2RlLWZpcnN0IG9yIGhlbHAtZmlyc3QsIGNv bXBsZXRlIHdpdGggPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gYXJlYXMpIG9yIHNp bXBseSB1cGxvYWQgYSA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlIGNvbnRh aW5pbmcgY29kZSBvbmx5LiA8ZW0+Tm90ZSB0aGlzIGlzIHRoZSBvbmx5IHBsYWNlIHlvdSBj YW4gdXBsb2FkIHJhdyA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBjb21wbGV0ZSB3 aXRoIHRoZSA8Y29kZT4mIzYwOz9waHAgPyYjNjI7PC9jb2RlPiBtYXJrZXJzLiBFdmVyeXdo ZXJlIGVsc2UgeW91IHNob3VsZCB1c2UgYSBmdWxsIHRlbXBsYXRlLjwvZW0+PC9wPgoKCTxo MyBpZD0iZWRpdHBhZ2UiPkVkaXQgcGFnZTwvaDM+CgoJPHA+T24gdGhlIEVkaXQgcGFnZSwg Y29kZSBnb2VzIGluIHRoZSAmIzgyMTY7UGx1Z2luJiM4MjE3OyBib3gsIGhlbHAgZ29lcyBp biB0aGUgJiM4MjE2O1BsdWdpbiBoZWxwJiM4MjE3OyBib3gsIHN0eWxpbmcgZ29lcyBpbiB0 aGUgJiM4MjE2O1N0eWxlJiM4MjE3OyBib3ghIFN0eWxlcyBhcmUgPGVtPm5vdDwvZW0+IHBh c3NlZCB0aHJvdWdoIHRoZSBUZXh0aWxlIG1hbmdsZSBhbmQgaWYgeW91IGZvcmdldCAob3Ig ZG9uJiM4MjE3O3QgYWRkKSB0aGUgPGNvZGU+JiM2MDtzdHlsZSYjNjI7PC9jb2RlPiB0YWdz LCB0aGUgQ29tcG9zZXIgd2lsbCBhZGQgdGhlbSBmb3IgeW91LiBUaGUgcGx1Z2luIGNvZGUg Ym94IGlzIHZlcnRpY2FsbHkgcmVzaXphYmxlOyBncmFiIHRoZSBtYXJrZXIgYmVuZWF0aCB0 aGUgYm94IGFuZCBkcmFnIHRvIHNldC4gVGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgcmV0YWlu ZWQgYXMgYSBjb29raWUgKGV4cGlyZXMgMzAgZGF5cyBhZnRlciBsYXN0IHJlc2l6ZSkgc28g dGhlIGJveCB3aWxsIGFsd2F5cyByZXNpemUgd2hlbiB0aGUgZWRpdCBwYWdlIGlzIGRpc3Bs YXllZC4gTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCB3aGVuIHVzaW5nIEVk aXQgQXJlYSAoc2VlIHRoZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5zZXR1cCBwYWdlPC9hPiku PC9wPgoKCTxwPkZpbGwgaW4gdGhlIG90aGVyIGZpZWxkcyB3aXRoIHJlbGV2YW50IGRldGFp bHMgYWJvdXQgeW91cnNlbGYgYW5kIHlvdXIgcGx1Z2luIGFuZCB5b3UmIzgyMTc7cmUgZ29v ZCB0byBnby4gQ2hvb3NlIGZyb20gZWl0aGVyIENsaWVudC1zaWRlIG9ubHksIEFkbWluLXNp ZGUgKHdoaWNoIGluY2x1ZGVzIGNsaWVudCBzaWRlIGJ5IGRlZmF1bHQpIG9yIExpYnJhcnkg cGx1Z2luIHR5cGVzLiBBIHdhcm5pbmcgaXMgaXNzdWVkIGlmIHlvdSBzYXZlIGEgQ2xpZW50 IHBsdWdpbiB0aGF0IHVzZXMgQWRtaW4tc2lkZSBjb2RlICh0aGFua3MgbmV0LWNhcnZlciku PC9wPgoKCTxwPkhpdCBTYXZlIHRvIHN0b3JlIHlvdXIgcGx1Z2luLiBPbmNlIHlvdSYjODIx NztyZSBoYXBweSB3aXRoIGl0LCBzY3JvbGwgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZWRpdCBw YWdlIGFuZCBjaG9vc2UgaG93IHRvIGV4cG9ydCBpdC4gVGhlIGZpcnN0IGxpbmsgaXMgZm9y IHN0YW5kYXJkIHBsdWdpbnMgd2hpY2ggYXJlIGRpc3RyaWJ1dGVkIHRvIGFsbCB1c2Vyczsg dGhlIHNlY29uZCBpcyBmb3IgY29tcHJlc3NlZCBwbHVnaW5zICYjODIxMjsgdXNlIHRoaXMg aWYgeW91ciBwbHVnaW5zIGFyZSBsYXJnZSwgb3Igc2ltcGx5IGFzIGFuIGFsdGVybmF0aXZl IGZvcm1hdC4gQm90aCB0aGVzZSBvcHRpb25zIGNvbnZlcnQgdGhlIGhlbHAgdG8gPHNwYW4g Y2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+LiBUaGUgdGhpcmQgbGluaywgaG93ZXZlciwgZG9l cyBub3QgYW5kIGlzIHVzZWQgdG8gZXhwb3J0IHRoZSBwbHVnaW4gYmFjayBvdXQgaW4gdGhl IHN0YW5kYXJkIHRlbXBsYXRlIGZvcm1hdCB0byBwZXJoYXBzIGdpdmUgdG8gYW5vdGhlciBk ZXZlbG9wZXIgZGlyZWN0bHksIG9yIHRvIHJldGFpbiB0aGUgVGV4dGlsZSBtYXJrdXAgZm9y IGZ1dHVyZSB1cGRhdGVzLjwvcD4KCgk8cD5bIE5vdGUgdGhhdCB3aGVuIGV4cG9ydGluZyBh cyBhIHN0YW5kYXJkIHBsdWdpbiwgdGhlIFRleHRpbGUgcHJvY2Vzc29yIGF0dGVtcHRzIHRv IGRlY2lkZSBpZiB5b3UgaGF2ZSB1c2VkIFRleHRpbGUgb3Igbm90IChpdCBzaW1wbHkgbG9v a3MgZm9yIGEgdGV4dGlsZWQgJiM4MjE2O2gxJiM4MjE3OykuIFJ1bm5pbmcgcHVyZSA8c3Bh biBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gdGhyb3VnaCB0ZXh0aWxlIG1heSBvY2Nhc2lv bmFsbHkgY2F1c2UgZW5jb2RpbmcgaXNzdWVzIGRlcGVuZGluZyBvbiB0aGUgb3JpZ2luYWwg Y2hhcmFjdGVyIHNldCB1c2VkICYjODIxMjsgaGF2ZW4mIzgyMTc7dCB0cmFja2VkIGRvd24g dGhlIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggaXQgaGFwcGVucyB5ZXQgXTwvcD4KCgk8 cD5Zb3UgY2FuIGFsc28gZXhwb3J0IHBsdWdpbnMgZnJvbSB0aGUgbWFpbiBQbHVnaW4gQ29t cG9zZXIgbGlzdCBwYWdlLiBUaGUgUHVibGlzaCBjb2x1bW4gaGFzIHR3byBlbnRyaWVzIGlu IGl0OiAmIzgyMTY7cHVibGlzaCYjODIxNzsgdG8gcHJvZHVjZSBhIHN0YW5kYXJkIHBsdWdp bjsgb3IgJiM4MjE2O3ppcCYjODIxNzsgdG8gZ2VuZXJhdGUgYSBjb21wcmVzc2VkIHZlcnNp b24uPC9wPgoKCTxoMyBpZD0ic2V0dXBwYWdlIj5TZXR1cCBwYWdlPC9oMz4KCgk8cD5DbGlj a2luZyBTZXR1cCBmcm9tIHRoZSBtYWluIGxpc3Qgc2NyZWVuIGFsbG93cyBhY2Nlc3MgdG8g dGhlIHBsdWdpbiBwcmVmZXJlbmNlcy48L3A+CgoJPHA+WW91IGNhbiBJbnN0YWxsIHRoZW0g JiM4MjEyOyB3aGljaCByZXRhaW5zIGFueSBwcmV2aW91cyBzZXR0aW5ncyBhbmQgYWRkcyBu ZXcgb25lcyB3aGVuIHVwZGF0aW5nIHRoZSBwbHVnaW4gJiM4MjEyOyBvciBEZWxldGUgdGhl bS4gVGhlIHBsdWdpbiBjaGVja3MgaWYgYWxsIHJlcXVpcmVkIHByZWZlcmVuY2VzIGFyZSBh dmFpbGFibGUgYW5kIG9mZmVycyB5b3UgdGhlIGNob2ljZSBvZiBkZWxldGluZy9yZWluc3Rh bGxpbmcgaW4gY2FzZSB0aGUgcHJlZnMgYmVjb21lIGNvcnJ1cHRlZCBvciBuZWVkIHVwZGF0 aW5nLjwvcD4KCgk8cD5PbmNlIHRoZSBwcmVmcyBhcmUgaW5zdGFsbGVkIHlvdSB3aWxsIHNl ZSB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIFRoZSB3aWR0aCBvZiB0aGUgdGV4dGFyZWFzIG9u IHRoZSA8YSBocmVmPSIjZWRpdHBhZ2UiPmVkaXQgcGFnZTwvYT4gYXJlIGN1c3RvbWlzYWJs ZSB0byBhY2NvbW1vZGF0ZSB5b3VyIHNjcmVlbiByZXNvbHV0aW9uLiBFbnRlciBhIG51bWJl ciB0byBzZXQgdGhlIHdpZHRoIGluIGNoYXJhY3RlcnMgb2YgdGhlIGVkaXQgYm94ZXMuPC9w PgoKCTxwPllvdSBtYXkgY2hvb3NlIHRvIGVkaXQgdGhlIGNvZGUgdXNpbmcgYSAzcmQgcGFy dHkgY29kZSBzeW50YXggaGlnaGxpZ2h0ZXIuIEN1cnJlbnQgc3VwcG9ydCBpcyBmb3IgRWRp dCBBcmVhIGFuZCAoc29ydCBvZikgQ29kZVByZXNzICYjODIxMjsgc2VlIHRoZSA8YSBocmVm PSIjbm90ZXMiPm5vdGVzPC9hPi48L3A+CgoJPHA+SWYgeW91IHdpc2ggdG8gdGFrZSBhZHZh bnRhZ2Ugb2YgRWRpdCBBcmVhLCBncmFiIGl0IGZyb20gc291cmNlZm9yZ2UsIGluc3RhbGwg aXQsIHNlbGVjdCAmIzgyMTY7RWRpdCBBcmVhJiM4MjE3OyBmcm9tIHRoZSBkcm9wZG93biBv biB0aGUgUGx1Z2luIENvbXBvc2VyJiM4MjE3O3MgU2V0dXAgcGFnZSBhbmQgZ2l2ZSB0aGUg PHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gcGF0aCB0byB0aGUgaW5zdGFsbGF0aW9u IG9uIHlvdXIgc2VydmVyOyB0aGlzIGlzIG5vcm1hbGx5IGV2ZXJ5dGhpbmcgdXAgdG8gYW5k IGluY2x1ZGluZyAvZWRpdF9hcmVhLiBObyB0cmFpbGluZyBzbGFzaCBpcyByZXF1aXJlZC4g U2ltaWxhcmx5IGZvciBDb2RlUHJlc3MuPC9wPgoKCTxwPkZvciB0aGUgaGVscCBzeXN0ZW0g eW91IGNhbiB1c2UgVGV4dGlsZSB0YWdzIChyZWNvbW1lbmRlZCkgb3IgY2hvb3NlIFRpbnlN Q0UuIDxlbT5Ob3RlIHRoYXQgVGlueU1DRSBpcyBub3QgZnVsbHkgaW50ZWdyYXRlZCB5ZXQg c28gPHNwYW4gY2xhc3M9ImNhcHMiPllNTVY8L3NwYW4+PC9lbT4uPC9wPgoKCTxoMyBpZD0i bm90ZXMiPk5vdGVzPC9oMz4KCgk8cD5Nb3JlIGVkaXRvcnMgY2FuIGJlIGludGVncmF0ZWQg aW50byB0aGUgQ29tcG9zZXIgZmFpcmx5IGVhc2lseS4gSWYgeW91IGZpbmQgYSBnb29kIG9u ZSwgZ2V0IGluIGNvbnRhY3QuIEJlIHdhcm5lZCB0aGF0IHRoZSBlZGl0b3JzIGRvIHRlbmQg dG8gc2xvdyB0aGUgcGx1Z2luIGRvd24sIGVzcGVjaWFsbHkgYXMgY29kZSBzaXplIGluY3Jl YXNlcy48L3A+CgoJPHA+VGVudGF0aXZlIHN1cHBvcnQgZm9yIENvZGVQcmVzcyBpcyBhbHJl YWR5IGluIHRoZXJlIGJ1dCBJIGZvdW5kIGl0IGluZXhwbGljYWJseSBibGFua2VkIG91dCB0 aGUgcGx1Z2luIGNvZGUgd2hlbiBpdCB3YXMgc2F2ZWQgc28gSSYjODIxNzt2ZSBjb21tZW50 ZWQgb3V0IHN1cHBvcnQgZm9yIG5vdy4gSWYgYW55b25lIGNhbiBzaGVkIGFueSBsaWdodCBv biB3aHkgaXQgZG9lcyB0aGlzLCBwbGVhc2Ugc3BlYWsgdXAhIFVuY29tbWVudCB0aGUgY29k ZSBvbiBsaW5lIDg0OCBhbmQgY29tbWVudCBvdXQgbGluZSA4NDkgdG8gZW5hYmxlIHN1cHBv cnQsIHRoZW4gdmlzaXQgdGhlIFNldHVwIHBhZ2UgYW5kIHNlbGVjdCBDb2RlUHJlc3MgZnJv bSB0aGUgbGlzdC4gRG9uJiM4MjE3O3QgZXhwZXJpbWVudCB3aXRoIHRoaXMgc2V0dGluZyBv biBhbiBpbXBvcnRhbnQgcGx1Z2luIDotKTwvcD4KCgk8aDMgaWQ9ImNoYW5nZWxvZyI+Q2hh bmdlbG9nPC9oMz4KCgk8dWw+CgkJPGxpPjI1IEZlYiAwNiB8IDAuMSB8IEluaXRpYWwgcmVs ZWFzZTwvbGk+CgkJPGxpPjI1IEZlYiAwNiB8IDAuMiB8IEFkZGVkICYjODIxNjtzYXZlIGFz JiM4MjE3OyBvcHRpb248L2xpPgoJCTxsaT4xNyBNYXIgMDYgfCAwLjMgfCBBZGRlZCAmIzgy MTY7c2F2ZSBhcyBwaHAmIzgyMTc7PC9saT4KCQk8bGk+MTAgQXByIDA2IHwgMC40IHwgQWRk ZWQgc3VwcG9ydCBmb3IgcGx1Z2luX2NhY2hlX2RpcjwvbGk+CgkJPGxpPjA0IEphbiAwOCB8 IDAuNSB8IEZ1bGwgc3VwcG9ydCBmb3Igc3RkIHRlbXBsYXRlOyBjb21wcmVzc2VkIHBsdWdp bnM7IExpYnJhcnkgcGx1Z2luczsgVGV4dGlsZSBoZWxwIGFuZCBzdHlsaW5nOyBpbnRlZ3Jh dGlvbiB3aXRoIG5ldC1jYXJ2ZXImIzgyMTc7cyBQbHVnaW4gSGVscCBWaWV3ZXI8L2xpPgoJ CTxsaT4wNyBKYW4gMDggfCAwLjYgfCBCdWlsdC1pbiBoZWxwIHZpZXdlciAodGhhbmtzIG5l dC1jYXJ2ZXIpOyBzdXBwb3J0IGZvciBFZGl0IEFyZWEgJiMzODsgQ29kZVByZXNzKGlzaCkg KHRoYW5rcyB2YXJpYWFzKTsgSGVscCBibG9jay9Db2RlIGJsb2NrIHBvc2l0aW9uIHN3aXRj aGFibGUgb24gZXhwb3J0OyBhZGRlZCBTZXR1cCBwcmVmcyBwYWdlOyBsaW5lIGJyZWFrL3N0 eWxlIGJ1Z2ZpeGVzPC9saT4KCQk8bGk+MDggSmFuIDA4IHwgMC43IHwgUmUtaW1wb3J0aW5n IHBsdWdpbnMgbm93IHJldGFpbnMgc3R5bGUgYmxvY2s7IGFkZGVkICYjODIxNjthZG1pbiBz aWRlIHBsdWdpbiB3aXRoIGNsaWVudC1zaWRlIHR5cGUmIzgyMTc7IHdhcm5pbmc7IGNoYW5n ZWQgYnV0dG9uIHN0eWxpbmcgYW5kIHBvc2l0aW9ucyAoYWxsIHRoYW5rcyBuZXQtY2FydmVy KTsgZ1R4dCgpIHByZWYgbGFiZWxzIGFuZCAmIzgyMTY7aW50ZWxsaWdlbnQmIzgyMTc7IHBy ZWZzIChnbyBqUXVlcnkgZ28hKTsgY2FjaGVkIHBsdWdpbnMgbm93IGFsc28gaGF2ZSBkaXJl Y3QgZXhwb3J0IGZyb20gRWRpdCBwYWdlOyAmIzgyMTY7ZG9uJiM4MjE3O3QgdGV4dGlsZSA8 c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4mIzgyMTc7IGNoZWNrOyBtaW5vciBidWdm aXhlczwvbGk+CgkJPGxpPjA5IEphbiAwOCB8IDAuNzEgfCBUZXh0YXJlYSB3aWR0aCBjYW4g bm93IGJlIGNvbnRyb2xsZWQgZnJvbSBwcmVmcywgYW5kIGhlaWdodCBmcm9tIGEgZHJhZyBi YXI7IGRlZmF1bHQgd2lkdGggaW5jcmVhc2VkIHRvIDExMCBjaGFyczsgcHVibGlzaCBwbHVn aW5zIGZyb20gdGhlIGxpc3QgcGFnZTsgSW5zdGFsbCBidXR0b24gcmVtb3ZlZCB3aGVuIHBy ZWZzIGFsbCBjb3JyZWN0bHkgaW5zdGFsbGVkIChhbGwgdGhhbmtzIHZhcmlhYXMgLyBpYmxh c3RvZmYpPC9saT4KCQk8bGk+MTAgSmFuIDA4IHwgMC43MiB8IEZpeGVkIGJ1ZyBpZiBwbHVn aW4gaGFzIG5vIGhlbHA7IHN0eWxlIHNlY3Rpb24gbm8gbG9uZ2VyIHN0b3JlZC9leHBvcnRl ZCBpZiBpdCYjODIxNztzIG5vdCBpbiB1c2UgKHRoYW5rcyB0aGVfZ2hvc3QgLyBpYmxhc3Rv ZmYpPC9saT4KCQk8bGk+MTEgSmFuIDA4IHwgMC43MyB8IEFkZGVkIHN1cHBvcnQgZm9yIDxl bT5yZWFkaW5nPC9lbT4gYW4gb3B0aW9uYWwgcmV2aXNpb24gZnJvbSB0aGUgdGVtcGxhdGUg cGFyc2VyIGFuZCBhcHBlbmRpbmcgaXQgdG8gdGhlIHZlcnNpb24gKHRoYW5rcyBuZXQtY2Fy dmVyKTsgbW9yZSBnVHh0KCkgc3RyaW5ncyBjb252ZXJ0ZWQ8L2xpPgoJPC91bD4KCgk8aDIg aWQ9IndyaXRpbmciPldyaXRpbmcgYSBwbHVnaW48L2gyPgoKCTxwPllvdSBzaG91bGQgYmUg YXdhcmUgb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmll d3RvcGljLnBocD9pZD05ODgxIj5QbHVnaW4gQXV0aG9yIFJlc291cmNlczwvYT4gdG9waWMg b24gdGhlIFRleHRwYXR0ZXJuIFN1cHBvcnQgRm9ydW0sIGFuZCB5b3UgbWlnaHQgYWxzbyB3 YW50IHRvIGhhdmUgYSBsb29rIGF0IHRoZSA8YSBocmVmPSJodHRwOi8vaW5zcGlyZWQua2ll di51YS90eHAtcGx1Z2luLWNoZWF0c2hlZXQiPlRleHRQYXR0ZXJuIHBsdWdpbiBjaGVhdCBz aGVldDwvYT4uPC9wPgoKCTxwPkhhcHB5IHBsdWdpbiBhdXRob3JpbmcgOi0pPC9wPgoKCTxw PjwvZGl2PjwvcD4KPCEtLSAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0gLS0+CjxzdHlsZSB0 eXBlPSJ0ZXh0L2NzcyI+CiNpZWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojaWVkX2hl bHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBO ZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQoj aWVkX2hlbHAgY29kZS5zZWRfY29kZV90YWcgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRl cjoxcHggZG90dGVkICM5OTk7IGJhY2tncm91bmQtY29sb3I6ICNmMGU2OGM7IGRpc3BsYXk6 YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFkZGluZzoxMHB4OyB9CiNpZWRfaGVs cCBhOmxpbmssICNpZWRfaGVscCBhOnZpc2l0ZWQgeyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNv cmF0aW9uOiBub25lOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmx1ZTsgcGFkZGluZy1i b3R0b206MXB4O30KI2llZF9oZWxwIGE6aG92ZXIsICNpZWRfaGVscCBhOmFjdGl2ZSB7IGNv bG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDJweCBz b2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQojaWVkX2hlbHAgaDEgeyBjb2xvcjog IzM2OTsgZm9udDogMjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQt YWxpZ246IGNlbnRlcjsgfQojaWVkX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29s aWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGNvbG9yOiAjMzY5OyBmb250OiAxN3B4IEdl b3JnaWEsIHNhbnMtc2VyaWY7IH0KI2llZF9oZWxwIGgzIHsgY29sb3I6ICMxMDgwMzA7IGZv bnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsg bWFyZ2luOiAxNXB4IDAgMDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO30KPC9zdHlsZT4K PCEtLSAtLS0gRU5EIFBMVUdJTiBDU1MgLS0tIC0tPgoiO3M6MzoiY3NzIjtzOjkyNToiPHN0 eWxlIHR5cGU9InRleHQvY3NzIj4KI2llZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNp ZWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3Vy aWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZD Qzt9CiNpZWRfaGVscCBjb2RlLnNlZF9jb2RlX3RhZyB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsg Ym9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlz cGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI2ll ZF9oZWxwIGE6bGluaywgI2llZF9oZWxwIGE6dmlzaXRlZCB7IGNvbG9yOiBibHVlOyB0ZXh0 LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibHVlOyBwYWRk aW5nLWJvdHRvbToxcHg7fQojaWVkX2hlbHAgYTpob3ZlciwgI2llZF9oZWxwIGE6YWN0aXZl IHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTog MnB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNpZWRfaGVscCBoMSB7IGNv bG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsg dGV4dC1hbGlnbjogY2VudGVyOyB9CiNpZWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFw eCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgY29sb3I6ICMzNjk7IGZvbnQ6IDE3 cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojaWVkX2hlbHAgaDMgeyBjb2xvcjogIzEwODAz MDsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzog MXB4OyBtYXJnaW46IDE1cHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7fQo8L3N0 eWxlPiI7czo0OiJjb2RlIjtzOjM5ODE3OiJpZihAdHhwaW50ZXJmYWNlID09ICdhZG1pbicp IHsKCWFkZF9wcml2cygnaWVkX3BsdWdpbl9jb21wb3NlcicsJzEsMicpOwoJcmVnaXN0ZXJf dGFiKCdleHRlbnNpb25zJywgJ2llZF9wbHVnaW5fY29tcG9zZXInLCBpZWRfcGx1Z2luX2dU eHQoJ2llZF9wbHVnaW5fY29tcG9zZXInKSk7CglyZWdpc3Rlcl9jYWxsYmFjaygnaWVkX3Bs dWdpbl9jb21wb3NlcicsICdpZWRfcGx1Z2luX2NvbXBvc2VyJyk7CglnbG9iYWwgJGllZF9w bHVnaW5fY29tcG9zZXIsICRpZWRfcGx1Z2luX3ByZWZzLCAkaWVkX3BsdWdpbl9nbG9iYWxz OwoJJGllZF9wbHVnaW5fZ2xvYmFscyA9IGFycmF5KAoJCSdjc3Nfc3RhcnQnID0+ICc8IS0t JywKCQknY3NzX2VuZCcgPT4gJy0tPicsCgkJJ2RsbV9zdGFydCcgPT4gJyMnLAoJCSdkbG1f ZW5kJyA9PiAnJywKCQknc3RhcnQnID0+ICcgLS0tIEJFR0lOIFBMVUdJTiBTRUNUSU9OIC0t LScsCgkJJ2VuZCcgPT4gJyAtLS0gRU5EIFBMVUdJTiBTRUNUSU9OIC0tLScsCgkpOwoJLy8g RG91YmxlIGFycmF5OiAxc3QgaXMgYSBsaXN0IG9mIGN1cnJlbnQgcHJlZnMgYW5kIHRoZWly IGRlZmF1bHRzLAoJLy8gMm5kIGlzIGEgbGlzdCBvZiBsZWdhY3kgcHJlZnMgdGhhdCBtYXkg bmVlZCByZW1vdmluZyBpbiBmdXR1cmUgKGRlZmF1bHRzIGFsbCBzZXQgZW1wdHkpCgkkaWVk X3BsdWdpbl9wcmVmcyA9IGFycmF5KAoJCWFycmF5KAoJCQknaWVkX3BsdWdpbl9lZGl0b3In ID0+ICdub25lJywKCQkJJ2llZF9wbHVnaW5fZWRpdG9yX3BhdGgnID0+IGh1LidqcycuRFMs CgkJCSdpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCcgPT4gJzExMCcsCgkJCSdpZWRfcGx1Z2lu X2hlbHBfZWRpdG9yJyA9PiAndGV4dGlsZScsCgkJCSdpZWRfcGx1Z2luX2hlbHBfZWRpdG9y X3BhdGgnID0+IGh1LidqcycuRFMsCgkJCSdpZWRfcGx1Z2luX291dHB1dF9vcmRlcicgPT4g JzAnLAoJCSksCgkJYXJyYXkoCgkJCSdpZWRfcGx1Z2luX25vdF91c2VkX2FueV9tb3JlX3Rl c3RlcicgPT4gJycsCgkJKQoJKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2lu X2NvbXBvc2VyICgkZXZlbnQsICRzdGVwKSB7CglpZighJHN0ZXAgb3IgIWluX2FycmF5KCRz dGVwLCBhcnJheSgnaWVkX3BsdWdpbl9kZWxldGUnLAoJCQknaWVkX3BsdWdpbl9lZGl0JywK CQkJJ2llZF9wbHVnaW5faGVscCcsCgkJCSdpZWRfcGx1Z2luX2xpc3QnLAoJCQknaWVkX3Bs dWdpbl9pbnN0YWxsJywKCQkJJ2llZF9wbHVnaW5fc2F2ZScsCgkJCSdpZWRfcGx1Z2luX3Nh dmVfZmlsZScsCgkJCSdpZWRfcGx1Z2luX3ZlcmlmeScsCgkJCSdpZWRfc3dpdGNoX3N0YXR1 cycsCgkJCSdpZWRfcGx1Z2luX3NldHVwJywKCQkJJ2llZF9wbHVnaW5fcHJlZnNfaW5zdGFs bCcsCgkJCSdpZWRfcGx1Z2luX3ByZWZzX3JlbW92ZScsCgkJCSdpZWRfcGx1Z2luX3ByZWZz X3VwZGF0ZScsCgkJCSdpZWRfcGx1Z2luX2NyZWF0ZV9uZXcnLAoJCQknaWVkX3BsdWdpbl9z YXZlX2FzX2ZpbGUnLAoJCQknaWVkX3BsdWdpbl9zYXZlX2FzX3BocF9maWxlJywKCQkJJ2ll ZF9wbHVnaW5fdXBsb2FkJywKCQkJJ2llZF9wbHVnaW5faGVscF92aWV3ZXInLAoJCSkpKSB7 CgkJaWVkX3BsdWdpbl9saXN0KCk7Cgl9IGVsc2UgJHN0ZXAoKTsKfQoKLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpm dW5jdGlvbiBpZWRfcGx1Z2luX2xpc3QoJG1lc3NhZ2U9JycpIHsKCXBhZ2V0b3AoZ1R4dCgn ZWRpdF9wbHVnaW5zJyksJG1lc3NhZ2UpOwoJZWNobyBzdGFydFRhYmxlKCdsaXN0JykuCnRy KHRkYSgKZm9ybSgKZklucHV0KCd0ZXh0JywnbmFtZScsJycsJycsJycsJycsJzMwJywnMCcp Ci4gZklucHV0KCdzdWJtaXQnLCdzdWJtaXQnLGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdp bl9jcmVhdGVfbmV3JyksJ3NtYWxsZXJib3gnKQouIHNJbnB1dCgnaWVkX3BsdWdpbl9jcmVh dGVfbmV3JykKLiBlSW5wdXQoJ2llZF9wbHVnaW5fY29tcG9zZXInKQopCiwnIGNvbHNwYW49 IjYiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweCInKQoudGRhKGZvcm0oZklucHV0KCdz dWJtaXQnLCAnc3VibWl0JywgJ1NldHVwJywgJ3B1Ymxpc2gnKS5zSW5wdXQoJ2llZF9wbHVn aW5fc2V0dXAnKS5lSW5wdXQoJ2llZF9wbHVnaW5fY29tcG9zZXInKSksJyBjb2xzcGFuPSI2 IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHgiJykpLgphc3NIZWFkKCdwbHVnaW4nLCdh dXRob3InLCd2ZXJzaW9uJywnZGVzY3JpcHRpb24nLCdtYW5hZ2UnLCdwdWJsaXNoJywgJ2Fj dGl2ZScsJycpOwoKCSRycyA9IHNhZmVfcm93c19zdGFydCgiKiIsInR4cF9wbHVnaW4iLCAi MT0xIG9yZGVyIGJ5IG5hbWUiKTsKCgl3aGlsZSAoJGEgPSBuZXh0Um93KCRycykpIHsKCQll eHRyYWN0KCRhKTsKCQkkZWxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29t cG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9lZGl0JiMzODtuYW1lPScuJG5hbWUuJyI+Jy5n VHh0KCdlZGl0JykuJzwvYT4nOwoJCSRobGluayA9ICgkaGVscCkgPyAnPGEgaHJlZj0iP2V2 ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9oZWxwX3ZpZXdl ciYjMzg7bmFtZT0nLiRuYW1lLiciPicuZ1R4dCgnaGVscCcpLic8L2E+JyA6ICdOb25lJzsK CQkkcHVidGFnID0gdGFnKGdUeHQoJ3B1Ymxpc2gnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVk X3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7 bmFtZT0nLiRuYW1lLiciIHRpdGxlPSInIC4gaWVkX3BsdWdpbl9nVHh0KCdpZWRfcGx1Z2lu X2V4cG9ydCcpIC4nICcuICRuYW1lLidfdicuJHZlcnNpb24uICcudHh0IicpOwoJCSRwdWJ6 dGFnID0gdGFnKGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9jb21wcmVzcycpLCdhJywn IGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5f c2F2ZV9hc19maWxlJiMzODtuYW1lPScuJG5hbWUuJyYjMzg7emlwPXRydWUiIHRpdGxlPSIn IC4gaWVkX3BsdWdpbl9nVHh0KCdpZWRfcGx1Z2luX2V4cG9ydCcpIC4nICcuICRuYW1lLidf dicuJHZlcnNpb24uICdfemlwLnR4dCInKTsKCgkJZWNobyB0cih0ZCgkbmFtZSkKLnRkKCc8 YSBocmVmPSInLiRhdXRob3JfdXJpLiciPicuJGF1dGhvci4nPC9hPicsMTYwKQoudGQoJHZl cnNpb24sMTApCi50ZCgkZGVzY3JpcHRpb24sMjYwKQoudGQoJGVsaW5rIC4nIHwgJy4gJGhs aW5rKQoudGQoJHB1YnRhZyAuJyB8ICcuICRwdWJ6dGFnKQoudGQoaWVkX3N0YXR1c19saW5r KCRzdGF0dXMsJG5hbWUseWVzX25vKCRzdGF0dXMpKSwzMCkKLnRkKGRMaW5rKCdpZWRfcGx1 Z2luX2NvbXBvc2VyJywnaWVkX3BsdWdpbl9kZWxldGUnLCduYW1lJywkbmFtZSksMzApCik7 CgkJdW5zZXQoJG5hbWUsJHBhZ2UsJGRlbGV0ZWxpbmspOwoJfQoKCWlmICghZW1wdHkoJEdM T0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXSkpIHsKCQkkZmlsZW5hbWVzID0g YXJyYXkoKTsKCQkkZGlyID0gZGlyKCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVf ZGlyJ10pOwoJCXdoaWxlICgkZmlsZSA9ICRkaXItPnJlYWQoKSkgewoJCQlpZigkZmlsZSAh PSAiLiIgJiYgJGZpbGUgIT0gIi4uIikgewoJCQkJJGZpbGVhZGRyID0gJEdMT0JBTFNbJ3By ZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy4kZmlsZTsKCQkJCWlmICghaXNfZGlyKCRm aWxlYWRkcikpIHsKCQkJCQkkZmlsZW5hbWVzW109JGZpbGU7CgkJCQl9CgkJCX0KCQl9CgkJ JGRpci0+Y2xvc2UoKTsKCQkoJGZpbGVuYW1lcyk/bmF0Y2FzZXNvcnQoJGZpbGVuYW1lcyk6 Jyc7CgkJZWNobyB0cigKCQl0ZGEoCgkJdGFnKGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdp bl9ydW5fZnJvbScpLicgJy50YWcoJ3BsdWdpbl9jYWNoZV9kaXInLCdhY3JvbnltJywnIHRp dGxlPSInLiRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10uJyIgc3R5bGU9 ImJvcmRlci1ib3R0b206MXB4IGRhc2hlZCBibGFjayInKS4nOicsJ2gxJykKCQksJyBjb2xz cGFuPSI4IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHg7dGV4dC1hbGlnbjpsZWZ0Iicp CgoJCSk7CgoJCWVjaG8gYXNzSGVhZCgncGx1Z2luJywnYXV0aG9yJywndmVyc2lvbicsJ2Rl c2NyaXB0aW9uJywnbWFuYWdlJywncHVibGlzaCcsJycsJycpOwoJCWZvcmVhY2goJGZpbGVu YW1lcyBhcyAkZmlsZW5hbWUpIHsKCQkJJGVsaW5rID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRf cGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fZWRpdCYjMzg7ZmlsZW5hbWU9 Jy4kZmlsZW5hbWUuJyI+Jy5nVHh0KCdlZGl0JykuJzwvYT4nOwoKCQkJJGZpbGVleHQ9IGFy cmF5X3BvcChleHBsb2RlICgnLicsJGZpbGVuYW1lKSk7CgkJCWlmICgkZmlsZWV4dD09J3Bo cCcpIHsKCQkJCSRiYXNlbmFtZT1iYXNlbmFtZSgkZmlsZW5hbWUpOwoJCQkJJHBsdWdpbiA9 IGllZF9wbHVnaW5fcmVhZF9maWxlKCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVf ZGlyJ10uRFMuJGZpbGVuYW1lKTsKCQkJCSRobGluayA9ICgkcGx1Z2luWydoZWxwJ10pID8g JzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVn aW5faGVscF92aWV3ZXImIzM4O2ZpbGVuYW1lPScuJGZpbGVuYW1lLiciPicuZ1R4dCgnaGVs cCcpLic8L2E+JyA6ICdOb25lJzsKCgkJCQllY2hvIHRyKAoJCQkJdGQoCgkJCQl0YWcoJGZp bGVuYW1lLCdkaXYnLCcgc3R5bGU9ImNvbG9yOmdyYXk7Ym9yZGVyOjBweCBzb2xpZCBncmF5 O3BhZGRpbmc6MXB4IDJweCAycHggMXB4OyInKQoJCQkJLihpc3NldCgkcGx1Z2luWyduYW1l J10pPyRwbHVnaW5bJ25hbWUnXS4nPGJyIC8+JzonJykuJyAnCgkJCQkpCgkJCQkudGQoCgkJ CQkoIGlzc2V0KCRwbHVnaW5bJ2F1dGhvcl91cmknXSk/JzxhIGhyZWY9IicuJHBsdWdpblsn YXV0aG9yX3VyaSddLiciPic6JycgKSAuCgkJCQkoIGlzc2V0KCRwbHVnaW5bJ2F1dGhvcidd KT8kcGx1Z2luWydhdXRob3InXTonJm5ic3A7JyApLgoJCQkJKCBpc3NldCgkcGx1Z2luWydh dXRob3JfdXJpJ10pPyc8L2E+JzonJyApLCAxNjAKCQkJCSkKCQkJCS50ZCgoaXNzZXQoJHBs dWdpblsndmVyc2lvbiddKT8kcGx1Z2luWyd2ZXJzaW9uJ106JyZuYnNwOycpLDEwKQoJCQkJ LnRkKChpc3NldCgkcGx1Z2luWydkZXNjcmlwdGlvbiddKT8kcGx1Z2luWydkZXNjcmlwdGlv biddOicmbmJzcDsnKSwyNjApCgkJCQkudGQoJGVsaW5rIC4nIHwgJy4gJGhsaW5rKQoJCQkJ LnRkKChpc3NldCgkcGx1Z2luWyduYW1lJ10pPwoJCQkJdGFnKGdUeHQoJ3B1Ymxpc2gnKSwn YScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1 Z2luX3NhdmVfYXNfZmlsZSYjMzg7ZmlsZW5hbWU9Jy4kZmlsZW5hbWUuJyIgdGl0bGU9Iicg LiBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fZXhwb3J0JykgLicgJy4gJHBsdWdpblsn bmFtZSddLidfdicuJHBsdWdpblsndmVyc2lvbiddLiAnLnR4dCInKQoJCQkJCQkuJyB8ICcu dGFnKGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9jb21wcmVzcycpLCdhJywnIGhyZWY9 Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fc2F2ZV9h c19maWxlJiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4nJiMzODt6aXA9dHJ1ZSIgdGl0bGU9 IicgLiBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fZXhwb3J0JykgLicgJy4gJHBsdWdp blsnbmFtZSddLidfdicuJHBsdWdpblsndmVyc2lvbiddLiAnX3ppcC50eHQiJyk6CgkJCQl0 YWcoJyZuYnNwOycsJ3NwYW4nLCcgc3R5bGU9ImNvbG9yOmdyYXkiJykKCQkJCSkpCgkJCQku dGQoJycpCgkJCQkudGQoJycpCgkJCQkpOwoJCQl9CgkJfQoJfQoKCWVjaG8gdHIoCnRkYSgK Jzxmb3JtIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iaW5kZXgucGhw IiBtZXRob2Q9InBvc3QiPicuCnN0YXJ0VGFibGUoJ2VkaXQnLCdsZWZ0JykuCnRyKHRkYSgg aElucHV0KCdNQVhfRklMRV9TSVpFJywxMDAwMDAwKS4KZ3JhZihpZWRfcGx1Z2luX2dUeHQo J2llZF9wbHVnaW5fdXBsb2FkX3BocCcpLic6ICcuCmZJbnB1dCgnZmlsZScsJ3RoZWZpbGUn LCcnLCdlZGl0JykuCmZJbnB1dCgnc3VibWl0Jywnc3VibWl0JyxnVHh0KCd1cGxvYWQnKSwn c21hbGxlcmJveCcpKS4KZUlucHV0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykuCnNJbnB1dCgn aWVkX3BsdWdpbl91cGxvYWQnKSAsICcgc3R5bGU9ImJvcmRlcjowcHggc29saWQgZ3JheSIn ICkuCnRkYSggdGFnKGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9uYW1lJyksICdhY3Jv bnltJywnIHRpdGxlPSInLmllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9uYW1lX3Rvb2x0 aXAnKS4nIiBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkIGJsYWNrIicpLic6ICcu IGZJbnB1dCgndGV4dCcsJ25hbWUnLCd4eHhfeHh4eHh4JywnJywnJywnJywnMzAnLCcwJykg LCAnIHN0eWxlPSJib3JkZXI6MHB4IHNvbGlkIGdyYXk7dmVydGljYWwtYWxpZ246bWlkZGxl OyInICkpLgplbmRUYWJsZSgpLgonPC9mb3JtPicKLCcgY29sc3Bhbj0iOCIgc3R5bGU9ImJv cmRlcjowO2hlaWdodDo1MHB4O3RleHQtYWxpZ246bGVmdCInKQopOwoJZWNobyBlbmRUYWJs ZSgpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9zdGF0dXNfbGluaygkc3RhdHVzLCRu YW1lLCRsaW5rdGV4dCkgewoJJG91dCA9ICc8YSBocmVmPSJpbmRleC5waHA/JzsKCSRvdXQg Lj0gJ2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3N3aXRjaF9zdGF0 dXMmIzM4O3N0YXR1cz0nLgoJJHN0YXR1cy4nJiMzODtuYW1lPScudXJsZW5jb2RlKCRuYW1l KS4nIic7Cgkkb3V0IC49ICc+Jy4kbGlua3RleHQuJzwvYT4nOwoJcmV0dXJuICRvdXQ7Cn0K Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3N3aXRjaF9zdGF0dXMoKSB7CglleHRyYWN0KGdw c2EoYXJyYXkoJ25hbWUnLCdzdGF0dXMnKSkpOwoJJGNoYW5nZSA9ICgkc3RhdHVzKSA/IDAg OiAxOwoJc2FmZV91cGRhdGUoInR4cF9wbHVnaW4iLCAic3RhdHVzPSRjaGFuZ2UiLCAibmFt ZT0nJG5hbWUnIik7CglpZWRfcGx1Z2luX2xpc3QobWVzc2VuZ2VyKCdwbHVnaW4nLCRuYW1l LCd1cGRhdGVkJykpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fZGVsZXRl KCkgewoJJG5hbWUgPSBkb1NsYXNoKHBzKCduYW1lJykpOwoJc2FmZV9kZWxldGUoInR4cF9w bHVnaW4iLCJuYW1lPSckbmFtZSciKTsKCWllZF9wbHVnaW5fbGlzdChtZXNzZW5nZXIoJ3Bs dWdpbicsJG5hbWUsJ2RlbGV0ZWQnKSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3Bs dWdpbl9lZGl0KCRtZXNzYWdlPScnKSB7Cgkkc2l0ZV9kaXIgPSBodTsKCSRuYW1lID0gZ3Bz KCduZXduYW1lJyk/Z3BzKCduZXduYW1lJyk6Z3BzKCduYW1lJyk7CglwYWdldG9wKGdUeHQo J2VkaXRfcGx1Z2lucycpLCRtZXNzYWdlKTsKCWVjaG8gaWVkX2luc2VydF9lZGl0b3JzKCk7 CgllY2hvIGllZF9wbHVnaW5fZWRpdF9mb3JtKChncHMoJ2ZpbGVuYW1lJykpP2dwcygnZmls ZW5hbWUnKTokbmFtZSwgZ3BzKCdmaWxlbmFtZScpPyAxOiAwKTsKfQoKLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpm dW5jdGlvbiBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmFtZT0nJywkZWRpdGZpbGU9MCkgewoJ Z2xvYmFsICRwcmVmcywgJGllZF9wbHVnaW5fcHJlZnM7CglpZiAoISRlZGl0ZmlsZSkgewoJ CSRhdXRob3IgPSAoJG5hbWUpID8gZmV0Y2goJ2F1dGhvcicsJ3R4cF9wbHVnaW4nLCduYW1l JywkbmFtZSkgOiAnJzsKCQkkYXV0aG9yX3VyaSA9ICgkbmFtZSkgPyBmZXRjaCgnYXV0aG9y X3VyaScsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkdmVyc2lvbiA9ICgk bmFtZSkgPyBmZXRjaCgndmVyc2lvbicsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAn JzsKCQkkZGVzY3JpcHRpb24gPSAoJG5hbWUpID8gZmV0Y2goJ2Rlc2NyaXB0aW9uJywndHhw X3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSRjb2RlID0gKCRuYW1lKSA/IGZldGNo KCdjb2RlJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSRoZWxwID0gKCRu YW1lKSA/IGZldGNoKCdoZWxwJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJ CSRzdGF0dXMgPSAoJG5hbWUpID8gZmV0Y2goJ3N0YXR1cycsJ3R4cF9wbHVnaW4nLCduYW1l JywkbmFtZSkgOiAnJzsKCQkkdHlwZSA9ICgkbmFtZSkgPyBmZXRjaCgndHlwZScsJ3R4cF9w bHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQlsaXN0KCRjc3MsJGhlbHApID0gKCRoZWxw KSA/IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwgIjwhLS18LS0+Iiwg dHJ1ZSkgOiBhcnJheSgnJywkaGVscCk7Cgl9IGVsc2UgewoJCSRwbHVnaW4gPSBpZWRfcGx1 Z2luX3JlYWRfZmlsZSgkR0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLkRT LiRuYW1lKTsKCQkkZmlsZW5hbWU9JG5hbWU7CgkJJGZpbGVleHQ9IGFycmF5X3BvcCgkbmFt ZT1leHBsb2RlICgnLicsJG5hbWUpKTsKCQkkbmFtZT1pbXBsb2RlKCRuYW1lKTsKCQlleHRy YWN0ICgkcGx1Z2luKTsgLy8gY29kZSwgaGVscCwgY3NzLCBuYW1lLCB2ZXJzaW9uLCB0eXBl LCBkZXNjcmlwdGlvbiwgYXV0aG9yLCBhdXRob3JfdXJpCgkJJHN0YXR1cz0gKCRmaWxlZXh0 PT0ncGhwJyk/IDE6IDA7Cgl9CgkkZWR3aWR0aCA9IChpc3NldCgkcHJlZnNbJ2llZF9wbHVn aW5fZWRpdG9yX3dpZHRoJ10pICYmIGlzX251bWVyaWMoJHByZWZzWydpZWRfcGx1Z2luX2Vk aXRvcl93aWR0aCddKSkgPyAkcHJlZnNbJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ10gOiAk aWVkX3BsdWdpbl9wcmVmc1swXVsnaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgnXTsKCSRwbHVn aW5bJ25hbWUnXSA9ICRuYW1lOwoJJHBsdWdpblsnYXV0aG9yJ10gPSAkYXV0aG9yOwoJJHBs dWdpblsnYXV0aG9yX3VyaSddID0gJGF1dGhvcl91cmk7CgkkcGx1Z2luWyd2ZXJzaW9uJ10g PSAkdmVyc2lvbjsKCSRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ10gPSAkZGVzY3JpcHRpb247Cgkk cGx1Z2luWydoZWxwJ10gPSAkaGVscDsKCSRwbHVnaW5bJ2NvZGUnXSA9ICRjb2RlOwoJJHBs dWdpblsndHlwZSddID0gJHR5cGU7CgkkcGx1Z2luWydtZDUnXSA9IG1kNSggJHBsdWdpblsn Y29kZSddICk7CgoJJGRpc3RyaWJ1dGlvbj0nPHRleHRhcmVhIG5hbWU9ImRpc3RyaWJ1dGlv biIgcm93cz0iMSIgY29scz0iJy4kZWR3aWR0aC4nIiBvbmNsaWNrPSJ0aGlzLnNlbGVjdCgp Ij4nLmJhc2U2NF9lbmNvZGUoc2VyaWFsaXplKCRwbHVnaW4pKS4nPC90ZXh0YXJlYT4nOwoK CSRuYW1lZExpbmsgPSAoaXNzZXQoJGZpbGVuYW1lKSkgPyAnZmlsZW5hbWU9Jy4kZmlsZW5h bWUgOiAnbmFtZT0nLiRuYW1lOwoJJG5hbWVkRmlsZSA9IChpc3NldCgkZmlsZW5hbWUpKSA/ ICRmaWxlbmFtZSA6ICRuYW1lLidfdicuJHZlcnNpb24uJy5waHAnOwoJJG5hbWVkRmlsZU5v RXh0ID0gcHJlZ19yZXBsYWNlKCcvKC4rKVwuLiokLycsICckMScsICRuYW1lZEZpbGUpOwoK CSRzbGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3Rl cD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7Jy4kbmFtZWRMaW5rLiciPicgLmllZF9w bHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9leHBvcnQnKSAuJyAnLiAkbmFtZWRGaWxlTm9FeHQu ICcudHh0PC9hPic7Cgkkc3ppcGxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5f Y29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4OycuJG5hbWVk TGluay4nJiMzODt6aXA9dHJ1ZSI+JyAuIGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9l eHBvcnQnKSAuJyAnLiAkbmFtZWRGaWxlTm9FeHQuICcudHh0IChjb21wcmVzc2VkKTwvYT4n OwoJJHNwaHBsaW5rID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMz ODtzdGVwPWllZF9wbHVnaW5fc2F2ZV9hc19waHBfZmlsZSYjMzg7Jy4kbmFtZWRMaW5rLici PicgLiBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fc2F2ZV9hcycpIC4nICcuICRuYW1l ZEZpbGUuICc8L2E+JzsKCSR2aGVscGxpbmtmdWxsID0gKCRoZWxwKSA/ICc8YSBocmVmPSI/ ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX2hlbHBfdmll d2VyJiMzODsnLiRuYW1lZExpbmsuJyI+WyAnLnN0cm9uZyhnVHh0KCd2aWV3JykuJyAnLmdU eHQoJ2hlbHAnKSkuJyBdPC9hPicgOiAnJzsKCgkkbmV3bmFtZSA9ZklucHV0KCd0ZXh0Jywn bmV3bmFtZScsJG5hbWUsJ2VkaXQnLCc3OCcsJycsJGVkd2lkdGgsJzInKTsKCSRhdXRob3Ig PWZJbnB1dCgndGV4dCcsJ2F1dGhvcicsJGF1dGhvciwnZWRpdCcsJzc4JywnJywkZWR3aWR0 aCwnMicpOwoJJGF1dGhvcl91cmkgPWZJbnB1dCgndGV4dCcsJ2F1dGhvcl91cmknLCRhdXRo b3JfdXJpLCdlZGl0JywnNzgnLCcnLCRlZHdpZHRoLCcyJyk7CgkkdmVyc2lvbiA9ZklucHV0 KCd0ZXh0JywndmVyc2lvbicsJHZlcnNpb24sJ2VkaXQnLCc3OCcsJycsJGVkd2lkdGgsJzIn KTsKCSRkZXNjcmlwdGlvbiA9ZklucHV0KCd0ZXh0JywnZGVzY3JpcHRpb24nLCRkZXNjcmlw dGlvbiwnZWRpdCcsJzc4JywnJywkZWR3aWR0aCwnMicpOwoJJGNvZGUgPSAnPHRleHRhcmVh IG5hbWU9ImNvZGUiIGlkPSJwbHVnaW5fZWRpdG9yIiByb3dzPSIzMCIgY29scz0iJy4kZWR3 aWR0aC4nIiBjbGFzcz0iY29kZXByZXNzIHBocCI+Jy5odG1sZW50aXRpZXModXRmOF9kZWNv ZGUoJGNvZGUpKS4nPC90ZXh0YXJlYT4nOwoJJGhlbHAgPSAnPHRleHRhcmVhIG5hbWU9Imhl bHAiIHJvd3M9IjMwIiBjb2xzPSInLiRlZHdpZHRoLiciIGNsYXNzPSJtY2VFZGl0b3IiPicu aHRtbGVudGl0aWVzKHV0ZjhfZGVjb2RlKCRoZWxwKSkuJzwvdGV4dGFyZWE+JzsKCSRjc3Mg PSAnPHRleHRhcmVhIG5hbWU9ImNzcyIgcm93cz0iMTUiIGNvbHM9IicuJGVkd2lkdGguJyI+ Jy51dGY4X2RlY29kZSgkY3NzKS4nPC90ZXh0YXJlYT4nOwoJJHByZWZzID0gKCghJGVkaXRm aWxlKT9jaGVja2JveCgnc3RhdHVzJywxLCRzdGF0dXMpLiAnIDxsYWJlbCBmb3I9InN0YXR1 cyI+Jy5pZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fZW5hYmxlJykuJzwvbGFiZWw+Jzon JykgLiAnIDxsYWJlbCBmb3I9InR5cGUiPiYjMTYwOyYjMTYwOyYjMTYwOycuaWVkX3BsdWdp bl9nVHh0KCdpZWRfcGx1Z2luX3R5cGUnKS4nOjwvbGFiZWw+Jy4gcmFkaW8oJ3R5cGUnLDAs KCgkdHlwZT09MCk/MTowKSkuaWVkX3BsdWdpbl9nVHh0KCdpZWRfcGx1Z2luX3R5cGVfMCcp LiIgIiAuIHJhZGlvKCd0eXBlJywxLCgoJHR5cGU9PTEpPzE6MCkpLmllZF9wbHVnaW5fZ1R4 dCgnaWVkX3BsdWdpbl90eXBlXzEnKS4iICIgLiByYWRpbygndHlwZScsMiwoKCR0eXBlPT0y KT8xOjApKS5pZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fdHlwZV8yJyk7CgoJJHN1YiA9 IGZJbnB1dCgnc3VibWl0JywnJyxnVHh0KCdzYXZlJyksJ3B1Ymxpc2gnKTsKCXJldHVybiBm b3JtKHN0YXJ0VGFibGUoJ2VkaXQnKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0 ZCgkc3ViIC4gJHZoZWxwbGlua2Z1bGwpKQoJLiAoIChpc3NldCgkZmlsZW5hbWUpKT8gdHIo IGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoJGZpbGVuYW1lLmhJbnB1dCgnZmlsZW5hbWUn LCRmaWxlbmFtZSkpKSA6ICcnICkKCS4gdHIoIGZMYWJlbENlbGwoICdwbHVnaW4nICkgLiB0 ZCgkbmV3bmFtZSkpCgkuIHRyKCBmTGFiZWxDZWxsKCAncGx1Z2luJyApIC4gdGQoJGNvZGUp KQoJLiB0ciggZkxhYmVsQ2VsbCggJ3ByZWZzJyApIC4gdGQoJHByZWZzKSkKCgkuIHRyKCBm TGFiZWxDZWxsKCAndmVyc2lvbicgKSAuIHRkKCR2ZXJzaW9uKSkKCS4gdHIoIGZMYWJlbENl bGwoICdhdXRob3InICkgLiB0ZCgkYXV0aG9yKSkKCS4gdHIoIGZMYWJlbENlbGwoICd3ZWJz aXRlJyApIC4gdGQoJGF1dGhvcl91cmkpKQoJLiB0ciggZkxhYmVsQ2VsbCggJ2Rlc2NyaXB0 aW9uJyApIC4gdGQoJGRlc2NyaXB0aW9uKSkKCS4gdHIoIHRkYShnVHh0KCdwbHVnaW5faGVs cCcpLCAnIGNsYXNzPSJub2xpbmUiIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsgdmVydGlj YWwtYWxpZ246IG1pZGRsZTsiJykgLiB0ZCgkaGVscCkpCgkuIHRyKCBmTGFiZWxDZWxsKCAn Y3NzJyApIC4gdGQoJGNzcykpCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRz dWIpKQoKCS4gdHIoIHRkY3MoJzxocj4nLDIpKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7 JykgLiB0ZChpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fdXRpbGl0aWVzJykuJzonKSkK CgkuIHRyKCBmTGFiZWxDZWxsKCBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fY29kZV9k aXN0JykgKSAuIHRkKCRkaXN0cmlidXRpb24pKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7 JykgLiB0ZCgkc2xpbmspKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3pp cGxpbmspKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3BocGxpbmspKQoJ LiBlbmRUYWJsZSgpCgkuIHNJbnB1dCgnaWVkX3BsdWdpbl9zYXZlJykKCS4gZUlucHV0KCdp ZWRfcGx1Z2luX2NvbXBvc2VyJykKCS4gaElucHV0KCduYW1lJywkbmFtZSkpCS4gPDw8RU9G CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KalF1ZXJ5LmZuLnJlc2l6ZWhhbmRs ZSA9IGZ1bmN0aW9uKGN1cmgpIHsKCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJ dmFyIG1lID0galF1ZXJ5KHRoaXMpOwoJCW1lLmFuaW1hdGUoe2hlaWdodDogY3VyaH0pOwoJ CW1lLmFmdGVyKAoJCQlqUXVlcnkoJzxkaXYgY2xhc3M9InJlc2l6ZWhhbmRsZSI+LS0tICsg LS0tPC9kaXY+JykuYmluZCgibW91c2Vkb3duIiwgZnVuY3Rpb24oZSkgewoJCQkJdmFyIGgg PSBtZS5oZWlnaHQoKTsKCQkJCXZhciB5ID0gZS5jbGllbnRZOwoJCQkJdmFyIG1vdmVIYW5k bGVyID0gZnVuY3Rpb24oZSkgewoJCQkJCW1lLmhlaWdodChNYXRoLm1heCgyMCwgZS5jbGll bnRZICsgaCAtIHkpKTsKCQkJCX07CgkJCQl2YXIgdXBIYW5kbGVyID0gZnVuY3Rpb24oZSkg ewoJCQkJCWpRdWVyeSgiaHRtbCIpLnVuYmluZCgibW91c2Vtb3ZlIixtb3ZlSGFuZGxlciku dW5iaW5kKCJtb3VzZXVwIix1cEhhbmRsZXIpOwoJCQkJCW5ld2ggPSBtZS5oZWlnaHQoKTsK CQkJCQlzZXRDb29raWUoJ2llZF9wbHVnaW5fZWRoZWlnaHQnLCBuZXdoLCAzMCk7CgkJCQl9 OwoJCQkJalF1ZXJ5KCJodG1sIikuYmluZCgibW91c2Vtb3ZlIiwgbW92ZUhhbmRsZXIpLmJp bmQoIm1vdXNldXAiLCB1cEhhbmRsZXIpOwoJCQl9KQoJCSk7Cgl9KTsKfQpmdW5jdGlvbiBz ZXRDb29raWUobmFtZSx2YWx1ZSxkYXlzKSB7CglpZiAoZGF5cykgewoJCXZhciBkYXRlID0g bmV3IERhdGUoKTsKCQlkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkrKGRheXMqMjQqNjAq NjAqMTAwMCkpOwoJCXZhciBleHBpcmVzID0gIjsgZXhwaXJlcz0iK2RhdGUudG9HTVRTdHJp bmcoKTsKCX0gZWxzZSB2YXIgZXhwaXJlcyA9ICIiOwoJZG9jdW1lbnQuY29va2llID0gbmFt ZSsiPSIrdmFsdWUrZXhwaXJlcysiOyBwYXRoPS8iOwp9CmZ1bmN0aW9uIGdldENvb2tpZShu YW1lKSB7Cgl2YXIgbmFtZUVRID0gbmFtZSArICI9IjsKCXZhciBjYSA9IGRvY3VtZW50LmNv b2tpZS5zcGxpdCgnOycpOwoJZm9yKHZhciBpPTA7aSA8IGNhLmxlbmd0aDtpKyspIHsKCQl2 YXIgYyA9IGNhW2ldOwoJCXdoaWxlIChjLmNoYXJBdCgwKT09JyAnKSBjID0gYy5zdWJzdHJp bmcoMSxjLmxlbmd0aCk7CgkJaWYgKGMuaW5kZXhPZihuYW1lRVEpID09IDApIHJldHVybiBj LnN1YnN0cmluZyhuYW1lRVEubGVuZ3RoLGMubGVuZ3RoKTsKCX0KCXJldHVybiBudWxsOwp9 ClwkKGZ1bmN0aW9uKCkgewoJY3VyaCA9IGdldENvb2tpZSgnaWVkX3BsdWdpbl9lZGhlaWdo dCcpOwoJY3VyaCA9IChjdXJoID09IG51bGwpID8gJzQ4MCcgOiBjdXJoOwoJXCQoIiNwbHVn aW5fZWRpdG9yIikucmVzaXplaGFuZGxlKHBhcnNlSW50KGN1cmgpKTsKfSk7Cjwvc2NyaXB0 Pgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoucmVzaXplaGFuZGxlIHsKCWN1cnNvcjpzLXJl c2l6ZTsKCXRleHQtYWxpZ246Y2VudGVyOwoJZm9udC1zaXplOjFlbTsKCXdpZHRoOjEwMCU7 CglwYWRkaW5nOjJweCAwIDZweDsKfQo8L3N0eWxlPgpFT0Y7Cn0KCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVu Y3Rpb24gaWVkX3BsdWdpbl9zYXZlKCkgewoJZ2xvYmFsICRpZWRfcGx1Z2luX2dsb2JhbHM7 CglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnbmFtZScsJ25ld25hbWUnLCdmaWxlbmFt ZScsJ2NvZGUnLCdhdXRob3InLCdhdXRob3JfdXJpJywndmVyc2lvbicsJ2Rlc2NyaXB0aW9u JywnaGVscCcsJ2NzcycsJ3N0YXR1cycsJ3R5cGUnKSkpKTsKCWxpc3QgKCRzdGFydF9jc3Ms ICRlbmRfY3NzKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCJDU1MiLCAkaWVkX3BsdWdp bl9nbG9iYWxzWydjc3Nfc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX2VuZCdd KTsKCglpZiAoZW1wdHkoJGZpbGVuYW1lKSkgewoJCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2lu IiwibmFtZT0nJG5ld25hbWUnIiwgIm5hbWU9JyRuYW1lJyIpOwoJCXNhZmVfdXBkYXRlKCJ0 eHBfcGx1Z2luIiwiY29kZT0nJGNvZGUnIiwgIm5hbWU9JyRuZXduYW1lJyIpOwoJCXNhZmVf dXBkYXRlKCJ0eHBfcGx1Z2luIiwiYXV0aG9yPSckYXV0aG9yJyIsICJuYW1lPSckbmV3bmFt ZSciKTsKCQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsImF1dGhvcl91cmk9JyRhdXRob3Jf dXJpJyIsICJuYW1lPSckbmV3bmFtZSciKTsKCQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIs InZlcnNpb249JyR2ZXJzaW9uJyIsICJuYW1lPSckbmV3bmFtZSciKTsKCQlzYWZlX3VwZGF0 ZSgidHhwX3BsdWdpbiIsImRlc2NyaXB0aW9uPSckZGVzY3JpcHRpb24nIiwgIm5hbWU9JyRu ZXduYW1lJyIpOwoJCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwiaGVscD0nIi4kaGVscC4o KCRjc3MpID8gbi4kc3RhcnRfY3NzLm4uJGNzcy5uLiRlbmRfY3NzOicnKS4iJyIsICJuYW1l PSckbmV3bmFtZSciKTsKCQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsInN0YXR1cz0nJHN0 YXR1cyciLCAibmFtZT0nJG5ld25hbWUnIik7CgkJc2FmZV91cGRhdGUoInR4cF9wbHVnaW4i LCJ0eXBlPSckdHlwZSciLCAibmFtZT0nJG5ld25hbWUnIik7Cgl9IGVsc2UgewoJCSRmaWxl Y29udGVudCA9IGZpbGUoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5E Uy4kZmlsZW5hbWUpOwoJCSRmaWxlY29udGVudCA9IGllZF9wbHVnaW5fbWFrZV9hcnJheSgk ZmlsZWNvbnRlbnQpOwoJCSRtZXRhdmFycyA9IGFycmF5KCJuYW1lIiA9PiAiJG5ld25hbWUi LAoJCQkJCQkJCSJ2ZXJzaW9uIiA9PiAiJHZlcnNpb24iLAoJCQkJCQkJCSJhdXRob3IiID0+ ICIkYXV0aG9yIiwKCQkJCQkJCQkiYXV0aG9yX3VyaSIgPT4gIiRhdXRob3JfdXJpIiwKCQkJ CQkJCQkiZGVzY3JpcHRpb24iID0+ICIkZGVzY3JpcHRpb24iLAoJCQkJCQkJCSJ0eXBlIiA9 PiAiJHR5cGUiCgkJCQkJCSk7CgkJJGh1bmt2YXJzID0gYXJyYXkoIkNTUyIgPT4gZG9TdHJp cChzdHJfcmVwbGFjZSgnXHJcbicsJwonLCRjc3MpKSwKCQkJCQkJCQkiSEVMUCIgPT4gZG9T dHJpcChzdHJfcmVwbGFjZSgnXHJcbicsJwonLCRoZWxwKSksCgkJCQkJCQkJIkNPREUiID0+ IGRvU3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcKJywkY29kZSkpLCAvLyB3b3JrYXJvdW5k CgkJCQkJCSk7CgkJZm9yZWFjaCAoJG1ldGF2YXJzIGFzICR2YXJuYW1lID0+ICR2YWx1ZSkg ewoJCQlmb3IoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkZmlsZWNvbnRlbnQpOyAkaWR4Kysp IHsKCQkJCWlmIChzdHJwb3MoJGZpbGVjb250ZW50WyRpZHhdLCAnJHBsdWdpbltcJycuJHZh cm5hbWUuJ1wnXScpID09PSAwKSB7CgkJCQkJJGZpbGVjb250ZW50WyRpZHhdID0gJyRwbHVn aW5bXCcnLiR2YXJuYW1lLidcJ10gPSAnLmRvUXVvdGUoJHZhbHVlKS4nOyc7CgkJCQkJYnJl YWs7CgkJCQl9CgkJCX0KCQl9CgkJZm9yZWFjaCAoJGh1bmt2YXJzIGFzICR2YXJuYW1lID0+ ICRodW5rKSB7CgkJCWxpc3QgKCRzdGFydF9kZWxpbSwgJGVuZF9kZWxpbSkgPSBpZWRfcGx1 Z2luX21ha2VfbWFya2VycygkdmFybmFtZSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snZGxtX3N0 YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2RsbV9lbmQnXSk7CgkJCSRzdGFydCA9IGFy cmF5X3NlYXJjaCgkc3RhcnRfZGVsaW0sICRmaWxlY29udGVudCkgKyAxOwoJCQkkZW5kID0g YXJyYXlfc2VhcmNoKCRlbmRfZGVsaW0sICRmaWxlY29udGVudCk7CgkJCWFycmF5X3NwbGlj ZSgkZmlsZWNvbnRlbnQsICRzdGFydCwgJGVuZC0kc3RhcnQsICRodW5rKTsKCQl9CgkJJGZp bGVjb250ZW50ID0gaW1wbG9kZSgiXG4iLCAkZmlsZWNvbnRlbnQpOwoJCSRmaCA9IGZvcGVu KCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuJGZpbGVuYW1lLCAn dysnKTsKCQlmd3JpdGUoJGZoLCAkZmlsZWNvbnRlbnQpOwoJCWZjbG9zZSgkZmgpOwoJfQoJ Ly8gQ2hlY2sgdGhlIHBsdWdpbiB0eXBlIG1hdGNoZXMgdGhlIGNvZGUgdXNlZAoJJGV4dHJh TXNnID0gKGllZF9wbHVnaW5fYWRtaW5fY2hlY2soJGNvZGUsICR0eXBlKSkgPyAnJyA6IHN0 cm9uZyhpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fY2hlY2tfdHlwZScpKTsKCSRtZXNz YWdlID0gbWVzc2VuZ2VyKCdwbHVnaW4nLCRuZXduYW1lLCdzYXZlZCcpLmJyLiRleHRyYU1z ZzsKCWllZF9wbHVnaW5fZWRpdCgkbWVzc2FnZSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24g aWVkX3BsdWdpbl9jcmVhdGVfbmV3KCkgewoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXko J25hbWUnKSkpKTsKCWlmICgkbmFtZT09JycpIHsKCQlpZWRfcGx1Z2luX2xpc3QoaWVkX3Bs dWdpbl9nVHh0KCdpZWRfcGx1Z2luX25hbWVfZmlyc3QnKSk7CgkJcmV0dXJuOwoJfQoJJGV4 aXN0cyA9IGZldGNoKCduYW1lJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKTsKCWlmICgh JGV4aXN0cykgewoJCXNhZmVfaW5zZXJ0KCJ0eHBfcGx1Z2luIiwgIgoJCQluYW1lPSckbmFt ZScsCgkJCXN0YXR1cz0nMCcsCgkJCXR5cGU9JzAnLAoJCQl2ZXJzaW9uPScwLjEnCgkJIik7 CgkJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwgJ2VkaXQgeW91ciBuZXcgcGx1Z2lu Jyk7CgkJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmFtZSk7Cgl9IGVsc2UgewoJCWll ZF9wbHVnaW5fbGlzdChnVHh0KCdwbHVnaW4nKS4nIDxzdHJvbmc+Jy4kbmFtZS4nPC9zdHJv bmc+ICcuZ1R4dCgnYWxyZWFkeV9leGlzdHMnKSk7Cgl9Cn0KCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rp b24gaWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUoKSB7CglnbG9iYWwgJGllZF9wbHVnaW5fZ2xv YmFsczsKCWlmIChncHMoJ25hbWUnKSkgewoJCSRuYW1lID0gZ3BzKCduYW1lJyk7CgkJJGRl c2NyaXB0aW9uID0gKCRuYW1lKSA/IGZldGNoKCdkZXNjcmlwdGlvbicsJ3R4cF9wbHVnaW4n LCduYW1lJywkbmFtZSkgOiAnJzsKCQkkYXV0aG9yID0gKCRuYW1lKSA/IGZldGNoKCdhdXRo b3InLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJGF1dGhvcl91cmkgPSAo JG5hbWUpID8gZmV0Y2goJ2F1dGhvcl91cmknLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUp IDogJyc7CgkJJHZlcnNpb24gPSAoJG5hbWUpID8gZmV0Y2goJ3ZlcnNpb24nLCd0eHBfcGx1 Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJGNvZGUgPSAoJG5hbWUpID8gZmV0Y2goJ2Nv ZGUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJGhlbHAgPSAoJG5hbWUp ID8gZmV0Y2goJ2hlbHAnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJHR5 cGUgPSAoJG5hbWUpID8gZmV0Y2goJ3R5cGUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUp IDogJyc7CgkJbGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJh Y3RfaHVuaygkaGVscCwgIkNTUyIsICI8IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycsJGhl bHApOwoJfSBlbHNlaWYgKGdwcygnZmlsZW5hbWUnKSkgewoJCSRwbHVnaW49aWVkX3BsdWdp bl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy5n cHMoJ2ZpbGVuYW1lJykpOwoJCWV4dHJhY3QoJHBsdWdpbik7Cgl9CgkkemlwID0gZ3BzKCd6 aXAnKTsKCWlmIChncHMoJ3RyaW0nKT09MSkgewoJCSRjb2RlPWV4cGxvZGUoIlxyXG4iLCRj b2RlKTsKCQkkY29kZT1hcnJheV9tYXAoJ3RyaW0nLCRjb2RlKTsKCQkkY29kZT1pbXBsb2Rl KCJcclxuIiwkY29kZSk7Cgl9CgoJbGlzdCAoJHN0YXJ0X2NzcywgJGVuZF9jc3MpID0gaWVk X3BsdWdpbl9tYWtlX21hcmtlcnMoIkNTUyIsICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19z dGFydCddLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5kJ10pOwoKCWhlYWRlcigiQ29u dGVudC10eXBlOiB0ZXh0L3BsYWluIik7CgloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246 IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInIC4gJG5hbWUuJ192Jy4kdmVyc2lvbi4gKCgkemlw KT8nX3ppcCc6JycpIC4gJy50eHQnKTsKCgkkdHlwZXMgPSBhcnJheSggJ0NsaWVudCBzaWRl JyAsICdBZG1pbi9DbGllbnQgc2lkZScgLCAnTGlicmFyeScgKTsKCSRwbHVnaW5bJ25hbWUn XSA9ICRuYW1lOwoJJHBsdWdpblsnYXV0aG9yJ10gPSAkYXV0aG9yOwoJJHBsdWdpblsnYXV0 aG9yX3VyaSddID0gJGF1dGhvcl91cmk7CgkkcGx1Z2luWyd2ZXJzaW9uJ10gPSAkdmVyc2lv bjsKCSRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ10gPSAkZGVzY3JpcHRpb247CgkkcGx1Z2luWydj b2RlJ10gPSAkY29kZTsKCSRwbHVnaW5bJ3R5cGUnXSA9ICR0eXBlOwovLwkkcGx1Z2luWydh bGxvd19odG1sX2hlbHAnXSA9IHRydWU7Ci8vCSRwbHVnaW5bJ2hlbHBfcmF3J10gPSAkaGVs cC4kc3RhcnRfY3NzLiRjc3MuJGVuZF9jc3M7CgkkcGx1Z2luWydoZWxwJ10gPSBpZWRfcGx1 Z2luX3RleHRpbGUoJGhlbHAsICRjc3MsICRzdGFydF9jc3MsICRlbmRfY3NzKTsKCSRwbHVn aW5bJ21kNSddID0gbWQ1KCAkcGx1Z2luWydjb2RlJ10gKTsKCgllY2hvICcjIE5hbWU6ICcu JG5hbWUuJyB2Jy4kdmVyc2lvbi4nICcuKCgkemlwKSA/ICIoY29tcHJlc3NlZCkiIDogIiIp LicKIyBUeXBlOiAnLiR0eXBlc1skdHlwZV0uJyBwbHVnaW4KIyAnLiRkZXNjcmlwdGlvbi4n CiMgQXV0aG9yOiAnLiRhdXRob3IuJwojIFVSTDogJy4kYXV0aG9yX3VyaS4nCgojIC4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLgojIFRoaXMgaXMgYSBwbHVnaW4gZm9yIFRleHRwYXR0ZXJuIC0gaHR0cDov L3RleHRwYXR0ZXJuLmNvbS8KIyBUbyBpbnN0YWxsOiB0ZXh0cGF0dGVybiA+IGFkbWluID4g cGx1Z2lucwojIFBhc3RlIHRoZSBmb2xsb3dpbmcgdGV4dCBpbnRvIHRoZSBcJ0luc3RhbGwg cGx1Z2luXCcgYm94OgojIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKJy4oKCR6aXApID8gY2h1bmtfc3Bs aXQoYmFzZTY0X2VuY29kZShnemVuY29kZShzZXJpYWxpemUoJHBsdWdpbikpKSwgNzIpIDog Y2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJHBsdWdpbikpLCA3MikpOwoK CWRpZSgpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fc2F2ZV9hc19waHBf ZmlsZSgpIHsKCWdsb2JhbCAkcHJlZnM7CglpZiAoZ3BzKCduYW1lJykpIHsKCQkkbmFtZSA9 IGdwcygnbmFtZScpOwoJCSRkZXNjcmlwdGlvbiA9ICgkbmFtZSkgPyBmZXRjaCgnZGVzY3Jp cHRpb24nLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJGF1dGhvciA9ICgk bmFtZSkgPyBmZXRjaCgnYXV0aG9yJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcn OwoJCSRhdXRob3JfdXJpID0gKCRuYW1lKSA/IGZldGNoKCdhdXRob3JfdXJpJywndHhwX3Bs dWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSR2ZXJzaW9uID0gKCRuYW1lKSA/IGZldGNo KCd2ZXJzaW9uJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSRjb2RlID0g KCRuYW1lKSA/IGZldGNoKCdjb2RlJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcn OwoJCSRoZWxwID0gKCRuYW1lKSA/IGZldGNoKCdoZWxwJywndHhwX3BsdWdpbicsJ25hbWUn LCRuYW1lKSA6ICcnOwoJCSR0eXBlID0gKCRuYW1lKSA/IGZldGNoKCd0eXBlJywndHhwX3Bs dWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCWxpc3QoJGNzcywkaGVscCkgPSAoJGhlbHAp ID8gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGhlbHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0 cnVlKSA6IGFycmF5KCcnLCRoZWxwKTsKCX0gZWxzZWlmIChncHMoJ2ZpbGVuYW1lJykpIHsK CQkkcGx1Z2luPWllZF9wbHVnaW5fcmVhZF9maWxlKCRHTE9CQUxTWydwcmVmcyddWydwbHVn aW5fY2FjaGVfZGlyJ10uRFMuZ3BzKCdmaWxlbmFtZScpKTsKCQlleHRyYWN0KCRwbHVnaW4p OwoJfQoKCSRvcmRlciA9IChpc3NldCgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVy J10pICYmIGlzX251bWVyaWMoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9vcmRlciddKSkg PyAkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVyJ10gOiAwOwoKCWhlYWRlcigiQ29u dGVudC10eXBlOiB0ZXh0L3BocCIpOwoJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBh dHRhY2htZW50OyBmaWxlbmFtZT0iJyAuICRuYW1lLidfdicuJHZlcnNpb24uICcucGhwJyk7 CgoJJGhlbHBjaHVuayA9ICdpZiAoMCkgeycubgouJz8+Jy5uCi4gKCgkY3NzKSA/ICc8IS0t Jy5uCi4nIyAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0nLm4KLiRjc3MubgouJyMgLS0tIEVO RCBQTFVHSU4gQ1NTIC0tLScubgouJy0tPicubiA6ICcnKQouJzwhLS0nLm4KLicjIC0tLSBC RUdJTiBQTFVHSU4gSEVMUCAtLS0nLm4KLiRoZWxwLm4KLicjIC0tLSBFTkQgUExVR0lOIEhF TFAgLS0tJy5uCi4nLS0+Jy5uCi4nPD9waHAnLm4KLid9Jy5uOwoKCSRjb2RlY2h1bmsgPSAn IyAtLS0gQkVHSU4gUExVR0lOIENPREUgLS0tJy5uCi4kY29kZS5uCi4nIyAtLS0gRU5EIFBM VUdJTiBDT0RFIC0tLScubjsKCgllY2hvICc8P3BocCcubgouJy8vIFRoaXMgaXMgYSBQTFVH SU4gVEVNUExBVEUuJy5uCi4nLy8gQ29weSB0aGlzIGZpbGUgdG8gYSBuZXcgbmFtZSBsaWtl IGFiY19teXBsdWdpbi5waHAuICBFZGl0IHRoZSBjb2RlLCB0aGVuJy5uCi4nLy8gcnVuIHRo aXMgZmlsZSBhdCB0aGUgY29tbWFuZCBsaW5lIHRvIHByb2R1Y2UgYSBwbHVnaW4gZm9yIGRp c3RyaWJ1dGlvbjonLm4KLicvLyAkIHBocCBhYmNfbXlwbHVnaW4ucGhwID4gYWJjX215cGx1 Z2luLTAuMS50eHQnLm4KLm4KLicvLyBQbHVnaW4gbmFtZSBpcyBvcHRpb25hbC4gIElmIHVu c2V0LCBpdCB3aWxsIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBjdXJyZW50Jy5uCi4nLy8gZmls ZSBuYW1lLiBVbmNvbW1lbnQgYW5kIGVkaXQgdGhpcyBsaW5lIHRvIG92ZXJyaWRlOicubgou JyRwbHVnaW5bXCduYW1lXCddID0gJy5kb1F1b3RlKCRuYW1lKS4nOycubgouJyRwbHVnaW5b XCd2ZXJzaW9uXCddID0gJy5kb1F1b3RlKCR2ZXJzaW9uKS4nOycubgouJyRwbHVnaW5bXCdh dXRob3JcJ10gPSAnLmRvUXVvdGUoJGF1dGhvcikuJzsnLm4KLickcGx1Z2luW1wnYXV0aG9y X3VyaVwnXSA9ICcuZG9RdW90ZSgkYXV0aG9yX3VyaSkuJzsnLm4KLickcGx1Z2luW1wnZGVz Y3JpcHRpb25cJ10gPSAnLmRvUXVvdGUoJGRlc2NyaXB0aW9uKS4nOycubgoubgouJy8vIFBs dWdpbiB0eXBlczonLm4KLicvLyAwID0gcmVndWxhciBwbHVnaW47IGxvYWRlZCBvbiB0aGUg cHVibGljIHdlYiBzaWRlIG9ubHknLm4KLicvLyAxID0gYWRtaW4gcGx1Z2luOyBsb2FkZWQg b24gYm90aCB0aGUgcHVibGljIGFuZCBhZG1pbiBzaWRlJy5uCi4nLy8gMiA9IGxpYnJhcnk7 IGxvYWRlZCBvbmx5IHdoZW4gaW5jbHVkZV9wbHVnaW4oKSBvciByZXF1aXJlX3BsdWdpbigp IGlzIGNhbGxlZCcubgouJyRwbHVnaW5bXCd0eXBlXCddID0gJy5kb1F1b3RlKCR0eXBlKS4n OycubgoubgouJ0BpbmNsdWRlX29uY2UoXCd6ZW1fdHBsLnBocFwnKTsnLm4KLm4KLigoJG9y ZGVyID09IDApID8gJGNvZGVjaHVuayA6ICRoZWxwY2h1bmspCi4oKCRvcmRlciA9PSAxKSA/ ICRjb2RlY2h1bmsgOiAkaGVscGNodW5rKQouJz8+JzsKCWRpZSgpOwp9CgovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CmZ1bmN0aW9uIGllZF9wbHVnaW5fdXBsb2FkKCkgewoJZ2xvYmFsICRpZWRfcGx1Z2luX2ds b2JhbHM7CglsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2Vf bWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRf cGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7CgoJaWYgKCEkX0ZJTEVTWyd0aGVmaWxlJ11b J3RtcF9uYW1lJ10pIHsKCQlpZWRfcGx1Z2luX2xpc3QoJ1lvdSBhcmUgc3VwcG9zZWQgdG8g Y2hvb3NlIHRoZSBmaWxlIDspJyk7cmV0dXJuOwoJfQoJJHBsdWdpbiA9IGllZF9wbHVnaW5f cmVhZF9maWxlKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSk7CgkkbmV3bmFtZSA9 IChlbXB0eSgkcGx1Z2luWyduYW1lJ10pKSA/IGJhc2VuYW1lKCRfRklMRVNbJ3RoZWZpbGUn XVsnbmFtZSddLCAnLnBocCcpIDogJHBsdWdpblsnbmFtZSddOwoJaWYgKGdwcygnbmFtZScp IGFuZCBncHMoJ25hbWUnKSE9J3h4eF94eHh4eHgnKSB7CgkJJG5ld25hbWU9Z3BzKCduYW1l Jyk7Cgl9CglpZiAoZW1wdHkoJHBsdWdpblsnY29kZSddKSkgewoJCSRwbHVnaW5bJ2NvZGUn XSA9IGltcGxvZGUgKCIiLCBmaWxlKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSkp OwoJfQoKCWlmIChNQUdJQ19RVU9URVNfR1BDKSB7CgkJZm9yZWFjaCAoJHBsdWdpbiBhcyAk aXRlbSA9PiAkdmFsdWUpIHsKCQkJJHBsdWdpblskaXRlbV0gPSBhZGRzbGFzaGVzKCR2YWx1 ZSk7CgkJfQoJfQoJZXh0cmFjdCgkcGx1Z2luKTsKCSRtZDU9bWQ1KCRjb2RlKTsKCSR2ZXJz aW9uID0gKGVtcHR5KCR2ZXJzaW9uKSkgPyAiMC4xIiA6ICR2ZXJzaW9uOwoJJGhlbHAgPSAk aGVscC4oKCRjc3MpID8gbi4kc3RhcnRfY3NzLm4uJGNzcy5uLiRlbmRfY3NzIDogJycpOwoJ JGV4aXN0cyA9IGZldGNoKCduYW1lJywndHhwX3BsdWdpbicsJ25hbWUnLCRuZXduYW1lKTsK CWlmICgkZXhpc3RzKSB7CgkJJHN0YXR1cyA9IGZldGNoKCdzdGF0dXMnLCd0eHBfcGx1Z2lu JywnbmFtZScsJG5ld25hbWUpOwoJCSRycyA9IHNhZmVfdXBkYXRlKAoJCQkidHhwX3BsdWdp biIsCgkJCSJzdGF0dXMgICAgICA9ICckc3RhdHVzJywKCQkJdHlwZSAgICAgICAgID0gJyR0 eXBlJywKCQkJYXV0aG9yICAgICAgID0gJyRhdXRob3InLAoJCQlhdXRob3JfdXJpICAgPSAn JGF1dGhvcl91cmknLAoJCQl2ZXJzaW9uICAgICAgPSAnJHZlcnNpb24nLAoJCQlkZXNjcmlw dGlvbiAgPSAnJGRlc2NyaXB0aW9uJywKCQkJaGVscCAgICAgICAgID0gJyRoZWxwJywKCQkJ Y29kZSAgICAgICAgID0gJyRjb2RlJywKCQkJY29kZV9yZXN0b3JlID0gJyRjb2RlJywKCQkJ Y29kZV9tZDUgICAgID0gJyRtZDUnIiwKCQkJIm5hbWUgICAgICAgID0gJyRuZXduYW1lJyIK CQkpOwoJfSBlbHNlIHsKCQkkcnMgPSBzYWZlX2luc2VydCgKCQkJInR4cF9wbHVnaW4iLAoJ CQkibmFtZSAgICAgICAgID0gJyRuZXduYW1lJywKCQkJc3RhdHVzICAgICAgID0gMCwKCQkJ dHlwZSAgICAgICAgID0gJyR0eXBlJywKCQkJYXV0aG9yICAgICAgID0gJyRhdXRob3InLAoJ CQlhdXRob3JfdXJpICAgPSAnJGF1dGhvcl91cmknLAoJCQl2ZXJzaW9uICAgICAgPSAnJHZl cnNpb24nLAoJCQlkZXNjcmlwdGlvbiAgPSAnJGRlc2NyaXB0aW9uJywKCQkJaGVscCAgICAg ICAgID0gJyRoZWxwJywKCQkJY29kZSAgICAgICAgID0gJyRjb2RlJywKCQkJY29kZV9yZXN0 b3JlID0gJyRjb2RlJywKCQkJY29kZV9tZDUgICAgID0gJyRtZDUnIgoJCSk7Cgl9CgoJcGFn ZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwgbWVzc2VuZ2VyKCdwbHVnaW4nLCRuZXduYW1l LCgkZXhpc3RzKT8ndXBkYXRlZCc6J3VwbG9hZGVkJykpOwoJZWNobyBpZWRfcGx1Z2luX2Vk aXRfZm9ybSgkbmV3bmFtZSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9y ZWFkX2ZpbGUoJGZpbGVwYXRoKSB7CgkkY29udGVudCA9IGZpbGUoJGZpbGVwYXRoKTsKCSRz b3VyY2VfbGluZXMgPSBjb3VudCgkY29udGVudCk7CgkkbWV0YWRhdGEgPSBhcnJheSgKCQkJ CQkJJ25hbWUnID0+ICcnLAoJCQkJCQkndmVyc2lvbicgPT4gJycsCgkJCQkJCSdyZXZpc2lv bicgPT4gJycsCgkJCQkJCSdhdXRob3InID0+ICcnLAoJCQkJCQknYXV0aG9yX3VyaScgPT4g JycsCgkJCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsCgkJCQkJCSd0eXBlJyA9PiAnJywKCQkJ CQkpOwoJZm9yICgkaWR4PTA7ICRpZHggPCAkc291cmNlX2xpbmVzOyAkaWR4KyspIHsKCQkk Y29udGVudFskaWR4XSA9IHJ0cmltKCRjb250ZW50WyRpZHhdKTsKCQlpZiAoc3RycG9zKCRj b250ZW50WyRpZHhdLCAnJHBsdWdpblsnKSA9PT0gMCkgewoJCQkvLyBGb3VuZCBhIHBsdWdp biB2YXJpYWJsZSBzbyBleHRyYWN0IGl0CgkJCSRwYXJ0cyA9IGV4cGxvZGUoIiA9ICIsICRj b250ZW50WyRpZHhdKTsKCQkJJHBhcnRzWzBdID0gc3RyX3JlcGxhY2UoIiciLCAiIiwgJHBh cnRzWzBdKTsgLy8gTWFrZSB0aGUgbWF0Y2ggZWFzaWVyIQoJCQlwcmVnX21hdGNoKCIvcGx1 Z2luXFsoLiopXF0vIiwgJHBhcnRzWzBdLCAkdmFyKTsgLy8gRXh0cmFjdCBqdXN0IHRoZSB2 YXJpYWJsZSBuYW1lCgkJCXByZWdfbWF0Y2goIi8uKicoLiopJy4qLyIsICRwYXJ0c1sxXSwg JHZhbCk7IC8vIFJlbW92ZSBhbnl0aGluZyBvdXRzaWRlIHRoZSBxdW90ZXMgKGUuZy4gJHJl dmlzaW9uKQoJCQlpZiAoJHZhclsxXSA9PSAncmV2aXNpb24nICYmICFlbXB0eSgkdmFsWzFd KSkgewoJCQkJJHJldnBhcnRzID0gZXhwbG9kZSgnICcsIHRyaW0oJHZhbFsxXSwgJyQgJykp OwoJCQkJJHZhbFsxXSA9ICRyZXZwYXJ0c1tjb3VudCgkcmV2cGFydHMpLTFdOwoJCQkJJHZh bFsxXSA9IChlbXB0eSgkdmFsWzFdKSkgPyAnJyA6ICcuJyAuJHZhbFsxXTsKCQkJfQoJCQkk bWV0YWRhdGFbJHZhclsxXV0gPSAkdmFsWzFdOwoJCX0KCX0KCSRtZXRhZGF0YVsndmVyc2lv biddIC49ICRtZXRhZGF0YVsncmV2aXNpb24nXTsKCSRtZXRhZGF0YVsnaGVscCddID0gaWVk X3BsdWdpbl9leHRyYWN0X2h1bmsoJGNvbnRlbnQsICdIRUxQJyk7CgkkbWV0YWRhdGFbJ2Nz cyddICA9IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRjb250ZW50LCAnQ1NTJyApOwoJJG1l dGFkYXRhWydjb2RlJ10gPSBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkY29udGVudCwgJ0NP REUnKTsKCglyZXR1cm4gJG1ldGFkYXRhOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIHJpcHBlZCBhbmQg bW9kZGVkIGZyb20gbmV0LWNhcnZlcidzIHplbV90cGwgdGVtcGxhdGUKZnVuY3Rpb24gaWVk X3BsdWdpbl9leHRyYWN0X2h1bmsoJGNvbnRlbnQsICRodW5rLCAkY21udD0iIyIsICRkZWxl dGU9ZmFsc2UpIHsKCSRkbG0gPSBleHBsb2RlKCJ8IiwgJGNtbnQpOwoJJGRsbVN0YXJ0ID0g JGRsbVswXTsKCSRkbG1FbmQgPSAoY291bnQoJGRsbSkgPiAxKSA/ICRkbG1bMV0gOiAnJzsK CSRsaW5lcyA9IGllZF9wbHVnaW5fbWFrZV9hcnJheSgkY29udGVudCk7CgoJbGlzdCAoJHN0 YXJ0X2RlbGltLCAkZW5kX2RlbGltKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCRodW5r LCAkZGxtU3RhcnQsICRkbG1FbmQpOwoJJHN0YXJ0ID0gYXJyYXlfc2VhcmNoKCRzdGFydF9k ZWxpbSwgJGxpbmVzKSArIDE7CgkkZW5kID0gYXJyYXlfc2VhcmNoKCRlbmRfZGVsaW0sICRs aW5lcyk7CgkkZXh0cmFjdGVkID0gYXJyYXkoKTsKCWlmIChjb3VudCgkbGluZXMpID4gMCAm JiBpc19udW1lcmljKCRzdGFydCkgJiYgaXNfbnVtZXJpYygkZW5kKSAmJiAkZW5kID4gJHN0 YXJ0KSB7CgkJJGV4dHJhY3RlZCA9IGFycmF5X3NsaWNlKCRsaW5lcywgJHN0YXJ0LCAkZW5k LSRzdGFydCk7CgkJJGxpbmVOdW0gPSBjb3VudCgkZXh0cmFjdGVkKS0xOwoJCXdoaWxlICgk bGluZU51bSA+IDAgJiYgdHJpbSgkZXh0cmFjdGVkWyRsaW5lTnVtLS1dKSA9PSAiIikgewoJ CQlhcnJheV9wb3AoJGV4dHJhY3RlZCk7CgkJfQoJCXdoaWxlIChjb3VudCgkZXh0cmFjdGVk KSA+IDAgJiYgdHJpbSgkZXh0cmFjdGVkWzBdKSA9PSAiIikgewoJCQlhcnJheV9zaGlmdCgk ZXh0cmFjdGVkKTsKCQl9CgkJaWYgKCRkZWxldGUpIHsKCQkJJGNob3BwZWQgPSBhcnJheV9z cGxpY2UoJGxpbmVzLCAkc3RhcnQtMSwgJGVuZC0kc3RhcnQrMiwgIiIpOwoJCX0KCX0KCSRy ZW1haW5zID0gJGxpbmVzOwoJLy8gQ2hlY2sgaWYgdGhlIENTUyBzZWN0aW9uIGhhcyA8c3R5 bGU+IHRhZ3MgYXJvdW5kIGl0OyBhZGQgdGhlbSBpZiBub3QKCWlmICgkaHVuayA9PSAiQ1NT IikgewoJCSRudW1yb3dzID0gY291bnQoJGV4dHJhY3RlZCk7CgkJaWYgKCRudW1yb3dzID4g MSkgewoJCQlpZiAoc3RycG9zKCRleHRyYWN0ZWRbJG51bXJvd3MtMV0sICc8L3N0eWxlPicp ID09PSBmYWxzZSkgewoJCQkJJGV4dHJhY3RlZFtdID0gJzwvc3R5bGU+JzsKCQkJfQoJCQlp ZiAoc3RycG9zKCRleHRyYWN0ZWRbMF0sICc8c3R5bGUgJykgPT09IGZhbHNlKSB7CgkJCQlh cnJheV91bnNoaWZ0KCRleHRyYWN0ZWQsICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPicpOwoJ CQl9CgkJfQoJfQoJaWYgKCRkZWxldGUpIHsKCQlyZXR1cm4gYXJyYXkodHJpbShqb2luKCJc biIsICRleHRyYWN0ZWQpKSwgdHJpbShqb2luKCJcbiIsICRyZW1haW5zKSkpOwoJfSBlbHNl IHsKCQlyZXR1cm4gdHJpbShqb2luKCJcbiIsICRleHRyYWN0ZWQpKTsKCX0KfQoKLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX21ha2VfYXJyYXkoJGFycikgewoJaWYgKCFpc19h cnJheSgkYXJyKSkgewoJCSRhcnIgPSBleHBsb2RlKCJcbiIsICRhcnIpOwoJfQoJJHNvdXJj ZV9saW5lcyA9IGNvdW50KCRhcnIpOwoJZm9yICgkaWR4PTA7ICRpZHggPCAkc291cmNlX2xp bmVzOyAkaWR4KyspIHsKCQkkYXJyWyRpZHhdID0gcnRyaW0oJGFyclskaWR4XSk7Cgl9Cgly ZXR1cm4gJGFycjsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX21ha2VfbWFy a2VycygkaHVuaywgJHN0YXJ0LCAkZW5kKSB7CglnbG9iYWwgJGllZF9wbHVnaW5fZ2xvYmFs czsKCSRzbWFya2VyID0gJHN0YXJ0IC4gc3RyX3JlcGxhY2UoIlNFQ1RJT04iLCAkaHVuaywg JGllZF9wbHVnaW5fZ2xvYmFsc1snc3RhcnQnXSkgLiAoKCRlbmQpPycgJy4kZW5kOicnKTsK CSRlbWFya2VyID0gJHN0YXJ0IC4gc3RyX3JlcGxhY2UoIlNFQ1RJT04iLCAkaHVuaywgJGll ZF9wbHVnaW5fZ2xvYmFsc1snZW5kJ10pIC4gKCgkZW5kKT8nICcuJGVuZDonJyk7CglyZXR1 cm4gKGFycmF5KCRzbWFya2VyLCAkZW1hcmtlcikpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIHJpcHBl ZCBhbmQgbW9kZGVkIGZyb20gbmV0LWNhcnZlcidzIHplbV90cGwgdGVtcGxhdGUKZnVuY3Rp b24gaWVkX3BsdWdpbl9hZG1pbl9jaGVjaygkY29kZWJsb2NrLCAkdHlwZSkgewoJJHJlID0g Jy9AdHhwaW50ZXJmYWNlLio9PS4qYWRtaW4vJzsKCSRyZXQgPSB0cnVlOwoJaWYgKHByZWdf bWF0Y2goJHJlLCAkY29kZWJsb2NrKSAmJiAkdHlwZSA9PSAwKSB7CgkJJHJldCA9IGZhbHNl OwoJfQoJcmV0dXJuICRyZXQ7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl90 ZXh0aWxlKCRoZWxwLCAkY3NzLCAkc3RhcnRfZGxtLCAkZW5kX2RsbSkgewoJQGluY2x1ZGVf b25jZSB0eHBhdGguJy9saWIvY2xhc3NUZXh0aWxlLnBocCc7Cgkkb3V0ID0gJGhlbHA7Cglp ZiAoY2xhc3NfZXhpc3RzKCdUZXh0aWxlJykpIHsKCQkvLyBUcnkgYW5kIGJlIGEgbGl0dGxl IG1vcmUgaW50ZWxsaWdlbnQgYWJvdXQgYXBwbHlpbmcgdGV4dGlsZSBvciBub3QKCQkkcmUg PSAnL2gxKFwoLipcKSk/XC4vJzsKCQlpZiAocHJlZ19tYXRjaCgkcmUsICRoZWxwKSkgewoJ CQkkdGV4dGlsZSA9IG5ldyBUZXh0aWxlKCk7CgkJCSRvdXQgPSAkdGV4dGlsZS0+VGV4dGls ZVRoaXMoJGhlbHApOwoJCX0KCX0KCSRvdXQgLj0gKCRjc3MpID8gIlxuJHN0YXJ0X2RsbVxu JGNzc1xuJGVuZF9kbG1cbiIgOiAnJzsKCXJldHVybiAkb3V0Owp9CgovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1 bmN0aW9uIGllZF9pbnNlcnRfZWRpdG9ycygpIHsKCWdsb2JhbCAkcHJlZnMsICRpZWRfcGx1 Z2luX3ByZWZzOwoJJG91dCA9IGFycmF5KCk7CgoJJHByZWZrZXlzID0gZG9RdW90ZShpbXBs b2RlKCInLCciLGFycmF5X2tleXMoJGllZF9wbHVnaW5fcHJlZnNbMF0pKSk7CgkkcnMgPSBz YWZlX3Jvd3MoJ25hbWUsdmFsLGh0bWwnLCd0eHBfcHJlZnMnLCduYW1lIGluICgnLiRwcmVm a2V5cy4nKScpOwoJaWYgKGNvdW50KCRycykgPT0gY291bnQoJGllZF9wbHVnaW5fcHJlZnNb MF0pKSB7CgkJJGVkID0gYXJyYXkoKTsKCQkkZWRbJHByZWZzWydpZWRfcGx1Z2luX2VkaXRv ciddXSA9ICRwcmVmc1snaWVkX3BsdWdpbl9lZGl0b3JfcGF0aCddOwoJCSRlZFskcHJlZnNb J2llZF9wbHVnaW5faGVscF9lZGl0b3InXV0gPSAkcHJlZnNbJ2llZF9wbHVnaW5faGVscF9l ZGl0b3JfcGF0aCddOwoKCQlmb3JlYWNoICgkZWQgYXMgJGVkaXRvciA9PiAkZWRpdG9yX2Rp cikgewoJCQlzd2l0Y2ggKCRlZGl0b3IpIHsKCQkJCWNhc2UgInRpbnlfbWNlIjoKCQkJCQkk b3V0W10gPSA8PDxFT0YKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4k ZWRpdG9yX2Rpci4nL3RpbnlfbWNlLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0 L2phdmFzY3JpcHQiPgoJdGlueU1DRS5pbml0KHsKCQltb2RlIDogInNwZWNpZmljX3RleHRh cmVhcyIsCgkJZWRpdG9yX3NlbGVjdG9yIDogIm1jZUVkaXRvciIsCgkJdGhlbWVfYWR2YW5j ZWRfdG9vbGJhcl9sb2NhdGlvbiA6ICJ0b3AiLAoJCXRoZW1lX2FkdmFuY2VkX2J1dHRvbnMx IDogImJvbGQsaXRhbGljLHVuZGVybGluZSxzdHJpa2V0aHJvdWdoLGZvcmVjb2xvcixiYWNr Y29sb3IscmVtb3ZlZm9ybWF0LG51bWxpc3QsYnVsbGlzdCxvdXRkZW50LGluZGVudCxqdXN0 aWZ5bGVmdCxqdXN0aWZ5Y2VudGVyLGp1c3RpZnlyaWdodCxqdXN0aWZ5ZnVsbCIsCgkJdGhl bWVfYWR2YW5jZWRfYnV0dG9uczIgOiAibGluayx1bmxpbmssc2VwYXJhdG9yLGlicm93c2Vy LHNlcGFyYXRvcixzZWFyY2gscmVwbGFjZSxzZXBhcmF0b3IsY3V0LGNvcHkscGFzdGUsc2Vw YXJhdG9yLGNvZGUsc2VwYXJhdG9yLGZvcm1hdHNlbGVjdCIsCgkJdGhlbWVfYWR2YW5jZWRf YnV0dG9uczMgOiAiIgoJfSk7Cjwvc2NyaXB0PjsKRU9GOwoJCQkJCWJyZWFrOwoJCQkJY2Fz ZSAiZWRpdF9hcmVhIjoKCQkJCQkkb3V0W10gPSA8PDxFT0YKPHNjcmlwdCB0eXBlPSJ0ZXh0 L2phdmFzY3JpcHQiIHNyYz0iJGVkaXRvcl9kaXIvZWRpdF9hcmVhX2Z1bGwuanMiPjwvc2Ny aXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkvLyBpbml0aWFsaXNhdGlv bgoJZWRpdEFyZWFMb2FkZXIuaW5pdCh7CgkJaWQ6ICJwbHVnaW5fZWRpdG9yIgkvLyBpZCBv ZiB0aGUgdGV4dGFyZWEgdG8gdHJhbnNmb3JtCgkJLHN0YXJ0X2hpZ2hsaWdodDogdHJ1ZQkv LyBpZiBzdGFydCB3aXRoIGhpZ2hsaWdodAoJCSxhbGxvd19yZXNpemU6ICJib3RoIgoJCSxh bGxvd190b2dnbGU6IHRydWUKCQksbGFuZ3VhZ2U6ICJlbiIKCQksc3ludGF4OiAicGhwIgoJ fSk7Cjwvc2NyaXB0PgpFT0Y7CgkJCQkJYnJlYWs7CgkJCQljYXNlICJjb2RlcHJlc3MiOgoJ CQkJCSRvdXRbXSA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRl ZGl0b3JfZGlyLicvY29kZXByZXNzLmpzIj48L3NjcmlwdD4nOwoJCQkJCWJyZWFrOwoJCQl9 CgkJfQoJfQoKCXJldHVybiBpbXBsb2RlKCJcbiIsICRvdXQpOwp9CgovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1 bmN0aW9uIGllZF9wbHVnaW5faGVscF92aWV3ZXIoJG1lc3NhZ2U9JycpIHsKCWdsb2JhbCAk aWVkX3BsdWdpbl9nbG9iYWxzOwoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwkbWVz c2FnZSk7CgoJaWYgKGdwcygnbmFtZScpKSB7CgkJJG5hbWUgPSBncHMoJ25hbWUnKTsKCQkk aGVscCA9ICgkbmFtZSkgPyBmZXRjaCgnaGVscCcsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFt ZSkgOiAnJzsKCQlsaXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/IGllZF9wbHVnaW5fZXh0 cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwgIjwhLS18LS0+IiwgdHJ1ZSkgOiBhcnJheSgnJywk aGVscCk7Cgl9IGVsc2UgaWYgKGdwcygnZmlsZW5hbWUnKSkgewoJCSRwbHVnaW49aWVkX3Bs dWdpbl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5E Uy5ncHMoJ2ZpbGVuYW1lJykpOwoJCWV4dHJhY3QoJHBsdWdpbik7Cgl9CgllY2hvIHN0YXJ0 VGFibGUoJ2VkaXQnKTsKCWlmIChlbXB0eSgkaGVscCkpIHsKCQllY2hvIHRyKHRkYSgnPHA+ SGVscCBub3QgYWNjZXNzaWJsZSBmcm9tIHRoaXMgZmlsZS48L3A+JykpOwoJfSBlbHNlIHsK CQlsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2Vy cygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2lu X2dsb2JhbHNbJ2Nzc19lbmQnXSk7CgkJJHBsdWdpblsnaGVscCddID0gaWVkX3BsdWdpbl90 ZXh0aWxlKCRoZWxwLCAkY3NzLCAkc3RhcnRfY3NzLCAkZW5kX2Nzcyk7CgkJZWNobyB0cih0 ZGEoICc8cD5FeHRyYWN0ZWQgJy4oIWVtcHR5KCRwbHVnaW5bJ2hlbHAnXSkgPyAnYW5kIFRl eHRpbGUgcHJvY2Vzc2VkJyA6ICcnKS4nIGhlbHAgc2VjdGlvbiBmb2xsb3dzJiM4MjMwOzwv cD48aHI+JywgJyB3aWR0aD0iNjAwIicpKTsKCQllY2hvIHRyKHRkYSgkcGx1Z2luWydoZWxw J10sICcgd2lkdGg9IjYwMCInKSk7Cgl9CgllY2hvIGVuZFRhYmxlKCk7Cn0KCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9zZXR1cCgkbWVzc2FnZT0nJykgewoJZ2xvYmFsICRp ZWRfcGx1Z2luX3ByZWZzOwoJJG51bVJlcVByZWZzID0gY291bnQoJGllZF9wbHVnaW5fcHJl ZnNbMF0pOwoKCXBhZ2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksJG1lc3NhZ2UpOwoJJHBy ZWZrZXlzID0gZG9RdW90ZShpbXBsb2RlKCInLCciLGFycmF5X2tleXMoJGllZF9wbHVnaW5f cHJlZnNbMF0pKSk7CgkkcnMgPSBzYWZlX3Jvd3MoJ25hbWUsdmFsLGh0bWwnLCd0eHBfcHJl ZnMnLCduYW1lIGluICgnLiRwcmVma2V5cy4nKScpOwoJJG51bVJvd3MgPSBjb3VudCgkcnMp OwoKCSRidG5TYXZlID0gZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnc2F2ZScp LCAncHVibGlzaCcpOwoJJGJ0bkluc3RhbGwgPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rp b249Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fcHJl ZnNfaW5zdGFsbCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0Jywg J3N1Ym1pdCcsIGdUeHQoJ2luc3RhbGwnKSwgJ3B1Ymxpc2gnKS4nPC9mb3JtPic7CgkkYnRu UmVtb3ZlID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9aWVkX3BsdWdp bl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3ByZWZzX3JlbW92ZSIgc3R5bGU9ImRp c3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2RlbGV0 ZScpLCAncHVibGlzaCcpLic8L2Zvcm0+JzsKCSRidG5TdHlsZSA9ICcgc3R5bGU9ImJvcmRl cjowO2hlaWdodDoyNXB4Iic7CgoJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7CglpZiAoJG51 bVJvd3MgPT0gJG51bVJlcVByZWZzKSB7CgkJLy8gUHJlZnMgYWxsIGluc3RhbGxlZAoJCWVj aG8gdHIodGRhKHN0cm9uZyhpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fcHJlZnNfdGl0 bGUnKSksICcgY29sc3Bhbj0iMiInKSAuIHRkYSgkYnRuUmVtb3ZlLCAkYnRuU3R5bGUpICk7 CgkJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1pZWRfcGx1Z2lu X2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fcHJlZnNfdXBkYXRlIj4nOwoJCWZvciAo JGlkeCA9IDA7ICRpZHggPCAkbnVtUm93czsgJGlkeCsrKSB7CgkJCSRhID0gJHJzWyRpZHhd OwoJCQkkbGFiZWwgPSAnPGxhYmVsIGZvcj0iJy4kYVsnbmFtZSddLiciPicuaWVkX3BsdWdp bl9nVHh0KCRhWyduYW1lJ10pLic6PC9sYWJlbD4nOwoJCQkkb3V0ID0gdGRhKCRsYWJlbCwg JyBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Iicp OwoJCQlzd2l0Y2goJGFbJ25hbWUnXSkgewoJCQkJY2FzZSAiaWVkX3BsdWdpbl9lZGl0b3Jf cGF0aCI6CgkJCQljYXNlICJpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3BhdGgiOgoJCQkJCSRv dXQgLj0gdGQoZklucHV0KCd0ZXh0JywgJGFbJ25hbWUnXSwgJGFbJ3ZhbCddLCAnZWRpdCcs ICcnLCAnJywgNTAsICcnLCAkYVsnbmFtZSddKSk7CgkJCQkJYnJlYWs7CgkJCQljYXNlICJp ZWRfcGx1Z2luX2VkaXRvciI6Ci8vCQkJCQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRhWydu YW1lJ10sIGFycmF5KCdub25lJyA9PiAnTm9uZScsICdlZGl0X2FyZWEnID0+ICdFZGl0IEFy ZWEnLCAnY29kZXByZXNzJyA9PiAnQ29kZVByZXNzJyksICRhWyd2YWwnXSwgJycsICcgb25j aGFuZ2U9ImllZF9wbHVnaW5fcHJlZnN3YXAodGhpcy5pZCwgdGhpcy52YWx1ZSk7IicsICRh WyduYW1lJ10pKTsKCQkJCQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1lJ10sIGFy cmF5KCdub25lJyA9PiAnTm9uZScsICdlZGl0X2FyZWEnID0+ICdFZGl0IEFyZWEnKSwgJGFb J3ZhbCddLCAnJywgJyBvbmNoYW5nZT0iaWVkX3BsdWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0 aGlzLnZhbHVlKTsiJywgJGFbJ25hbWUnXSkpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiaWVk X3BsdWdpbl9oZWxwX2VkaXRvciI6CgkJCQkJJG91dCAuPSB0ZChzZWxlY3RJbnB1dCgkYVsn bmFtZSddLCBhcnJheSgndGV4dGlsZScgPT4gJ05vbmUgKFRleHRpbGUpJywgJ3RpbnlfbWNl JyA9PiAnVGlueSBNQ0UnKSwgJGFbJ3ZhbCddLCAnJywgJyBvbmNoYW5nZT0iaWVkX3BsdWdp bl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZhbHVlKTsiJywgJGFbJ25hbWUnXSkpOwoJCQkJ CWJyZWFrOwoJCQkJY2FzZSAiaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXIiOgoJCQkJCSRvdXQg Lj0gdGQocmFkaW8oJGFbJ25hbWUnXSwwLCgoJGFbJ3ZhbCddPT0wKT8xOjApKS5pZWRfcGx1 Z2luX2dUeHQoJ2llZF9wbHVnaW5fb3V0cHV0X2NvZGVfZmlyc3QnKS4iICIgLiByYWRpbygk YVsnbmFtZSddLDEsKCgkYVsndmFsJ109PTEpPzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgnaWVk X3BsdWdpbl9vdXRwdXRfaGVscF9maXJzdCcpLiIgIik7CgkJCQkJYnJlYWs7CgkJCQljYXNl ICJpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCI6CgkJCQkJJG91dCAuPSB0ZChmSW5wdXQoJ3Rl eHQnLCAkYVsnbmFtZSddLCAkYVsndmFsJ10sICdlZGl0JywgJycsICcnLCA1LCAnJywgJGFb J25hbWUnXSkpOwoJCQkJCWJyZWFrOwoJCQl9CgkJCWVjaG8gdHIoJG91dCk7CgkJfQoJCWVj aG8gdHIodGRhKCRidG5TYXZlLCAkYnRuU3R5bGUpKTsKCQllY2hvICc8L2Zvcm0+JzsKCX0g ZWxzZSBpZiAoJG51bVJvd3MgPiAwICYmICRudW1Sb3dzIDwgJG51bVJlcVByZWZzKSB7CgkJ ZWNobyB0cih0ZGEoc3Ryb25nKGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9wcmVmc19z b21lJykpLmJyLmJyCgkJCQkJCS5pZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fcHJlZnNf c29tZV9leHBsYWluJykuYnIuYnIKCQkJCQkJLmllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdp bl9wcmVmc19zb21lX29wdGlvbnMnKSwgJyBjb2xzcGFuPSIyIicpKTsKCQllY2hvIHRyKHRk YSgkYnRuUmVtb3ZlLCRidG5TdHlsZSkgLiB0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkp OwoJfSBlbHNlIHsKCQllY2hvIHRyKHRkYShpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5f cHJlZnNfbm90X2luc3RhbGxlZCcpLCAnIGNvbHNwYW49IjIiJykpOwoJCWVjaG8gdHIodGRh KCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsKCX0KCWVjaG8gZW5kVGFibGUoKTsKCgllY2hv IDw8PEVPRgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CnZhciBpZWRfcGx1Z2lu X3BhdGhfcmUgPSBuZXcgUmVnRXhwKCJeLipbL1xcXSIsICJnIikKZnVuY3Rpb24gaWVkX3Bs dWdpbl9wcmVmc3dhcChzZWxJRCwgc2VsVmFsdWUpIHsKCXZhciBpZCA9IHNlbElEKydfcGF0 aCc7Cgl2YXIgbnV2YWwgPSAoKGJhc2VuYW1lKCQoIiMiK2lkKS52YWwoKSkgPT0gc2VsVmFs dWUpID8gJCgiIyIraWQpLnZhbCgpIDogZGlybmFtZSgkKCIjIitpZCkudmFsKCkpK3NlbFZh bHVlKTsKCWlmICgkKCIjIitzZWxJRClbMF0uc2VsZWN0ZWRJbmRleCA9PSAwKSB7CgkJJCgi IyIraWQpLmF0dHIoImRpc2FibGVkIiwgdHJ1ZSk7IDsKCX0gZWxzZSB7CgkJJCgiIyIraWQp LmF0dHIoImRpc2FibGVkIiwgZmFsc2UpOyA7CgkJJCgiIyIraWQpLnZhbChudXZhbCk7Cgl9 Cn0KZnVuY3Rpb24gYmFzZW5hbWUocGF0aCwgc3VmZml4KSB7CglyZXR1cm4gcGF0aC5yZXBs YWNlKGllZF9wbHVnaW5fcGF0aF9yZSwgJycpOwp9CmZ1bmN0aW9uIGRpcm5hbWUocGF0aCkg ewogICAgcmV0dXJuIHBhdGgubWF0Y2goaWVkX3BsdWdpbl9wYXRoX3JlKTsKfQokKGZ1bmN0 aW9uKCkgewoJJCgic2VsZWN0Lmxpc3QiKS5lYWNoKGZ1bmN0aW9uKCkgewoJCWllZF9wbHVn aW5fcHJlZnN3YXAodGhpcy5pZCwgdGhpcy52YWx1ZSk7Cgl9KTsKfSk7Cjwvc2NyaXB0PgpF T0Y7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9wcmVmc19pbnN0YWxsKCkg ewoJZ2xvYmFsICRpZWRfcGx1Z2luX3ByZWZzOwoJJG1lc3NhZ2UgPSAnJzsKCWZvcmVhY2gg KCRpZWRfcGx1Z2luX3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7CgkJaWYgKCFmZXRj aCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgewoJCQkkaWQgPSBzYWZlX2lu c2VydCgndHhwX3ByZWZzJywncHJlZnNfaWQ9MSwgbmFtZT0nLmRvUXVvdGUoJHByZWYpLics IHZhbD0nLmRvUXVvdGUoZG9TbGFzaCgkZGZsdCkpLicsZXZlbnQ9ImllZF9wbHVnaW4iJyk7 CgkJfQoJfQoJJG1lc3NhZ2UgPSBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fcHJlZnNf aW5zdGFsbGVkJyk7CglpZWRfcGx1Z2luX3NldHVwKCRtZXNzYWdlKTsKfQoKLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZzX3JlbW92ZSgpIHsKCWdsb2JhbCAkaWVkX3Bs dWdpbl9wcmVmczsKCSRtZXNzYWdlID0gJyc7Cglmb3JlYWNoIChhcnJheV9tZXJnZSgkaWVk X3BsdWdpbl9wcmVmc1swXSwkaWVkX3BsdWdpbl9wcmVmc1sxXSkgYXMgJHByZWYgPT4gJGRm bHQpIHsKCQlpZiAoZmV0Y2goJ25hbWUnLCd0eHBfcHJlZnMnLCduYW1lJywkcHJlZikpIHsK CQkJJGlkID0gc2FmZV9kZWxldGUoJ3R4cF9wcmVmcycsJ25hbWU9Jy5kb1F1b3RlKCRwcmVm KSk7CgkJfQoJfQoJJG1lc3NhZ2UgPSBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fcHJl ZnNfZGVsZXRlZCcpOwoJaWVkX3BsdWdpbl9zZXR1cCgkbWVzc2FnZSk7Cn0KCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9wcmVmc191cGRhdGUoKSB7CglnbG9iYWwgJGllZF9w bHVnaW5fcHJlZnM7CgkkbWVzc2FnZSA9ICcnOwoJJHBvc3QgPSBkb1NsYXNoKHN0cmlwUG9z dCgpKTsKCWZvcmVhY2ggKCRpZWRfcGx1Z2luX3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0 KSB7CgkJaWYgKGlzc2V0KCRwb3N0WyRwcmVmXSkpIHsKCQkJc2FmZV91cGRhdGUoInR4cF9w cmVmcyIsICJ2YWwgPSAnIi4kcG9zdFskcHJlZl0uIiciLCAibmFtZSA9ICciLmRvU2xhc2go JHByZWYpLiInIGFuZCBwcmVmc19pZCA9IDEiKTsKCQl9Cgl9CgkkbWVzc2FnZSA9IGdUeHQo J3ByZWZlcmVuY2VzX3NhdmVkJyk7CglpZWRfcGx1Z2luX3NldHVwKCRtZXNzYWdlKTsKfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX2dUeHQoJHdoYXQsICRhdHRzID0gYXJy YXkoKSkgewoJJGxhbmcgPSBhcnJheSgKCQknaWVkX3BsdWdpbl9jaGVja190eXBlJyA9PiAn Q2hlY2sgeW91ciBwbHVnaW4gdHlwZSEnLAoJCSdpZWRfcGx1Z2luX2NvZGVfZGlzdCcgPT4g J1BsdWdpbiBjb2RlPGJyPmZvciBkaXN0cmlidXRpb24nLAoJCSdpZWRfcGx1Z2luX2NvbXBv c2VyJyA9PiAnUGx1Z2luIENvbXBvc2VyJywKCQknaWVkX3BsdWdpbl9jb21wcmVzcycgPT4g J1ppcCcsCgkJJ2llZF9wbHVnaW5fY3JlYXRlX25ldycgPT4gJ0NyZWF0ZSBuZXcgcGx1Z2lu JywKCQknaWVkX3BsdWdpbl9lZGl0b3InID0+ICdQbHVnaW4gZWRpdG9yJywKCQknaWVkX3Bs dWdpbl9lZGl0b3JfcGF0aCcgPT4gJ1BsdWdpbiBlZGl0b3IgcGF0aCBVUkwnLAoJCSdpZWRf cGx1Z2luX2VkaXRvcl93aWR0aCcgPT4gJ1BsdWdpbiBlZGl0b3Igd2lkdGggKGNoYXJzKScs CgkJJ2llZF9wbHVnaW5fZW5hYmxlJyA9PiAnRW5hYmxlIHBsdWdpbicsCgkJJ2llZF9wbHVn aW5fZXhwb3J0JyA9PiAnRXhwb3J0IGFzJywKCQknaWVkX3BsdWdpbl9oZWxwX2VkaXRvcicg PT4gJ0hlbHAgZWRpdG9yJywKCQknaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRoJyA9PiAn SGVscCBlZGl0b3IgcGF0aCBVUkwnLAoJCSdpZWRfcGx1Z2luX25hbWUnID0+ICdQbHVnaW4g bmFtZScsCgkJJ2llZF9wbHVnaW5fbmFtZV9maXJzdCcgPT4gJ1lvdSBhcmUgc3VwcG9zZWQg dG8gbmFtZSB0aGUgbmV3IHBsdWdpbiA7KScsCgkJJ2llZF9wbHVnaW5fbmFtZV90b29sdGlw JyA9PiAnT25seSBuZWVkZWQgaWYgdGhlIFBIUCBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGlz IE5PVCBpbiB0aGUgc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0JywKCQknaWVkX3BsdWdpbl9v dXRwdXRfY29kZV9maXJzdCcgPT4gJ0NvZGUgZmlyc3QnLAoJCSdpZWRfcGx1Z2luX291dHB1 dF9oZWxwX2ZpcnN0JyA9PiAnSGVscCBmaXJzdCcsCgkJJ2llZF9wbHVnaW5fb3V0cHV0X29y ZGVyJyA9PiAnUEhQIGV4cG9ydCBvcmRlcicsCgkJJ2llZF9wbHVnaW5fcHJlZnNfZGVsZXRl ZCcgPT4gJ1ByZWZlcmVuY2VzIGRlbGV0ZWQnLAoJCSdpZWRfcGx1Z2luX3ByZWZzX2luc3Rh bGxlZCcgPT4gJ1ByZWZlcmVuY2VzIGluc3RhbGxlZCcsCgkJJ2llZF9wbHVnaW5fcHJlZnNf bm90X2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIG5vdCBpbnN0YWxsZWQuJywKCQknaWVk X3BsdWdpbl9wcmVmc19zb21lJyA9PiAnTm90IGFsbCBwcmVmZXJlbmNlcyBhdmFpbGFibGUu JywKCQknaWVkX3BsdWdpbl9wcmVmc19zb21lX2V4cGxhaW4nID0+ICdJdCBpcyBlaXRoZXIg YmVjYXVzZSB0aGlzIGlzIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhlJy5ici4ncGx1Z2lu IHRvIG9uZSB5b3UgaGFkIGJlZm9yZSBvciB0aGUgcHJlZmVyZW5jZXMnLmJyLidoYXZlIGJl Y29tZSBjb3JydXB0IHNvbWVob3cuJywKCQknaWVkX3BsdWdpbl9wcmVmc19zb21lX29wdGlv bnMnID0+ICdDaG9vc2UgJy5nVHh0KCdkZWxldGUnKS4nIHRvIHJlbW92ZSB0aGVtIGFsbCBv ciAnLmdUeHQoJ2luc3RhbGwnKS4nIHRvIGFkZCcuYnIuJ2FueSBuZXcgb25lcywgbGVhdmlu ZyBhbGwgZXhpc3RpbmcgcHJlZmVyZW5jZXMgdW50b3VjaGVkLicsCgkJJ2llZF9wbHVnaW5f cHJlZnNfdGl0bGUnID0+ICdQbHVnaW4gQ29tcG9zZXIgcHJlZmVyZW5jZXMnLAoJCSdpZWRf cGx1Z2luX3J1bl9mcm9tJyA9PiAnUGx1Z2lucyB0aGF0IHJ1biBmcm9tJywKCQknaWVkX3Bs dWdpbl9zYXZlX2FzJyA9PiAnU2F2ZSBhcycsCgkJJ2llZF9wbHVnaW5fdHlwZScgPT4gJ1Bs dWdpbiB0eXBlJywKCQknaWVkX3BsdWdpbl90eXBlXzAnID0+ICdDbGllbnQnLAoJCSdpZWRf cGx1Z2luX3R5cGVfMScgPT4gJ0FkbWluJywKCQknaWVkX3BsdWdpbl90eXBlXzInID0+ICdM aWJyYXJ5JywKCQknaWVkX3BsdWdpbl91cGxvYWRfcGhwJyA9PiAnVXBsb2FkIHBsdWdpbiBm cm9tIFBIUCBmaWxlJywKCQknaWVkX3BsdWdpbl91dGlsaXRpZXMnID0+ICdVdGlsaXRpZXMg KDxzdHJvbmc+dXNlIG9ubHkgYWZ0ZXIgc2F2aW5nIHRoZSBkYXRhIGFib3ZlPC9zdHJvbmc+ KScsCgkpOwoJcmV0dXJuIHN0cnRyKCRsYW5nWyR3aGF0XSwgJGF0dHMpOwp9IjtzOjM6Im1k NSI7czozMjoiNjA3MGY0NjY2YjQyZjJjM2Q3YzgyYTcwMzBjYTBiNzkiO30=