# Name: smd_bio v0.3 # Type: Admin/Client side plugin # Customisable user biographies / profile info # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxNDp7czo0OiJuYW1lIjtzOjc6InNtZF9iaW8iO3M6NzoidmVyc2lvbiI7czozOiIwLjMi O3M6ODoicmV2aXNpb24iO3M6MDoiIjtzOjY6ImF1dGhvciI7czoxMToiU3RlZiBEYXdzb24i O3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS8iO3M6MTE6 ImRlc2NyaXB0aW9uIjtzOjQ0OiJDdXN0b21pc2FibGUgdXNlciBiaW9ncmFwaGllcyAvIHBy b2ZpbGUgaW5mbyI7czo1OiJvcmRlciI7czoxOiI1IjtzOjQ6InR5cGUiO3M6MToiMSI7czo1 OiJmbGFncyI7czowOiIiO3M6MTA6ImxvYWRfb3JkZXIiO3M6MToiNSI7czo0OiJoZWxwIjtz OjE4ODAzOiI8ZGl2IGlkPSJzbWRfaGVscCI+CgoJPGgxPnNtZF9iaW88L2gxPgoKCTxwPkNv bmZpZ3VyZSBhZGRpdGlvbmFsIHVzZXIgYmlvZ3JhcGhpY2FsIGluZm9ybWF0aW9uIHRvIGJl IGNvbGxlY3RlZCB3aGVuIGF1dGhvcnMgYXJlIGNyZWF0ZWQsIHRoZW4gc2hvdyB0aGF0IGlu Zm8gYXMgYnlsaW5lcyBhZ2FpbnN0IHlvdXIgYXJ0aWNsZXMuIEEgYml0IGxpa2UgY3VzdG9t IGZpZWxkcyBmb3IgdXNlciBpbmZvLjwvcD4KCgk8aDI+RmVhdHVyZXM8L2gyPgoKCTx1bD4K CQk8bGk+RGVmaW5lIG9ubHkgdGhlIGluZm8geW91IHJlcXVpcmUgdG8gYmUgY29sbGVjdGVk IGFib3V0IHlvdXIgYXV0aG9ycyAmIzgyMTI7IHRvdGFsbHkgY3VzdG9taXNhYmxlPC9saT4K CQk8bGk+SW5mbyBpcyBjb2xsZWN0ZWQvZWRpdGVkIG9uIHRoZSBBZG1pbi0mZ3Q7VXNlcnMg dGFiIGJlbmVhdGggdGhlIGV4aXN0aW5nIHVzZXIgaW5mbzwvbGk+CgkJPGxpPkNob29zZSBm cm9tIGEgdmFyaWV0eSBvZiB0eXBlcyBvZiBjb250ZW50OiB0ZXh0LCByYWRpbyBidXR0b25z LCBzZWxlY3QgbGlzdHMsIGNoZWNrYm94ZXMsIGltYWdlcyYjODIzMDs8L2xpPgoJCTxsaT5P dXRwdXQgYW55IHBpZWNlcyBvZiB0aGUgYmlvZ3JhcGhpY2FsIGluZm8gaW4geW91ciBhcnRp Y2xlIGZsb3cgdXNpbmcgYSBzaW5nbGUsIGZsZXhpYmxlIHRhZzwvbGk+CgkJPGxpPkltYWdl IHRodW1ibmFpbCBwcmV2aWV3L3NlbGVjdGlvbiBvbiB0aGUgQWRtaW4tJmd0O1VzZXJzIHRh YjwvbGk+CgkJPGxpPk9wdGlvbmFsIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IHRv IG1vZGlmeSB0aGUgbGF5b3V0IG9mIHRoZSBBZG1pbi0mZ3Q7VXNlcnMgdGFiPC9saT4KCTwv dWw+CgoJPGgyPkF1dGhvciAvIENyZWRpdHM8L2gyPgoKCTxwPjxhIGhyZWY9Imh0dHA6Ly9z dGVmZGF3c29uLmNvbS9jb250YWN0Ij5TdGVmIERhd3NvbjwvYT4uIFRoZSBwbHVnaW4gaXMg YSBsb2dpY2FsIGV4dGVuc2lvbiBvZiBwdmNfdXNlcnNfaW5mbyBieSBQZXRlciBWLiBDb29r ICh0aGUgc21kX2Jpb19hcnRpY2xlcyB0YWcgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMg cHZjX2F1dGhvcl9hcnRpY2xlcykuIFRoYW5rcyBhbHNvIHRvIHBpZW1hbiBmb3Igc2V0dGlu ZyB0aGUgd2hlZWxzIGluIG1vdGlvbiBhbmQgbmV0LWNhcnZlciBmb3IgaGlzIGluaW1pdGFi bGUga25hY2sgb2YgbWFraW5nIHRoaW5ncyBiZXR0ZXIuPC9wPgoKCTxoMj5JbnN0YWxsYXRp b24gLyBVbmluc3RhbGxhdGlvbjwvaDI+CgoJPHAgY2xhc3M9InJlcXVpcmVkIj5SZXF1aXJl cyBUZXh0cGF0dGVybiA0LjIuMCs8L3A+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9t IGVpdGhlciA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTExNi9z bWRfYmlvIj50ZXh0cGF0dGVybi5vcmc8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0 ZWZkYXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50 byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gQWRtaW4gLSZndDsgUGx1Z2lu cyBwYW5lLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi4gVmlzaXQgdGhlIDxhIGhy ZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0zMTQ5 NiI+Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUg c3VjY2VzcyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPHA+V2hlbiB5b3Ug Zmlyc3QgdmlzaXQgdGhlIEV4dGVuc2lvbi0mZ3Q7QmlvIENvbmZpZyBwYWdlLCB0aGUgZXh0 cmEgdGFibGVzIHdpbCBiZSBpbnN0YWxsZWQgYXV0b21hdGljYWxseS48L3A+CgoJPHA+VG8g dW5pbnN0YWxsLCBzaW1wbHkgZGVsZXRlIGZyb20gdGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMg cGFnZS4gQnV0IG5vdGUgdGhlIGV4dHJhIHRhYmxlcyB3aWxsIHJlbWFpbiB1bnRpbCB5b3Ug ZGVsZXRlIHRoZW0gbWFudWFsbHkuIEEgcGxhbm5lZCBmZWF0dXJlIGlzIHRvIGFkZCBidXR0 b25zIHRvIHRoZSBpbnRlcmZhY2UgdG8gYWxsb3cgZGVsZXRpb24gb2YgYWxsIGFkZGl0aW9u YWwgYmlvIGluZm9ybWF0aW9uIGFuZC9vciByZW1vdmFsIG9mIHRoZSB1bmRlcmx5aW5nIHRh Ymxlcy48L3A+CgoJPGgyPkNvbmZpZ3VyaW5nIGJpbyBpdGVtczwvaDI+CgoJPHA+VmlzaXQg dGhlIEV4dGVuc2lvbnMtJmd0O0JpbyBjb25maWcgdGFiLiBBZGQgYmlvIGl0ZW1zIHN1Y2gg YXMgY2VsbC93b3JrL2ZheCBudW1iZXJzLCBkZXBhcnRtZW50LCBtdWdzaG90LCBwb3N0YWwg YWRkcmVzcywgam9iIHRpdGxlLCB3aGF0ZXZlciB5b3Ugd2lzaC4gSnVzdCBhZGQgb25lIGF0 IGEgdGltZSBhbmQgaGl0IFNhdmUgaW4gYmV0d2Vlbi4gVGhlIGl0ZW1zIHdpbGwgYmUgbGlz dGVkIGJlbG93IHRoZSBmb3JtLCBhbmQgY2FuIGJlIHNvcnRlZCBhdCB3aWxsLiBFYWNoIGl0 ZW0gY29tcHJpc2VzOjwvcD4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+TmFtZTwvc3Ryb25nPiA6 IGFuIGludGVybmFsIG5hbWUgd2l0aCB3aGljaCB5b3Ugd2lzaCB0byByZWZlciB0byB5b3Vy IGJpbyBpdGVtLiBBdm9pZCBjaGFyYWN0ZXJzIHN1Y2ggYXMgc3BhY2VzIGFuZCAmIzgyMTY7 d2VpcmQmIzgyMTc7IGNoYXJhY3RlcnMgaGVyZTwvbGk+CgkJPGxpPjxzdHJvbmc+VGl0bGU8 L3N0cm9uZz4gOiBhIGh1bWFuLWZyaWVuZGx5IG5hbWUgZm9yIHlvdXIgYmlvIGl0ZW0uIFRo aXMgaXMgZGlzcGxheWVkIHRvIHRoZSBsZWZ0IG9mIHRoZSBpbnB1dCBjb250cm9sIG9uIHRo ZSBBZG1pbi0mZ3Q7VXNlcnMgcGFuZWwsIGFuZCBhcyBhIGxhYmVsIG9uIHlvdXIgYXJ0aWNs ZSBwYWdlczwvbGk+CgkJPGxpPjxzdHJvbmc+VHlwZTwvc3Ryb25nPiA6IHRoZSB0eXBlIG9m IGRhdGEgeW91IHdpc2ggdG8gY29sbGVjdC4gVGhpcyB3aWxsIGJlIHRoZSB2YXJpZXR5IG9m IGlucHV0IGNvbnRyb2wgeW91IHNlZSBvbiB0aGUgQWRtaW4tJmd0O1VzZXJzIHRhYjwvbGk+ CgkJPGxpPjxzdHJvbmc+U2l6ZTwvc3Ryb25nPiA6IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBj aG9zZW4gaW5wdXQgY29udHJvbC4gVGFrZXMgb25lIG9yIHR3byBjb21tYS1zZXBhcmF0ZWQg dmFsdWVzLCB0aGUgaW50ZXJwcmV0YXRpb24gb2Ygd2hpY2ggZGVwZW5kcyBvbiB0aGUgaXRl bSA8ZW0+VHlwZTwvZW0+OgoJPHVsPgoJCTxsaT5mb3IgdGV4dC1iYXNlZCBpbnB1dCBmaWVs ZHMsIHRoZSBmaXJzdCBpcyB0aGUgd2lkdGggb2YgdGhlIGJveCAoaW4gY2hhcmFjdGVycykg YW5kIHRoZSBzZWNvbmQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYSB1 c2VyIGNhbiB0eXBlICgwID0gbGVhdmUgYXQgZGVmYXVsdCk8L2xpPgoJCTxsaT5mb3IgdGV4 dGFyZWFzLCBpdCBpcyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYm94IGluIGNoYXJh Y3RlcnMsIHJlc3BlY3RpdmVseTwvbGk+CgkJPGxpPmZvciBpbWFnZXMsIHRoZSB0d28gdmFs dWVzIGFyZSB0aGUgeCBhbmQgeSBkaW1lbnNpb25zIG9mIHRoZSBpbWFnZS90aHVtYm5haWwg b24gdGhlIEFkbWluLSZndDtVc2VycyB0YWIuIElmIG9ubHkgb25lIHZhbHVlIGlzIGdpdmVu LCB0aGUgaW1hZ2Ugd2lsbCBiZSBzcXVhcmUuIElmIGVpdGhlciB2YWx1ZSBpcyBvbWl0dGVk LCB0aGUgaW1hZ2Ugb3IgdGh1bWJuYWlsIGRpbWVuc2lvbnMgKGFzIHN0b3JlZCBpbiB0aGUg ZGF0YWJhc2UpIGFyZSB1c2VkIGluc3RlYWQ8L2xpPgoJCTxsaT5mb3Igb3RoZXIgdHlwZXMs IHRoZSBTaXplIGlzIGN1cnJlbnRseSB1bnVzZWQ8L2xpPgoJPC91bD48L2xpPgoJCTxsaT48 c3Ryb25nPlZhbHVlPC9zdHJvbmc+IDogZGVwZW5kcyBvbiB0aGUgaXRlbSA8ZW0+VHlwZTwv ZW0+OgoJPHVsPgoJCTxsaT5mb3IgdGV4dC1iYXNlZCBpdGVtcywgdGhpcyBpcyB0aGUgZGVm YXVsdCB2YWx1ZSB0aGF0IHdpbGwgYmUgaW4gdGhlIHRleHQgYm94LiBZb3UgY2FuIHVzZSB0 aGlzIHRvIGluaXRpYWxpc2UgYW4gZW50cnksIG9yIG9mZmVyIGluc3RydWN0aW9ucyBsaWtl ICYjODIyMDtUeXBlIHlvdXIgam9iIGRlc2NyaXB0aW9uIGhlcmUmIzgyMjE7PC9saT4KCQk8 bGk+Zm9yIGxpc3QsIHJhZGlvIGFuZCBjaGVja2JveCBpdGVtcywgdGhpcyBpcyB1c2VkIHRv IGNvbmZpZ3VyZSB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIEVpdGhlciBwdXQgb25lIGl0ZW0g cGVyIGxpbmUgb3IgdXNlIGEgY29tbWEgdG8gc2VwYXJhdGUgZWFjaCBpdGVtLiBJZiB5b3Ug anVzdCBsaXN0IGl0ZW1zLCB0aGV5IHdpbGwgYmUgdXNlZCBhcyBsYWJlbHMgZXhhY3RseSBh cyB5b3UgZGVmaW5lIHRoZW0uIFdoZW4gcmVmZXJyaW5nIHRvIHRoZW0gaW4gPGNvZGU+Jmx0 O3R4cDpzbWRfYmlvX2luZm8gLyZndDs8L2NvZGU+IHRoZWlyIDxlbT5uYW1lczwvZW0+IHdp bGwgYmUgYWxsIGxvd2VyIGNhc2UsIGhhdmUgJiM4MjE2O25vbi13ZWItc2FmZSYjODIxNzsg Y2hhcmFjdGVycyByZW1vdmVkLCBhbmQgd2lsbCBoYXZlIHNwYWNlcyBjb252ZXJ0ZWQgdG8g dW5kZXJzY29yZXMuIElmIHlvdSB3aXNoIHRvIGRlZmluZSB5b3VyIG93biBuYW1lcyBhbmQg bGFiZWxzLCB1c2UgdGhlIHN5bnRheDogPGNvZGU+b3B0aW9uX25hbWUxID0mZ3Q7IG9wdGlv bl9sYWJlbDEsIG9wdGlvbl9uYW1lMiA9Jmd0OyBvcHRpb25fbGFiZWwyLCAuLi48L2NvZGU+ LiBGb3IgZXhhbXBsZSBhIERlcGFydG1lbnRzIGRyb3Bkb3duIGxpc3QgbWlnaHQgYmUgZGVm aW5lZCBhcyA8Y29kZT5zYWxlcyA9Jmd0OyBTYWxlcywgbWt0ZyA9Jmd0OyBNYXJrZXRpbmcs IGVuZyA9Jmd0OyBFbmdpbmVlcmluZywgcXVhbCA9Jmd0OyBRdWFsaXR5IGFzc3VyYW5jZSwg aXQgPSZndDsgVGVjaCBzdXBwb3J0PC9jb2RlPiBvciA8Y29kZT5TYWxlcywgTWFya2V0aW5n LCBFbmdpbmVlcmluZywgUXVhbGl0eSBhc3N1cmFuY2UsIFRlY2ggc3VwcG9ydDwvY29kZT4g JiM4MjEyOyBpbiB3aGljaCBjYXNlIHlvdSB3b3VsZCByZWZlciB0byB5b3VyIG5ldyBpdGVt cyB3aXRoIHRoZXNlIG5hbWVzLCByZXNwZWN0aXZlbHk6IDxjb2RlPnNhbGVzLCBtYXJrZXRp bmcsIGVuZ2luZWVyaW5nLCBxdWFsaXR5X2Fzc3VyYW5jZSwgdGVjaF9zdXBwb3J0PC9jb2Rl Pi4gSW4gc2VsZWN0IGxpc3RzLCB5b3UgbWF5IHB1dCBhbiBlbXB0eSBpdGVtIGF0IHRoZSB0 b3AgaWYgeW91IHdpc2guIEluIHNlbGVjdCBsaXN0cyBhbmQgcmFkaW8gc2V0cyB5b3UgbWF5 IGFsc28gbWFyayBvbmUgbGFiZWwgd2l0aCA8Y29kZT5bKl08L2NvZGU+IHRvIGluZGljYXRl IGl0IGlzIHRoZSBkZWZhdWx0PC9saT4KCQk8bGk+Zm9yIGltYWdlcywgaXQgY2FuIGJlIHVz ZWQgdG8gc3BlY2lmeSB0aGUgcGFyZW50IGNhdGVnb3J5IG5hbWUgdW5kZXIgd2hpY2ggdGhl IGRlc2lyZWQgaW1hZ2VzIGFyZSBzdG9yZWQuIElmIG9taXR0ZWQsIGFsbCBpbWFnZXMgYXJl IGF2YWlsYWJsZSBpbiB0aGUgaW1hZ2Ugc2VsZWN0IGxpc3Q8L2xpPgoJPC91bD48L2xpPgoJ CTxsaT48c3Ryb25nPlBvc2l0aW9uPC9zdHJvbmc+IDogdGhlIG9yZGVyIGluIHdoaWNoIHRo ZSBpdGVtcyBhcHBlYXIgb24gdGhlIEFkbWluLSZndDtVc2VycyB0YWIuIFRoZSBsb3dlciB0 aGUgbnVtYmVyIHRoZSBoaWdoZXIgdXAgdGhlIHNjcmVlbiBpdCB3aWxsIGJlLiBUaGUgbnVt YmVycyA8ZW0+ZG8gbm90PC9lbT4gaGF2ZSB0byBiZSBzZXF1ZW50aWFsICYjODIxMjsgaXQg aXMgYWR2aXNlZCB5b3Ugc2V0IHRoZW0gd2l0aCBhIGdhcCBiZXR3ZWVuIHRoZW0gKGUuZy4g MTAgb3IgMjApIHNvIHlvdSBjYW4gYWx0ZXIgdGhlIG9yZGVyIGZhaXJseSBlYXNpbHk8L2xp PgoJPC91bD4KCgk8cD5Ob3RlIHRoYXQgdGhlIERhdGUvdGltZSBUeXBlIGlzIGZ1bmN0aW9u YWxseSBpZGVudGljYWwgdG8gYSBUZXh0IGJveC4gVGhpcyBtYXkgY2hhbmdlIGluIGZ1dHVy ZS48L3A+CgoJPGgyPkVudGVyaW5nIHVzZXIgZGF0YTwvaDI+CgoJPHA+WW91ciBjb25maWd1 cmVkIGl0ZW1zIHdpbGwgYXBwZWFyIG9uIHRoZSBBZG1pbi0mZ3Q7VXNlcnMgdGFiIGJlbmVh dGggdGhlIHVzdWFsIGNyb3Agb2YgZGF0YSBpbnB1dCBjb250cm9scy4gU2ltcGx5IGVudGVy IGRhdGEgaW4gdGhlbSBhbmQgaXQgd2lsbCBiZSBzYXZlZCBhbG9uZyB3aXRoIHRoZSBleGlz dGluZyB1c2VyIGRhdGEuIEhpdCA8ZW0+RWRpdDwvZW0+IGFuZCBhbnkgY29uZmlndXJlZCBp bmZvIHdpbGwgYmUgcmV0cmlldmVkIGZvciBlZGl0aW5nLjwvcD4KCgk8cD5XaGVuIGNob29z aW5nIGFuIGltYWdlLCB5b3UgY2FuIGVpdGhlciB0eXBlIGl0cyBJRCBpbiB0aGUgYm94IG9y IHVzZSB0aGUgZHJvcGRvd24gc2VsZWN0IGxpc3QgdG8gY2hvb3NlIGFuIGltYWdlLiBUaGUg Y2hvc2VuIGltYWdlIHdpbGwgYXBwZWFyIGJlbG93IHRoZSBpbnB1dCBjb250cm9scy48L3A+ CgoJPHA+SWYgeW91IHdpc2ggdG8gYWx0ZXIgdGhlIGxheW91dCBvZiB0aGUgaW5wdXQgY29u dHJvbHMsIHlvdSBtYXkgY3JlYXRlIGEgc3RhbmRhcmQgc3R5bGVzaGVldCBpbiBQcmVzZW50 YXRpb24tJmd0O1N0eWxlIGFuZCBuYW1lIGl0IDxjb2RlPnNtZF9iaW88L2NvZGU+LiBJdCB3 aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5LjwvcD4KCgk8cD5UbyB2aWV3IHRoZSBleHRl bmRlZCBiaW8gaW5mb3JtYXRpb24gZm9yIGEgdXNlciwgaG92ZXIgb3ZlciB0aGUgPGVtPkVk aXQ8L2VtPiBsaW5rIG9mIGFuIGl0ZW0gaW4gdGhlIGxpc3Q7IGEgdG9vbHRpcCB3aWxsIGFw cGVhciBzaG93aW5nIHNvbWUgb2YgdGhlIGV4dGVuZGVkIGJpby48L3A+CgoJPGgyPkRpc3Bs YXlpbmcgdXNlciBiaW8gaW5mbzwvaDI+CgoJPGgzPjxjb2RlPiZsdDt0eHA6c21kX2Jpb19p bmZvJmd0OzwvY29kZT48L2gzPgoKCTxwPlVzZSB0aGlzIHRhZyB0byBkaXNwbGF5IHBpZWNl cyBvZiBpbmZvIGZyb20gdGhlIGJpb2dyYXBoeS4gT25lIG9yIG1vcmUgb2YgdGhlc2UgdGFn cyBjYW4gYmUgZW1wbG95ZWQgZGVwZW5kaW5nIG9uIGhvdyB5b3UgcHJlZmVyIHRvIHdvcmsu IEl0IG1heSBhbHNvIGJlIHVzZWQgYXMgYSBjb250YWluZXIgKG9yIHZpYSB0aGUgPGNvZGU+ Zm9ybTwvY29kZT4gYXR0cmlidXRlKSB0byBhbGxvdyB5b3UgdG8gZW1iZWQgb3RoZXIgVGV4 cGF0dGVybiB0YWdzIGFuZC9vciBzcGVjaWFsIDxhIGhyZWY9IiNyZXB0YWdzIj5yZXBsYWNl bWVudCB0YWdzPC9hPiB0byBmb3JtYXQgdGhlIG91dHB1dC48L3A+CgoJPHA+VXNlIHRoZSBm b2xsb3dpbmcgYXR0cmlidXRlcyB0byB0d2VhayB0aGUgb3V0cHV0OjwvcD4KCgk8dWw+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5hdXRob3I8L3NwYW4+IDogbGlzdCBvZiBhdXRob3Ig bG9naW4gbmFtZXMgeW91IHdpc2ggdG8gZGlzcGxheSBpbmZvIGZyb20uIElmIG9taXR0ZWQs IHRoZSBjdXJyZW50IChpbmRpdmlkdWFsIGFydGljbGUpIGF1dGhvciB3aWxsIGJlIHVzZWQu IFlvdSBtYXkgc3BlY2lmeSBhbnkgaXRlbSBhcyA8Y29kZT5TTURfUFJJVlM6PC9jb2RlPiBh bmQgdGhlbiBjb2xvbi1zZXBhcmF0ZSBwcml2IG51bWJlcnMuIEFueSB1c2VycyB3aXRoIHRo b3NlIG1hdGNoaW5nIGxldmVsKHMpIHdpbGwgYmUgZGlzcGxheWVkPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPml0ZW1zPC9zcGFuPiA6IGxpc3Qgb2YgYmlvIGl0ZW0gPGVtPm5h bWVzPC9lbT4geW91IHdpc2ggdG8gZGlzcGxheSwgaW4gdGhlIG9yZGVyIHlvdSB3aXNoIHRv IGRpc3BsYXkgdGhlbS4gRGVmYXVsdHMgdG8gYWxsIGl0ZW1zLiBOb3RlIHlvdSBjYW4gYWxz byB1c2UgYmlvIGluZm9ybWF0aW9uIGZyb20gdGhlIHN0YW5kYXJkIDxzcGFuIGNsYXNzPSJj YXBzIj5UWFA8L3NwYW4+IHVzZXIgaW5mbywgaS5lLiB5b3UgY2FuIHVzZSBhbnkgb2YgdGhl IGZvbGxvd2luZywgKGNhc2Ugc2Vuc2l0aXZlKSA6Cgk8dWw+CgkJPGxpPjxjb2RlPnVzZXJf aWQ8L2NvZGU+PC9saT4KCQk8bGk+PGNvZGU+bmFtZTwvY29kZT4gKGxvZ2luIG5hbWUpPC9s aT4KCQk8bGk+PGNvZGU+UmVhbE5hbWU8L2NvZGU+PC9saT4KCQk8bGk+PGNvZGU+ZW1haWw8 L2NvZGU+PC9saT4KCQk8bGk+PGNvZGU+cHJpdnM8L2NvZGU+PC9saT4KCQk8bGk+PGNvZGU+ bGFzdF9hY2Nlc3M8L2NvZGU+PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPmV4Y2x1ZGU8L3NwYW4+IDogbGlzdCBvZiBiaW8gaXRlbSA8ZW0+bmFtZXM8L2Vt PiB5b3UgZG8gPHN0cm9uZz5ub3Q8L3N0cm9uZz4gd2lzaCB0byBkaXNwbGF5LiBUaGlzIG92 ZXJyaWRlcyA8Y29kZT5pdGVtczwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+Zm9ybTwvc3Bhbj4gOiB0aGUgbmFtZSBvZiBhIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8 L3NwYW4+IEZvcm0gd2l0aCB3aGljaCB0byBwcm9jZXNzIGVhY2ggaXRlbS4gSWYgbm90IHNw ZWNpZmllZCwgdGhlIHRhZyYjODIxNztzIGNvbnRhaW5lciB3aWxsIGJlIHVzZWQgaW5zdGVh ZC4gSWYgdGhlIGNvbnRhaW5lciBpcyBlbXB0eSwgZGVmYXVsdCBvdXRwdXQgaXMgdXNlZDwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5pdGVtd3JhcHRhZzwvc3Bhbj4gOiAoWClI VE1MIHRhZyB0byB3cmFwIGFyb3VuZCBlYWNoIGl0ZW08L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+aXRlbWNsYXNzPC9zcGFuPiA6IGZpeGVkIDxzcGFuIGNsYXNzPSJjYXBzIj5D U1M8L3NwYW4+IGNsYXNzIG5hbWUgdG8gYWRkIHRvIGVhY2ggaXRlbS4gVGhlIGRlZmF1bHQg aXMgdG8gYXV0b21hdGljYWxseSBhc3NpZ24gPGNvZGU+c21kX2Jpb19uYW1lX29mX2l0ZW08 L2NvZGU+IChlLmcuIHNtZF9iaW9fY2VsbCwgc21kX2Jpb19kZXB0LCBldGMpPC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmJyZWFrPC9zcGFuPiA6IChYKUhUTUwgdGFnIHRvIHB1 dCBiZXR3ZWVuIGVhY2ggaXRlbTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj53cmFw dGFnPC9zcGFuPiA6IChYKUhUTUwgdGFnIHRvIHdyYXAgYXJvdW5kIGVhY2ggYXV0aG9yJiM4 MjE3O3MgcmVjb3JkPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzPC9zcGFu PiA6IDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNzIHRvIGFwcGx5IHRvIHRo ZSB3cmFwdGFnPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxhYmVsdGFnPC9zcGFu PiA6IChYKUhUTUwgdGFnIHRvIHdyYXAgYXJvdW5kIHRoZSBpdGVtJiM4MjE3O3MgbGFiZWwg KGlmIHVzZWQpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxhYmVsY2xhc3M8L3Nw YW4+IDogPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgdG8gYXBwbHkgdG8g dGhlIGxhYmVsLiBUaGUgZGVmYXVsdCBpcyB0byBhdXRvbWF0aWNhbGx5IGFzc2lnbiA8Y29k ZT5zbWRfYmlvX25hbWVfb2ZfaXRlbTwvY29kZT4gKGUuZy4gc21kX2Jpb19waG9uZSwgc21k X2Jpb19ob21lX2FkZHJlc3MsIGV0Yyk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ bGFiZWw8L3NwYW4+IDogd2hldGhlciB0byBkaXNwbGF5IGEgbGFiZWwgb3Igbm90IGZvciBl YWNoIGl0ZW0uIENob29zZSBmcm9tOgoJPHVsPgoJCTxsaT48c3Ryb25nPjE8L3N0cm9uZz4g OiAoZGVmYXVsdCkgRGlzcGxheSB0aGUgVGl0bGUgb2YgdGhlIGl0ZW08L2xpPgoJCTxsaT48 c3Ryb25nPjA8L3N0cm9uZz4gOiBEaXNwbGF5IHRoZSBOYW1lIG9mIHRoZSBpdGVtPC9saT4K CQk8bGk+PHN0cm9uZz5zb21lIGxhYmVsPC9zdHJvbmc+IDogRGlzcGxheSB0aGUgZ2l2ZW4g dGV4dCBhcyBhIGxhYmVsPC9saT4KCQk8bGk+JiM4MjIwOyYjODIyMTsgKGkuZS4gZW1wdHkp IDogRG8gbm90IGRpc3BsYXkgYW55IGxhYmVsPC9saT4KCTwvdWw+PC9saT4KCTwvdWw+CgoJ PGg0IGlkPSJyZXB0YWdzIj5SZXBsYWNlbWVudCB0YWdzPC9oND4KCgk8cD5JbnNpZGUgdGhl IHNtZF9iaW9faW5mbyA8Y29kZT5mb3JtPC9jb2RlPiBvciBjb250YWluZXIgeW91IG1heSB1 dGlsaXNlIHNwZWNpYWwgcmVwbGFjZW1lbnQgdGFncyB0aGF0IGFsbG93IHlvdSB0byBkaXNw bGF5IGFueSBwaWVjZXMgb2YgY29udGVudCBmcm9tIHRoZSBjdXJyZW50IGl0ZW0uIFRoZSBj b3JlIHJlcGxhY2VtZW50IHRhZ3MgYXJlOjwvcD4KCgk8dWw+CgkJPGxpPjxjb2RlPntzbWRf YmlvX2luZm9faXRlbX08L2NvZGU+IDogdGhlIGdpdmVuIHZhbHVlIG9mIHRoZSBjdXJyZW50 IGl0ZW08L2xpPgoJCTxsaT48Y29kZT57c21kX2Jpb19pbmZvX25hbWV9PC9jb2RlPiA6IHRo ZSBzYW5pdGl6ZWQgbmFtZSBvZiB0aGUgY29sdW1uIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBp dGVtPC9saT4KCQk8bGk+PGNvZGU+e3NtZF9iaW9faW5mb190aXRsZX08L2NvZGU+IDogdGhl IGh1bWFuLWZyaWVuZGx5IHRpdGxlIHlvdSBhc3NpZ25lZCB0aGlzIGl0ZW08L2xpPgoJCTxs aT48Y29kZT57c21kX2Jpb19pbmZvX2l0ZW1jbGFzc308L2NvZGU+IDogdGhlIG5hbWUgb2Yg dGhlIGNsYXNzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGl0ZW08L2xpPgoJCTxsaT48Y29kZT57 c21kX2Jpb19pbmZvX2xhYmVsY2xhc3N9PC9jb2RlPiA6IHRoZSBuYW1lIG9mIHRoZSBjbGFz cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpdGVtJiM4MjE3O3MgbGFiZWw8L2xpPgoJCTxsaT48 Y29kZT57c21kX2Jpb18qbmFtZSp9PC9jb2RlPiA6IHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQg aXRlbSAoZS5nLiA8Y29kZT5zbWRfYmlvX2NlbGw8L2NvZGU+LCA8Y29kZT5zbWRfYmlvX2Rl cGFydG1lbnQ8L2NvZGU+LCBldGMpPC9saT4KCTwvdWw+CgoJPHA+SWYgeW91IGhhdmUgZWxl Y3RlZCB0byBleHRyYWN0IGEgbGlzdCBpdGVtIHN1Y2ggYXMgcmFkaW8sIGxpc3Qgb3IgY2hl Y2tib3ggeW91IHdpbGwgaGF2ZSBzb21lIG1vcmUgcmVwbGFjZW1lbnQgdGFncyBpbiB0aGUg Zm9sbG93aW5nIGZvcm1hdDo8L3A+CgoJPHVsPgoJCTxsaT48Y29kZT57c21kX2Jpb18qbmFt ZSpfaXRlbV9OfTwvY29kZT4gOiB0aGUgdmFsdWUgb2YgZWFjaCBuYW1lZCBpdGVtIGluIHR1 cm4sIHdoZXJlIE4gc3RhcnRzIGF0IDEgYW5kIGluY3JlbWVudHM8L2xpPgoJCTxsaT48Y29k ZT57c21kX2Jpb18qbmFtZSpfbGFiZWxfTn08L2NvZGU+IDogdGhlIHZhbHVlIG9mIGVhY2gg bmFtZWQgaXRlbSYjODIxNztzIGxhYmVsIGluIHR1cm4uIEFnYWluLCBOIHN0YXJ0cyBhdCAx IGFuZCBjb3VudHMgdXAgZm9yIGV2ZXJ5IGl0ZW0gaW4geW91ciBsaXN0PC9saT4KCQk8bGk+ PGNvZGU+e3NtZF9iaW9fKm5hbWUqX2Nob3Nlbl9OfTwvY29kZT4gOiB0aGUgdmFsdWUgb2Yg ZWFjaCBzZWxlY3RlZCBpdGVtIGluIHR1cm4sIHdoZXJlIE4gc3RhcnRzIGF0IDEgYW5kIGlu Y3JlbWVudHMuIEZvciBzZWxlY3QgYW5kIHJhZGlvIGxpc3RzIHRoZXJlIHdpbGwgYmUgb25s eSBvbmU7IGZvciBjaGVja2JveCBncm91cHMgdGhlcmUgbWF5IGJlIG1vcmU8L2xpPgoJCTxs aT48Y29kZT57c21kX2Jpb18qbmFtZSpfY2hvc2VuX2xhYmVsX059PC9jb2RlPiA6IHRoZSB2 YWx1ZSBvZiBlYWNoIHNlbGVjdGVkIGl0ZW0mIzgyMTc7cyBsYWJlbCBpbiB0dXJuLCB3aGVy ZSBOIHN0YXJ0cyBhdCAxIGFuZCBpbmNyZW1lbnRzPC9saT4KCQk8bGk+PGNvZGU+e3NtZF9i aW9fKm5hbWUqX2NvdW50fTwvY29kZT4gOiB0aGUgdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRz IGluIHRoZSBuYW1lZCBsaXN0PC9saT4KCQk8bGk+PGNvZGU+e3NtZF9iaW9fKm5hbWUqX2No b3Nlbl9jb3VudH08L2NvZGU+IDogdGhlIHRvdGFsIG51bWJlciBvZiBzZWxlY3RlZCBlbGVt ZW50cyBpbiB0aGUgbmFtZWQgbGlzdDwvbGk+Cgk8L3VsPgoKCTxoND5SZXBsYWNlbWVudCB0 YWcgbm90ZXM8L2g0PgoKCTxwPklmIHlvdSBleHRyYWN0IG1vcmUgdGhhbiBvbmUgaXRlbSBh dCBvbmNlIGluIHlvdXIgPGNvZGU+aXRlbXM8L2NvZGU+IGF0dHJpYnV0ZSwgdGhlIGluZGl2 aWR1YWwgbmFtZWQgcmVwbGFjZW1lbnQgdmFyaWFibGUgd29uJiM4MjE3O3QgYmUgYXZhaWxh YmxlIHVudGlsIHRoZSBwbHVnaW4gaGFzIGRpc2NvdmVyZWQgdGhlbS4gRm9yIGV4YW1wbGU6 PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpz bWRfYmlvX2luZm8gaXRlbXM9JnF1b3Q7Y2VsbCwgbXVnLCBkZXB0JnF1b3Q7Jmd0Owp7c21k X2Jpb19pbmZvX3RpdGxlfToge3NtZF9iaW9fY2VsbH0mbHQ7YnIgLyZndDsKe3NtZF9iaW9f aW5mb190aXRsZX06IHtzbWRfYmlvX211Z30mbHQ7YnIgLyZndDsKe3NtZF9iaW9faW5mb190 aXRsZX06IHtzbWRfYmlvX2RlcHR9Jmx0O2JyIC8mZ3Q7CiZsdDsvdHhwOnNtZF9iaW9faW5m byZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPndvdWxkIG91dHB1dDo8L3A+Cgo8cHJlIGNsYXNz PSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj5Nb2JpbGUgbnVtYmVyOiA1NTUtU1FVSUQK TW9iaWxlIG51bWJlcjoge3NtZF9iaW9fbXVnfQpNb2JpbGUgbnVtYmVyOiB7c21kX2Jpb19k ZXB0fQpNdWdzaG90OiA1NTUtU1FVSUQKTXVnc2hvdDogMgpNdWdzaG90OiB7c21kX2Jpb19k ZXB0fQpEZXB0OiA1NTUtU1FVSUQKRGVwdDogMgpEZXB0OiBlbmcKPC9jb2RlPjwvcHJlPgoK CTxwPk5vdCBxdWl0ZSB3aGF0IHlvdSB3YW50ZWQhIEZvciB0aGlzIHJlYXNvbiBpdCBpcyBi ZXN0IHRvIHVzZSB0aGUgaW5kaXZpZHVhbCBuYW1lZCBpdGVtcyA8c3Ryb25nPm9ubHk8L3N0 cm9uZz4gd2hlbiB5b3UgYXJlIHVzaW5nIGEgc2luZ2xlIDxjb2RlPml0ZW08L2NvZGU+LiBT ZWUgPGEgaHJlZj0iI2VnNCI+RXhhbXBsZSA0PC9hPiBmb3Igd2F5cyByb3VuZCB0aGlzOjwv cD4KCgk8cD5JZiB5b3Ugd2lzaCB0byBzZWUgYW4gZW50aXJlIGxpc3Qgb2YgYXZhaWxhYmxl IHJlcGxhY2VtZW50IHRhZ3MgYXMgdGhlIHBsdWdpbiBidWlsZHMgdGhlbSB1cCwgYWRkIDxj b2RlPmRlYnVnPSZxdW90OzEmcXVvdDs8L2NvZGU+IHRvIHlvdXIgc21kX2Jpb19pbmZvIHRh Zy48L3A+CgoJPGgzPjxjb2RlPiZsdDt0eHA6c21kX2Jpb19hcnRpY2xlcyZndDs8L2NvZGU+ PC9oMz4KCgk8cD5BIHNpbXBsZSBjb252ZW5pZW5jZSB3cmFwcGVyIGZvciA8Y29kZT4mbHQ7 dHhwOmFydGljbGVfY3VzdG9tIC8mZ3Q7PC9jb2RlPiB0aGF0IHNldHMgdGhlIDxjb2RlPmF1 dGhvcjwvY29kZT4gYXR0cmlidXRlIHRvIHRoZSBwZXJzb24gd2hvIHdyb3RlIHRoZSBjdXJy ZW50IGFydGljbGUuIElmIHlvdSBzcGVjaWZ5IGFuIGF1dGhvciwgdGhhdCBwZXJzb24gd2ls bCBiZSB1c2VkIGluc3RlYWQuIEluIGFsbCBvdGhlciByZWdhcmRzLCB0aGUgdGFnIGZ1bmN0 aW9ucyBpZGVudGljYWxseSB0byA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ubmV0L3dp a2kvaW5kZXgucGhwP3RpdGxlPWFydGljbGVfY3VzdG9tIj5hcnRpY2xlX2N1c3RvbTwvYT4g YW5kIGNhbiBiZSB1c2VkIGFzIGEgY29udGFpbmVyIGlmIHlvdSB3aXNoLjwvcD4KCgk8cCBj bGFzcz0icmVxdWlyZWQiPjxzcGFuIGNsYXNzPSJjYXBzIj5JTVBPUlRBTlQ8L3NwYW4+OiB0 YWtlIGNhcmUgd2hlbiB1c2luZyB0aGlzIHRhZyBpbnNpZGUgeW91ciBkZWZhdWx0IGZvcm0u IElmIHlvdSBkbyBub3Qgc3BlY2lmeSB5b3VyIG93biBjb250YWluZXIgb3IgYSBkZWRpY2F0 ZWQgPGNvZGU+Zm9ybTwvY29kZT4sIHlvdSB3aWxsIHJlY2VpdmUgYSA8ZW0+Y2lyY3VsYXIg cmVmZXJlbmNlIGVycm9yPC9lbT4gZnJvbSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFu PiBhcyBpdCB0cmllcyB0byBjYWxsIHRoZSBkZWZhdWx0IGZvcm0sIHdoaWNoIGNhbGxzIHRo ZSBkZWZhdWx0IGZvcm0sIHdoaWNoIGNhbGxzIHRoZSBkZWZhdWx0IGZvcm0mIzgyMzA7PC9w PgoKCTxoMj5FeGFtcGxlczwvaDI+CgoJPGgzIGlkPSJlZzEiPkV4YW1wbGUgMTogTGlzdCBi aW8gZmllbGRzPC9oMz4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2si PiZsdDt0eHA6c21kX2Jpb19pbmZvCiAgICAgaXRlbXM9JnF1b3Q7am9idGl0bGUsIGV4dGVu c2lvbiwgY2VsbCwgZGVwYXJ0bWVudCZxdW90OwogICAgIGxhYmVsdGFnPSZxdW90O2R0JnF1 b3Q7IHdyYXB0YWc9JnF1b3Q7ZGwmcXVvdDsKICAgICBpdGVtd3JhcHRhZz0mcXVvdDtkZCZx dW90OyBjbGFzcz0mcXVvdDtyZWNvcmQmcXVvdDsgLyZndDsKPC9jb2RlPjwvcHJlPgoKCTxw PlNob3dzIHRoZSBqb2IgdGl0bGUsIHdvcmsmIzgyMTc7cyBleHRlbnNpb24gbnVtYmVyLCBj ZWxsIHBob25lIG51bWJlciBhbmQgZGVwYXJ0bWVudCBvZiB0aGUgY3VycmVudCBhdXRob3Is IGFzIGEgZGVmaW5pdGlvbiBsaXN0LjwvcD4KCgk8aDMgaWQ9ImVnMiI+RXhhbXBsZSAyOiBM aXN0IHVzZXJzIGJ5IHByaXYgbGV2ZWw8L2gzPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2Rl IGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfYmlvX2luZm8KICAgICBhdXRob3I9JnF1b3Q7 bXJfcHViLCBTTURfUFJJVlM6NDozJnF1b3Q7CiAgICAgaXRlbXM9JnF1b3Q7bmFtZSwgUmVh bE5hbWUsIGRlcGFydG1lbnQmcXVvdDsKICAgICBsYWJlbHRhZz0mcXVvdDtkdCZxdW90OyB3 cmFwdGFnPSZxdW90O2RsJnF1b3Q7CiAgICAgaXRlbXdyYXB0YWc9JnF1b3Q7ZGQmcXVvdDsg LyZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPlNob3dzIHRoZSBuYW1lLCByZWFsIG5hbWUgYW5k IGRlcGFydG1lbnQgb2YgYWxsIDxlbT5Db3B5IEVkaXRvcnM8L2VtPiBhbmQgPGVtPlN0YWZm IFdyaXRlcnM8L2VtPiBhbmQgdGhlIHVzZXIgJiM4MjE2O21yX3B1YiYjODIxNzsuPC9wPgoK CTxoMyBpZD0iZWczIj5FeGFtcGxlIDM6IFVzaW5nIHNtZF9iaW9fYXJ0aWNsZXM8L2gzPgoK PHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfYmlv X2luZm8gaXRlbXM9JnF1b3Q7cGhvdG8mcXVvdDsgbGFiZWw9JnF1b3Q7JnF1b3Q7Jmd0Owog ICAmbHQ7dHhwOmltYWdlIGlkPSZxdW90O3tzbWRfYmlvX3Bob3RvfSZxdW90OyAvJmd0Owom bHQ7L3R4cDpzbWRfYmlvX2luZm8mZ3Q7IFJlY2VudCBhcnRpY2xlcyBieQogICAmbHQ7YSBo cmVmPSZxdW90Oy9kZXNrcy8mbHQ7dHhwOnNtZF9iaW9faW5mbwogICAgICAgIGl0ZW1zPSYj Mzk7ZGVwYXJ0bWVudCYjMzk7IGxhYmVsPSZxdW90OyZxdW90OyAvJmd0OyZxdW90OyZndDsK ICAgICAgICAmbHQ7dHhwOnNtZF9iaW9faW5mbyBpdGVtcz0mcXVvdDtSZWFsTmFtZSZxdW90 OwogICAgICAgICAgIGxhYmVsPSZxdW90OyZxdW90OyAvJmd0OwogICAgICZsdDsvYSZndDs6 CiZsdDt0eHA6c21kX2Jpb19hcnRpY2xlcyBsaW1pdD0mcXVvdDs2JnF1b3Q7CiAgICAgd3Jh cHRhZz0mcXVvdDt1bCZxdW90OyBicmVhaz0mcXVvdDtsaSZxdW90OyZndDsKICAgJmx0O3R4 cDpwZXJtbGluayZndDsmbHQ7dHhwOnRpdGxlIC8mZ3Q7Jmx0Oy90eHA6cGVybWxpbmsmZ3Q7 CiZsdDsvdHhwOnNtZF9iaW9fYXJ0aWNsZXMmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5EaXNw bGF5cyB0aGUgYXV0aG9yIHBob3RvLCB0aGUgYXV0aG9yJiM4MjE3O3MgUmVhbE5hbWUgbGlu a2VkIHRvIHRoZSBzZWN0aW9uIHRoYXQgZXhwbGFpbnMgYWJvdXQgdGhlIGRlcGFydG1lbnQg dG8gd2hpY2ggc2hlIGJlbG9uZ3MsIHRoZW4gbGlzdHMgdGhlIDYgbW9zdCByZWNlbnQgYXJ0 aWNsZXMgYnkgaGVyLiBOb3RlIHRoZSB1c2Ugb2YgPGNvZGU+bGFiZWw9JnF1b3Q7JnF1b3Q7 PC9jb2RlPiB0byBzdXBwcmVzcyB0aGUgYXV0b21hdGljIGxhYmVsbGluZyBvZiBpdGVtcyBh bmQgb3VyIHVzZSBvZiBhIHJlcGxhY2VtZW50IHRhZyB0byBmZWVkIDxjb2RlPiZsdDt0eHA6 aW1hZ2UgLyZndDs8L2NvZGU+IHdpdGggdGhlIElEIG9mIHRoZSBzZWxlY3RlZCBwaG90by48 L3A+CgoJPGgzIGlkPSJlZzQiPkV4YW1wbGUgNDogTmVzdGluZyB0YWdzPC9oMz4KCjxwcmUg Y2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2Jpb19pbmZv IGF1dGhvcj0mcXVvdDtTTURfUFJJVlM6NSZxdW90OyBpdGVtcz0mcXVvdDtuYW1lJnF1b3Q7 Jmd0OwogICAmbHQ7IS0tIEZvciBlYWNoIGF1dGhvciYjMzk7cyBuYW1lIC0tJmd0OwogICAm bHQ7YSBjbGFzcz0mcXVvdDtpbWFnZSZxdW90OwogICAgIGhyZWY9JnF1b3Q7L2Jsb2cvJmx0 O3R4cDpzbWRfYmlvX2luZm8gYXV0aG9yPSZxdW90O3tzbWRfYmlvX2luZm9faXRlbX0mcXVv dDsKICAgICAgIGl0ZW1zPSZxdW90O25hbWUmcXVvdDsgbGFiZWw9JnF1b3Q7JnF1b3Q7IC8m Z3Q7JnF1b3Q7CiAgICAgdGl0bGU9JnF1b3Q7YnJvd3NlIG90aGVyIHBvc3RzIGJ5IHRoaXMg YXV0aG9yJnF1b3Q7Jmd0OwogICAgICAmbHQ7aW1nIGNsYXNzPSZxdW90O3RodW1iJnF1b3Q7 CiAgICAgICAgc3JjPSZxdW90Oy9pbWFnZXMvJmx0O3R4cDpzbWRfYmlvX2luZm8gYXV0aG9y PSYjMzk7e3NtZF9iaW9faW5mb19pdGVtfSYjMzk7CiAgICAgICAgaXRlbXM9JiMzOTtpbWFn ZSYjMzk7IGxhYmVsPSYjMzk7JiMzOTsgLyZndDsuanBnJnF1b3Q7IC8mZ3Q7CiAgICZsdDsv YSZndDsKICAgJmx0O2RpdiBjbGFzcz0mcXVvdDtzdW1tYXJ5JnF1b3Q7Jmd0OwogICAgICAm bHQ7dHhwOnNtZF9iaW9faW5mbyBhdXRob3I9JiMzOTt7c21kX2Jpb19pbmZvX2l0ZW19JiMz OTsKCSAgICAgaXRlbXM9JiMzOTtwcm9maWxlJiMzOTsgbGFiZWw9JiMzOTsmIzM5OyAvJmd0 OwogICAmbHQ7L2RpdiZndDsKJmx0Oy90eHA6c21kX2Jpb19pbmZvJmd0Owo8L2NvZGU+PC9w cmU+CgoJPHA+Tm90ZSB0aGF0IHdlIGl0ZXJhdGUgb3ZlciBlYWNoIGF1dGhvciBmaXJzdCBh bmQgdGhlbiBwbHVnIHRoZSA8Y29kZT57c21kX2Jpb19pbmZvX2l0ZW19PC9jb2RlPiAodGhl IGF1dGhvciYjODIxNztzIG5hbWUpIGludG8gZWFjaCBuZXN0ZWQgPGNvZGU+c21kX2Jpb19p bmZvPC9jb2RlPiB0YWcuIFRoaXMgcHVsbHMgb3V0IGluZGl2aWR1YWwgaXRlbXMganVzdCBm b3IgdGhhdCBhdXRob3IgYW5kIGluc2VydHMgdGhlbSBpbiB0aGUgbWFya3VwLCBhZ2FpbiB1 c2luZyA8Y29kZT5sYWJlbD0mcXVvdDsmcXVvdDs8L2NvZGU+IHRvIG9taXQgdGhlIGxhYmVs LjwvcD4KCgk8aDI+Q2hhbmdlbG9nPC9oMj4KCgk8dWw+CgkJPGxpPjE0IEp1bCAwOSB8IDAu MSB8IEluaXRpYWwgKG5vbi1wdWJsaWMpIHJlbGVhc2U8L2xpPgoJCTxsaT4yMSBBdWcgMDkg fCAwLjIgfCBGaXJzdCBwdWJsaWMgcmVsZWFzZSA7IG5vIGltYWdlL3RodW1iIG91dHB1dCA7 IGV4cGVyaW1lbnRhbCA8Y29kZT5vcHRpb25zPC9jb2RlPiBhdHRyaWJ1dGUgcmVtb3ZlZCA7 IGNvbnRhaW5lci9mb3JtIGFjY2VwdHMgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4g dGFncyA7IGZpeGVkIHRleHRib3ggc2l6ZSBsaW1pdCAodGhhbmtzIE1hdHREKTwvbGk+CgkJ PGxpPjMxIEF1ZyAwOSB8IDAuMyB8IFJlbW92ZWQgPGNvZGU+aXRlbTwvY29kZT4gYXR0cmli dXRlIDsgZml4ZWQgd2FybmluZyBtZXNzYWdlIGlmIHVzaW5nIHNpbmdsZSBpdGVtcyA7IGhp ZGRlbiBwcmVmIDxjb2RlPnNtZF9iaW9fc2FuaXRpemVfbmFtZTwvY29kZT4gZm9yY2VzIHNh bml0aXplZCBsb2dpbiBuYW1lczwvbGk+Cgk8L3VsPgoKPC9kaXY+CjwhLS0gKioqIEJFR0lO IFBMVUdJTiBDU1MgKioqIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojc21kX2hlbHAg eyBsaW5lLWhlaWdodDoxLjUgO30KI3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xk OyBmb250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBi YWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkNDO30KI3NtZF9oZWxwIGNvZGUuYmxvY2sgeyBmb250 LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGJhY2tncm91bmQtY29s b3I6ICNmMGU2OGM7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFk ZGluZzoxMHB4OyB9CiNzbWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdl b3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNz bWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzox MHB4IDAgMDsgY29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsg fQojc21kX2hlbHAgaDMgeyBjb2xvcjogIzI3NTY4NTsgZm9udDogYm9sZCAxMnB4IEFyaWFs LCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3Rl eHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQoj c21kX2hlbHAgaDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRl ci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBl cmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6IzMz ZDsgfQojc21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90 dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHt3aWR0aDo5MCU7IHRleHQtYWxpZ246Y2Vu dGVyOyBwYWRkaW5nLWJvdHRvbToxZW07fQojc21kX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7 Ym9yZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDt9CiNzbWRfaGVscCB1bCB7 IGxpc3Qtc3R5bGUtdHlwZTpzcXVhcmU7IH0KI3NtZF9oZWxwIC5yZXF1aXJlZCB7Y29sb3I6 cmVkO30KI3NtZF9oZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVweCAzMHB4OyB9CiNzbWRf aGVscCAuYnJlYWsgeyBtYXJnaW4tdG9wOjVweDsgfQo8L3N0eWxlPgo8IS0tICoqKiBFTkQg UExVR0lOIENTUyAqKiogLS0+CiI7czozOiJjc3MiO3M6MTIwODoiPHN0eWxlIHR5cGU9InRl eHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCBjb2Rl IHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNv dXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZDQzt9CiNzbWRfaGVs cCBjb2RlLmJsb2NrIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAj OTk5OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46 MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21kX2hlbHAgaDEgeyBjb2xvcjog IzM2OTsgZm9udDogMjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQt YWxpZ246IGNlbnRlcjsgfQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29s aWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGNvbG9yOiAjMzY5OyBmb250OiAxN3B4IEdl b3JnaWEsIHNhbnMtc2VyaWY7IH0KI3NtZF9oZWxwIGgzIHsgY29sb3I6ICMyNzU2ODU7IGZv bnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsg bWFyZ2luOiAxMHB4IDAgMDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB0ZXh0LWRlY29y YXRpb246dW5kZXJsaW5lO30KI3NtZF9oZWxwIGg0IHsgZm9udDogYm9sZCAxMXB4IEFyaWFs LCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwIDt0 ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9CiNzbWRfaGVscCAuYXRubSB7IGZvbnQtd2Vp Z2h0OmJvbGQ7IGNvbG9yOiMzM2Q7IH0KI3NtZF9oZWxwIC5tYW5kIHsgYmFja2dyb3VuZDoj ZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNzbWRfaGVscCB0YWJsZSB7d2lkdGg6 OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVtO30KI3NtZF9oZWxw IHRkLCAjc21kX2hlbHAgdGgge2JvcmRlcjoxcHggc29saWQgIzk5OTsgcGFkZGluZzouNWVt IDA7fQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVs cCAucmVxdWlyZWQge2NvbG9yOnJlZDt9CiNzbWRfaGVscCBsaSB7IG1hcmdpbjo1cHggMjBw eCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KPC9z dHlsZT4iO3M6NDoiY29kZSI7czozMzQyOToiLy8gVE9ETzoKLy8gIFVzZSBhbiBhcnJheSBs aWtlICR0eXBlcyA9IGFycmF5KCAnaW50JyA9PiBhcnJheSggc3FsX3R5cGU9J0lOVEVHRVIn LCB3aWRnZXQ9IlRFWFQiLCB3aWRnZXRfY29uc3RyYWludD0iaXNfaW50ZWdlciIgKSwgKTsK Ly8gICAtLT4gUG9wdWxhdGUgdGhlIHNlbGVjdCBib3ggZnJvbSB0aGlzIGFycmF5Ci8vICBB ZGQgJ2luZGV4JyBjaGVja2JveCB0byBhbGxvdyBhbiBJbmRleCB0byBiZSBhZGRlZCB0byBh IG1ldGEgY29sdW1uCi8vICBBYmlsaXR5IHRvIHNwZWNpZnkgd2lsZGNhcmRzL21hdGNoZXMg Zm9yIGl0ZW1zL2F1dGhvcnMgaW4gdGhlIGNsaWVudCB0YWcKLy8gIFNwZWNpZnkgdG9vbHRp cCBleHRlbmRlZCBiaW8gaW5mb3JtYXRpb24gaW4gcHJlZnMKaWYgKEB0eHBpbnRlcmZhY2Ug PT0gJ2FkbWluJykgewoJYWRkX3ByaXZzKCdzbWRfYmlvJywgJzEnKTsKCXJlZ2lzdGVyX3Rh YignZXh0ZW5zaW9ucycsICdzbWRfYmlvJywgc21kX2Jpb19nVHh0KCdhZG1pbl90YWInKSk7 CglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2JpbycsICdzbWRfYmlvJyk7CglyZWdpc3Rlcl9j YWxsYmFjaygnc21kX2Jpb19maWVsZHMnLCAnYXV0aG9yX3VpJywgJ2V4dGVuZF9kZXRhaWxf Zm9ybScpOwoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9iaW9fYWRtaW5fanMnLCAnYWRtaW5f c2lkZScsICdoZWFkX2VuZCcpOwoJLy8gTm90ZSB0aGVzZSBhcmUgYWxsIHByZSBUWFAncyBp bnZvbHZlbWVudAoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9iaW9fc2F2ZScsICdhZG1pbics ICdhdXRob3Jfc2F2ZScsIDEpOwoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9iaW9fc2F2ZScs ICdhZG1pbicsICdhdXRob3Jfc2F2ZV9uZXcnLCAxKTsKCXJlZ2lzdGVyX2NhbGxiYWNrKCdz bWRfYmlvX2RlbGV0ZScsICdhZG1pbicsICdhZG1pbl9tdWx0aV9lZGl0JywgMSk7Cn0KJHN0 ZXAgPSBncHMoJ3N0ZXAnKTsKaWYgKCRzdGVwID09ICdzbWRfYmlvX2dldF9pbWFnZScpIHsK CXNtZF9iaW9fZ2V0X2ltYWdlKCk7Cn0KaWYgKCRzdGVwID09ICdzbWRfYmlvX2dldF9lYmlv JykgewoJc21kX2Jpb19nZXRfZWJpbygpOwp9CgpnbG9iYWwgJHNtZF9iaW9fdHlwZXM7CiRz bWRfYmlvX3R5cGVzID0gYXJyYXkoCgkJJ3RleHRfaW5wdXQnID0+ICdUZXh0IGJveCcsCgkJ J2xpc3QnID0+ICdTZWxlY3QgbGlzdCcsCgkJJ3JhZGlvJyA9PiAnUmFkaW8gc2V0JywKCQkn eWVzbm9yYWRpbycgPT4gJ1llcy9ubyByYWRpbycsCgkJJ2NoZWNrYm94JyA9PiAnQ2hlY2ti b3goZXMpJywKCQkndGV4dGFyZWEnID0+ICdUZXh0IGFyZWEnLAoJCSdpbWFnZScgPT4gJ0lt YWdlJywKCQknZGF0ZXRpbWUnID0+ICdEYXRlL1RpbWUnCgkpOwoKaWYgKCFkZWZpbmVkKCdT TURfQklPJykpIHsKCWRlZmluZSgiU01EX0JJTyIsICdzbWRfYmlvJyk7Cn0KaWYgKCFkZWZp bmVkKCdTTURfQklPX01FVEEnKSkgewoJZGVmaW5lKCJTTURfQklPX01FVEEiLCAnc21kX2Jp b19tZXRhJyk7Cn0KCi8vICoqKioqKioqKioqKioqKioqKioqKioqKgovLyBBRE1JTiAtPiBV U0VSUyBUQUIKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9iaW9f ZmllbGRzKCRldmVudCwgJHN0ZXAsICRtdCwgJGRhdGEpIHsKCSRvdXQgPSAkdmFscyA9IGFy cmF5KCk7CgoJJHJzdGVwID0gZ3BzKCdzdGVwJyk7CglpZihzbWRfYmlvX3RhYmxlX2V4aXN0 KCkpIHsKCQlpZiAoJHJzdGVwID09ICdhdXRob3JfZWRpdCcpIHsKCQkJZXh0cmFjdChncHNh KGFycmF5KCd1c2VyX2lkJykpKTsKCQkJLy8gU2hhbWUgd2UgaGF2ZSB0byBkb3VibGUgZGUt Y2x1dGNoIGhlcmUgYnV0IHdlIGNhbid0IGluZGV4IG9uIHVzZXJfaWQgdW5mb3J0dW5hdGVs eSAoJ2NvcyB3aGVuCgkJCS8vIGluc2VydGluZyBuZXcgdXNlcnMsIHRoZSBiaW8gZnVuY3Rp b25zIHJ1biBfQkVGT1JFXyBhbiBhdXRvX2luY3JlbWVudCBJRCBoYXMgYmVlbiBnZW5lcmF0 ZWQgYnkgVFhQKQoJCQkkdW5hbWUgPSBzYWZlX2ZpZWxkKCduYW1lJywndHhwX3VzZXJzJywi dXNlcl9pZCA9ICckdXNlcl9pZCciKTsKCQkJJHZhbHMgPSBzYWZlX3JvdygnKicsIFNNRF9C SU8sICJ1c2VyX3JlZj0nJHVuYW1lJyIpOwoJCX0KCQkkd2lkZ2V0cyA9IHNhZmVfcm93cygn KicsIFNNRF9CSU9fTUVUQSwgJzE9MSBPUkRFUiBCWSBwb3NpdGlvbicpOwoJCSR0ZGFjID0g JyBjbGFzcz0ibm9saW5lIic7CgkJJHRkYWNfaW1hZ2UgPSAnIGNsYXNzPSJub2xpbmUgc21k X2Jpb19pbWFnZV9jZWxsIic7CgkJZm9yZWFjaCAoJHdpZGdldHMgYXMgJHdpZGdldCkgewoJ CQkkdmFsID0gKCR2YWxzICYmIGlzc2V0KCR2YWxzWyR3aWRnZXRbJ25hbWUnXV0pKSA/ICR2 YWxzWyR3aWRnZXRbJ25hbWUnXV0gOiAkd2lkZ2V0Wyd2YWwnXTsKCQkJJHRpdGxlID0gKCR3 aWRnZXRbJ3RpdGxlJ10pID8gJHdpZGdldFsndGl0bGUnXSA6ICR3aWRnZXRbJ25hbWUnXTsK CQkJJHNpemVvcHRzID0gZG9fbGlzdCgkd2lkZ2V0WydzaXplJ10pOwoJCQkkc2l6ZTEgPSAo JHNpemVvcHRzWzBdID4gMCkgPyAkc2l6ZW9wdHNbMF0gOiAnJzsKCQkJJHNpemUyID0gKGlz c2V0KCRzaXplb3B0c1sxXSkgJiYgJHNpemVvcHRzWzFdID4gMCkgPyAkc2l6ZW9wdHNbMV0g OiAnJzsKCQkJJG5hbWUgPSAnc21kX2Jpb18nLiR3aWRnZXRbJ25hbWUnXTsKCQkJc3dpdGNo KCR3aWRnZXRbJ3R5cGUnXSkgewoJCQkJY2FzZSAnbGlzdCc6CgkJCQkJJHNlbHYgPSBzbWRf YmlvX3NwbGl0dmFsKCR3aWRnZXRbJ3ZhbCddKTsKCQkJCQlsaXN0KCRzZWx2LCAkZGZsdCkg PSBzbWRfYmlvX2dldF9kZWZhdWx0KCRzZWx2LCAkdmFsKTsKCQkJCQkkb3V0W10gPSB0cihm TGFiZWxDZWxsKCR0aXRsZSkudGRhKHNlbGVjdElucHV0KCRuYW1lLCAkc2VsdiwgJGRmbHQs IGZhbHNlLCAnJywgJG5hbWUpLCAkdGRhYyksICcgY2xhc3M9InNtZF9iaW9fc2VsZWN0ICcu JG5hbWUuJyInKTsKCQkJCQlicmVhazsKCQkJCWNhc2UgJ3JhZGlvJzoKCQkJCQkkc2VsdiA9 IHNtZF9iaW9fc3BsaXR2YWwoJHdpZGdldFsndmFsJ10pOwoJCQkJCWxpc3QoJHNlbHYsICRk Zmx0KSA9IHNtZF9iaW9fZ2V0X2RlZmF1bHQoJHNlbHYsICR2YWwpOwoJCQkJCSRvdXRbXSA9 IHRyKGZMYWJlbENlbGwoJHRpdGxlKS50ZGEocmFkaW9TZXQoJHNlbHYsICRuYW1lLCAkZGZs dCksICR0ZGFjKSwgJyBjbGFzcz0ic21kX2Jpb19yYWRpbyAnLiRuYW1lLiciJyk7CgkJCQkJ YnJlYWs7CgkJCQljYXNlICd5ZXNub3JhZGlvJzoKCQkJCQkkb3V0W10gPSB0cihmTGFiZWxD ZWxsKCR0aXRsZSkudGRhKHllc25vUmFkaW8oJG5hbWUsICR2YWwpLCAkdGRhYyksICcgY2xh c3M9InNtZF9iaW9fcmFkaW8gJy4kbmFtZS4nIicpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAn Y2hlY2tib3gnOgoJCQkJCSRzZWx2ID0gc21kX2Jpb19zcGxpdHZhbCgkd2lkZ2V0Wyd2YWwn XSk7CgkJCQkJJHZhbCA9ICgkdmFscyAmJiBpc3NldCgkdmFsc1skd2lkZ2V0WyduYW1lJ11d KSkgPyAkdmFsc1skd2lkZ2V0WyduYW1lJ11dIDogJyc7CgkJCQkJJGNoZWNrZWRWYWxzID0g ZG9fbGlzdCgkdmFsKTsKCQkJCQkkaXRlbXMgPSBhcnJheSgpOwoJCQkJCWZvcmVhY2ggKCRz ZWx2IGFzICRpZHggPT4gJGxibCkgewoJCQkJCQkvLyBOb3QgdXNpbmcgY2hlY2tib3goKSBi ZWNhdXNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBvbmNsaWNrCgkJCQkJCSRpdGVtc1tdID0gJzxp bnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iY2JfJy4kbmFtZS4nIiB2YWx1ZT0iJy4kaWR4 LiciJy4oKGluX2FycmF5KCRpZHgsICRjaGVja2VkVmFscykpID8gJyBjaGVja2VkPSJjaGVj a2VkIicgOiAnJykgLiAnIGNsYXNzPSJjaGVja2JveCIgb25jbGljaz0ic21kX2Jpb19jaGVj a2JveChcJycuJG5hbWUuJ1wnKTsiIC8+Jy4kbGJsOwoJCQkJCX0KCQkJCQkkb3V0W10gPSB0 cihmTGFiZWxDZWxsKCR0aXRsZSkudGRhKGpvaW4oJycsICRpdGVtcyksICR0ZGFjKSwgJyBj bGFzcz0ic21kX2Jpb19jaGVja2JveCAnLiRuYW1lLiciJykuZklucHV0KCdoaWRkZW4nLCRu YW1lLCR2YWwsJycsJycsJycsJycsJycsJG5hbWUpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAn dGV4dGFyZWEnOgoJCQkJCS8vIE5vdCB1c2luZyB0ZXh0X2FyZWEoKSBiZWNhdXNlIGl0IGZv cmNlcyBpbmxpbmUgc3R5bGVkIHdpZHRoL2hlaWdodCB3aGljaCBzaG91bGQgYmUgaW4gQ1NT CgkJCQkJJHNpemUxID0gKCRzaXplMSA9PSAnJyB8fCAkc2l6ZTEgPT0gMCkgPyA0MCA6ICRz aXplMTsKCQkJCQkkc2l6ZTIgPSAoJHNpemUyID09ICcnIHx8ICRzaXplMiA9PSAwKSA/IDUg OiAkc2l6ZTI7CgkJCQkJJG91dFtdID0gdHIoZkxhYmVsQ2VsbCgkdGl0bGUpLnRkYSgnPHRl eHRhcmVhIGlkPSInLiRuYW1lLiciIG5hbWU9IicuJG5hbWUuJyIgY2xhc3M9InNtZF9iaW9f dGV4dGFyZWEiIGNvbHM9IicuJHNpemUxLiciIHJvd3M9IicuJHNpemUyLiciPicuaHRtbHNw ZWNpYWxjaGFycygkdmFsKS4nPC90ZXh0YXJlYT4nLCAkdGRhYyksICcgY2xhc3M9InNtZF9i aW9fdGV4dGFyZWEgJy4kbmFtZS4nIicpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAnaW1hZ2Un OgoJCQkJCSRwYXJlbnQgPSAkd2lkZ2V0Wyd2YWwnXTsKCQkJCQkkdmFsID0gKCR2YWxzICYm IGlzc2V0KCR2YWxzWyR3aWRnZXRbJ25hbWUnXV0pKSA/ICR2YWxzWyR3aWRnZXRbJ25hbWUn XV0gOiAnJzsKCQkJCQkkd2hlcmUgPSAoJHBhcmVudCkgPyAiY2F0ZWdvcnk9JyRwYXJlbnQn IiA6ICcxPTEnOwoJCQkJCSR0cmVlID0gc2FmZV9yb3dzKCcqJywgJ3R4cF9pbWFnZScsICR3 aGVyZSk7CgkJCQkJJHNlbHYgPSBhcnJheSgpOwoJCQkJCWZvcmVhY2ggKCR0cmVlIGFzICRy b3cpIHsKCQkJCQkJJHNlbHZbJHJvd1snaWQnXV0gPSAkcm93WyduYW1lJ107CgkJCQkJfQoJ CQkJCSRvdXRbXSA9IHRyKGZMYWJlbENlbGwoJHRpdGxlKS50ZGEoJzxpbnB1dCB0eXBlPSJ0 ZXh0IiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCR2YWwpLiciIG5hbWU9IicuJG5hbWUu JyIgc2l6ZT0iNCIgY2xhc3M9InNtZF9iaW9faW1hZ2VfaWQiIC8+Jy5zZWxlY3RJbnB1dCgk bmFtZS4nX2xpc3QnLCAkc2VsdiwgJHZhbCwgdHJ1ZSwgJycpLic8ZGl2IGNsYXNzPSJzbWRf YmlvX2ltYWdlIj48L2Rpdj48c3BhbiBjbGFzcz0ic21kX2Jpb19pbWFnZV9kYXRhIiB0aXRs ZT0iJy4oKCRzaXplMSkgPyAkc2l6ZTEgOiAnJykuJywnLigoJHNpemUyKSA/ICRzaXplMiA6 ICRzaXplMSkuJyI+PC9zcGFuPicsICR0ZGFjX2ltYWdlLiAnIGlkPSInLiRuYW1lLiciJyks ICcgY2xhc3M9InNtZF9iaW9faW1hZ2Vfcm93ICcuJG5hbWUuJyInKTsKCQkJCQlicmVhazsK CQkJCWNhc2UgJ2RhdGV0aW1lJzoKCQkJCWNhc2UgJ3RleHRfaW5wdXQnOgoJCQkJCS8vIE5v dCB1c2luZyBmSW5wdXQoKSBiZWNhdXNlIGl0IGhhcyBubyBNQVhMRU5HVEggcHJvcGVydHkK CQkJCQkkc2l6ZTEgPSAoJHNpemUxID09ICcnIHx8ICRzaXplMSA9PSAwKSA/IDI1IDogJHNp emUxOwoJCQkJCSRzaXplMiA9ICgkc2l6ZTIgPT0gJycgfHwgJHNpemUyID09IDApID8gJHNp emUxIDogJHNpemUyOwoJCQkJCSRvdXRbXSA9IHRyKGZMYWJlbENlbGwoJHRpdGxlKS50ZGEo JzxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCR2YWwpLici IG5hbWU9IicuJG5hbWUuJyIgaWQ9IicuJG5hbWUuJyIgc2l6ZT0iJy4kc2l6ZTEuJyIgbWF4 bGVuZ3RoPSInLiRzaXplMi4nIiBjbGFzcz0ic21kX2Jpb190ZXh0IGVkaXQiIC8+JywgJHRk YWMpLCAnIGNsYXNzPSJzbWRfYmlvX3RleHRfaW5wdXQgJy4kbmFtZS4nIicpOwoJCQkJCWJy ZWFrOwoJCQl9CgkJfQoJfQoJcmV0dXJuIGpvaW4oJycsICRvdXQpOwp9CgovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLy8gUmVhZCBhIG5hbWUvdmFsIGFycmF5IGFuZCByZW1vdmUg YW55IFsqXSBtYXJrZXIgd2hpY2ggaW5kaWNhdGVzIGEgZGVmYXVsdCBpdGVtCmZ1bmN0aW9u IHNtZF9iaW9fZ2V0X2RlZmF1bHQoJGxpc3QsICRjdXJyKSB7Cgkkb3V0ID0gYXJyYXkoKTsK CSRkZmx0ID0gJG5ld19kZmx0ID0gJyc7Cglmb3JlYWNoICgkbGlzdCBhcyAkaXRlbSA9PiAk dmFsdWUpIHsKCQlpZiAoKCRwb3MgPSBzdHJwb3MoJHZhbHVlLCAnWypdJykpICE9PSBmYWxz ZSkgewoJCQkkb3V0WyRpdGVtXSA9IHN1YnN0cigkdmFsdWUsIDAsICRwb3MpOwoJCQkkbmV3 X2RmbHQgPSAkaXRlbTsKCQl9IGVsc2UgewoJCQkkb3V0WyRpdGVtXSA9ICR2YWx1ZTsKCQl9 CgkJaWYgKCRpdGVtID09ICRjdXJyKSB7CgkJCSRkZmx0ID0gJGl0ZW07CgkJfQoJfQoJJGRm bHQgPSAoJGRmbHQpID8gJGRmbHQgOiAkbmV3X2RmbHQ7CglyZXR1cm4gYXJyYXkoJG91dCwg JGRmbHQpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQUpBWCBjYWxscwpm dW5jdGlvbiBzbWRfYmlvX2dldF9pbWFnZSgpIHsKCWdsb2JhbCAkaW1nX2RpcjsKCgkkaWQg PSBncHMoJ2lkJyk7CglpZiAoJGlkKSB7CgkJJHJzID0gc2FmZV9yb3coJyonLCAndHhwX2lt YWdlJywgImlkID0gJyRpZCciKTsKCQlleHRyYWN0KCRycyk7CgkJJG91dCA9IGFycmF5KCk7 CgkJJG91dFsndGh1bWInXSA9ICgkdGh1bWJuYWlsKSA/IGh1LiRpbWdfZGlyLicvJy4kaWQu J3QnLiRleHQgOiAnJzsKCQkkb3V0WydpbWFnZSddID0gaHUuJGltZ19kaXIuJy8nLiRpZC4k ZXh0OwoJCSRvdXRbJ3cnXSA9ICR3OwoJCSRvdXRbJ2gnXSA9ICRoOwoJCSRvdXRbJ3Rodydd ID0gKCR0aHVtYl93KSA/ICR0aHVtYl93IDogJyc7CgkJJG91dFsndGhoJ10gPSAoJHRodW1i X2gpID8gJHRodW1iX2ggOiAnJzsKCQlzZW5kX3htbF9yZXNwb25zZSgkb3V0KTsKCX0gZWxz ZSB7CgkJc2VuZF94bWxfcmVzcG9uc2UoKTsKCX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi8vIElNUE9SVEFOVDogY29uc3RhbnRzIE5PVCB1c2VkIGZvciB0YWJsZSBuYW1l cwpmdW5jdGlvbiBzbWRfYmlvX2dldF9lYmlvKCkgewoJaW5jbHVkZV9vbmNlIHR4cGF0aC4n L3B1Ymxpc2gvdGFnaGFuZGxlcnMucGhwJzsKCgkkaWQgPSBncHMoJ2lkJyk7CgkkY29yZSA9 IGFycmF5KCd1c2VyX3JlZicpOwoJJHJzID0gc2FmZV9yb3coJyonLCAnc21kX2JpbycsICJ1 c2VyX3JlZiA9ICckaWQnIik7CgkkbWV0YSA9IHNhZmVfcm93cygnKicsICdzbWRfYmlvX21l dGEnLCAiMT0xIik7Ci8vCSRpbmNsdWRlID0gYXJyYXlfbWVyZ2UoJGNvcmUsIGFycmF5KCdt dWcnLCAnY2VsbCcsICdkZXBhcnRtZW50JykpOyAvLyBUT0RPOiBnZXQgdGhlc2UgZnJvbSBw cmVmcy9tZXRhIHRhYmxlCgkkYWxsb3dlZF90eXBlcyA9IGFycmF5KCd0ZXh0X2lucHV0Jywg J3RleHRhcmVhJywgJ2RhdGV0aW1lJyk7Cgkkb3V0ID0gYXJyYXkoKTsKCWZvcmVhY2ggKCRy cyBhcyAkaWR4ID0+ICR2YWwpIHsKLy8JCWlmIChpbl9hcnJheSgkaWR4LCAkaW5jbHVkZSkp IHsKCQkJaWYgKGluX2FycmF5KCRpZHgsICRjb3JlKSkgewoJCQkJJG91dFskaWR4XSA9IGRv U2xhc2goJHZhbCk7CgkJCX0gZWxzZSB7CgkJCQlmb3JlYWNoKCRtZXRhIGFzICRyb3cpIHsK CQkJCQlpZiAoJHJvd1snbmFtZSddID09ICRpZHgpIHsKCQkJCQkJaWYgKCRyb3dbJ3R5cGUn XSA9PSAiaW1hZ2UiKSB7CgkJCQkJCQkkb3V0WyRpZHhdID0gJ3NtZF9pbWFnZTo6Jy50aHVt Ym5haWwoYXJyYXkoJ2lkJz0+ICR2YWwpKTsKCQkJCQkJfSBlbHNlIGlmIChpbl9hcnJheSgk cm93Wyd0eXBlJ10sICRhbGxvd2VkX3R5cGVzKSkgewoJCQkJCQkJJG91dFskaWR4XSA9ICRy b3dbJ3RpdGxlJ10uJzo6Jy5odG1sc3BlY2lhbGNoYXJzKHN0cmlwX3RhZ3MoJHZhbCksIEVO VF9RVU9URVMpOwoJCQkJCQl9CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJfQovLwkJ fQoJfQoJc2VuZF94bWxfcmVzcG9uc2UoJG91dCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpmdW5jdGlvbiBzbWRfYmlvX2FkbWluX2pzKCRldmVudCwgJHN0ZXApIHsKCSRj c3MgPSBzYWZlX2ZpZWxkKCdjc3MnLCAndHhwX2NzcycsICJuYW1lPSdzbWRfYmlvJyIpOwoJ aWYgKCRjc3MpIHsKCQkkY3NzID0gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Jy5uLmJhc2U2 NF9kZWNvZGUoJGNzcykubi4nPC9zdHlsZT4nOwoJfQoJJGNzcyAuPSA8PDxFT0NTUwo8c3R5 bGUgdHlwZT0idGV4dC9jc3MiPgojdG9vbHRpcHsKCXBvc2l0aW9uOmFic29sdXRlOwoJYm9y ZGVyOjFweCBzb2xpZCAjMzMzOwoJYmFja2dyb3VuZDojZjdmNWQxOwoJcGFkZGluZzoycHgg NXB4OwoJY29sb3I6IzMzMzsKCWRpc3BsYXk6bm9uZTsKfQo8L3N0eWxlPgpFT0NTUzsKCWVj aG8gPDw8RU9KUwo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vPCFbQ0RBVEFb CgoJLy8gQ29uY2F0ZW5hdGUgY2hlY2tib3ggb3B0aW9ucyBmb3Igc3RvcmFnZQoJZnVuY3Rp b24gc21kX2Jpb19jaGVja2JveChkZXN0KSB7CgkJdmFyIG91dCA9IFtdOwoJCWpRdWVyeSgi OmNoZWNrYm94IikuZWFjaChmdW5jdGlvbigpIHsKCQkJdmFyIGl0ZW0gPSBqUXVlcnkodGhp cyk7CgkJCWlmIChpdGVtLmF0dHIoJ25hbWUnKS5yZXBsYWNlKCdjYl8nLCcnKSA9PSBkZXN0 KSB7CgkJCQlpZiAoaXRlbS5hdHRyKCdjaGVja2VkJykgPT0gdHJ1ZSkgewoJCQkJCW91dC5w dXNoKGl0ZW0udmFsKCkpOwoJCQkJfQoJCQl9CgkJfSk7CgkJalF1ZXJ5KCcjJytkZXN0KS52 YWwob3V0LmpvaW4oJywnKSk7Cgl9CgpqUXVlcnkoZnVuY3Rpb24oKSB7CgkvLyBHcmFiIGlt YWdlcyBmcm9tIHRoZSBzZXJ2ZXIgd2hlbiB0aGUgc2VsZWN0L3RleHRib3ggY2hhbmdlCglq UXVlcnkoIi5zbWRfYmlvX2ltYWdlX2lkIikuYmx1cihmdW5jdGlvbigpIHsKCQlpZCA9IGpR dWVyeSh0aGlzKS5wYXJlbnQoKS5hdHRyKCdpZCcpOwoJCXZhbCA9IGpRdWVyeSh0aGlzKS52 YWwoKTsKCQlzbWRfYmlvX2dldF9pbWFnZShpZCwgdmFsKTsKCX0pLmJsdXIoKTsKCWpRdWVy eSgiLnNtZF9iaW9faW1hZ2VfY2VsbCAubGlzdCIpLmNoYW5nZShmdW5jdGlvbigpIHsKCQlp ZCA9IGpRdWVyeSh0aGlzKS5wYXJlbnQoKS5hdHRyKCdpZCcpOwoJCXZhbCA9IGpRdWVyeSh0 aGlzKS52YWwoKTsKCQlzbWRfYmlvX2dldF9pbWFnZShpZCwgdmFsKTsKCX0pOwoJZnVuY3Rp b24gc21kX2Jpb19nZXRfaW1hZ2UoaWQsIHZhbCkgewoJCWpRdWVyeSgiIyIgKyBpZCArICIg c2VsZWN0IG9wdGlvblt2YWx1ZT0nIit2YWwrIiddIikuYXR0cigic2VsZWN0ZWQiLCB0cnVl KTsKCQlqUXVlcnkoIiMiICsgaWQgKyAiIGlucHV0IikudmFsKHZhbCk7CgkJdmFyIGRpbXMg PSBqUXVlcnkoIiMiICsgaWQgKyAiIHNwYW4uc21kX2Jpb19pbWFnZV9kYXRhIikuYXR0cign dGl0bGUnKTsKCQl2YXIgc2l6ZSA9IG5ldyBBcnJheSgpOwoJCWlmIChkaW1zKSB7CgkJCXNp emUgPSBkaW1zLnNwbGl0KCIsIik7CgkJfQoJCXNlbmRBc3luY0V2ZW50KHsKCQkJCWV2ZW50 OiB0ZXh0cGF0dGVybi5ldmVudCwKCQkJCXN0ZXA6ICdzbWRfYmlvX2dldF9pbWFnZScsCgkJ CQlpZDogdmFsCgkJCX0sIGZ1bmN0aW9uKGRhdGEpIHsKCQkJCWRhdGEgPSBqUXVlcnkoZGF0 YSk7CgkJCQlpZiAoZGF0YSkgewoJCQkJCXZhciBmdWxsID0gMDsKCQkJCQl2YXIgaW1nTGlu ayA9IGRhdGEuZmluZCgndGh1bWInKS5hdHRyKCd2YWx1ZScpOwoJCQkJCWlmIChpbWdMaW5r ID09ICcnKSB7CgkJCQkJCWZ1bGwgPSAxOwoJCQkJCQl2YXIgaW1nTGluayA9IGRhdGEuZmlu ZCgnaW1hZ2UnKS5hdHRyKCd2YWx1ZScpOwoJCQkJCX0KCQkJCQlpZiAoc2l6ZVswXSA9PSAn JykgewoJCQkJCQlpZiAoZnVsbCA9PSAxKSB7CgkJCQkJCQlzaXplWzBdID0gZGF0YS5maW5k KCd3JykuYXR0cigndmFsdWUnKTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCXNpemVbMF0gPSBk YXRhLmZpbmQoJ3RodycpLmF0dHIoJ3ZhbHVlJyk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJaWYg KHNpemVbMV0gPT0gJycpIHsKCQkJCQkJaWYgKGZ1bGwgPT0gMSkgewoJCQkJCQkJc2l6ZVsx XSA9IGRhdGEuZmluZCgnaCcpLmF0dHIoJ3ZhbHVlJyk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJ CQlzaXplWzFdID0gZGF0YS5maW5kKCd0aGgnKS5hdHRyKCd2YWx1ZScpOwoJCQkJCQl9CgkJ CQkJfQoJCQkJCWpRdWVyeSgiIyIgKyBpZCArICIgLnNtZF9iaW9faW1hZ2UiKS5mYWRlSW4o KS5odG1sKCc8aW1nIHNyYz0iJytpbWdMaW5rKyciIHdpZHRoPSInK3NpemVbMF0rJyIgaGVp Z2h0PSInK3NpemVbMV0rJyIgLz4nKTsKCQkJCX0gZWxzZSB7CgkJCQkJalF1ZXJ5KCIjIiAr IGlkICsgIiAuc21kX2Jpb19pbWFnZSIpLmZhZGVPdXQoKS5lbXB0eSgpOwoJCQkJfQoJCQl9 CgkJKTsKCX0KCgkvLyBHcmFiIHRoZSBleHRlbmRlZCBpbmZvIHdoZW4gaG92ZXJpbmcgYW4g YXV0aG9yIGluIHRoZSBsaXN0CglqUXVlcnkoImZvcm0gdGFibGUjbGlzdCB0ciIpLmVhY2go ZnVuY3Rpb24oZSkgewoJCXZhciB0dCA9ICcnOwoJCXZhciByb3cgPSBqUXVlcnkodGhpcyk7 CgkJaWYgKHJvdy5hdHRyKCJ0aXRsZSIpID09ICcnKSB7CgkJCXZhciBwZXJzb24gPSByb3cu ZmluZCgidGQ6Zmlyc3QiKS50ZXh0KCk7CgkJCXNlbmRBc3luY0V2ZW50KHsKCQkJCQlldmVu dDogdGV4dHBhdHRlcm4uZXZlbnQsCgkJCQkJc3RlcDogJ3NtZF9iaW9fZ2V0X2ViaW8nLAoJ CQkJCWlkOiBwZXJzb24KCQkJCX0sIGZ1bmN0aW9uKGRhdGEpIHsKCQkJCQlkYXRhID0galF1 ZXJ5KGRhdGEpOwoJCQkJCQl2YXIgZW50cnkgPSBkYXRhLmZpbmQoJ3VzZXJfcmVmJyk7CgkJ CQkJCW91dCA9ICcnOwoJCQkJCQllbnRyeS5uZXh0QWxsKCkuZWFjaChmdW5jdGlvbihpdGVt KSB7CgkJCQkJCQlub2RlID0galF1ZXJ5KHRoaXMpLmNvbnRleHQubm9kZU5hbWU7CgkJCQkJ CQlpZiAobm9kZSAhPSAnaHR0cC1zdGF0dXMnKSB7CgkJCQkJCQkJdmFsbCA9IGpRdWVyeSh0 aGlzKS5hdHRyKCd2YWx1ZScpOwoJCQkJCQkJCWlmICh2YWxsKSB7CgkJCQkJCQkJCXZzcGxp dCA9IHZhbGwuc3BsaXQoJzo6Jyk7CgkJCQkJCQkJCWlmICh2c3BsaXRbMF0uaW5kZXhPZign c21kX2ltYWdlJykgPCAwKSB7CgkJCQkJCQkJCQlvdXQgKz0gKCh2c3BsaXQubGVuZ3RoPjEp ID8gdnNwbGl0WzBdIDogbm9kZSkgKyAnOiAnOwoJCQkJCQkJCQl9CgkJCQkJCQkJCXZhbGwg PSAoKHZzcGxpdC5sZW5ndGg+MSkgPyB2c3BsaXRbMV0gOiB2c3BsaXRbMF0pOwoJCQkJCQkJ CQlvdXQgKz0gdmFsbCArICc8YnIvPic7CgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJb3V0 ICs9IG5vZGUrJzogJzsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0pOwoJCQkJCQlyb3cu YXR0cigidGl0bGUiLCBvdXQpOwoJCQkJCX0KCQkJKTsKCQl9CgoJCXhPZmZzZXQgPSAzMDsK CQl5T2Zmc2V0ID0gMjU7CgkJaG92SXRlbSA9IHJvdy5maW5kKCJ0ZDpsYXN0IikucHJldigp OwoJCWhvdkl0ZW0uaG92ZXIoZnVuY3Rpb24oZSkgewoJCQl0dCA9IGpRdWVyeSh0aGlzKS5w YXJlbnQoKS5hdHRyKCJ0aXRsZSIpOwoJCQlpZiAodHQgIT0gJycpIHsKCQkJCWpRdWVyeSh0 aGlzKS5wYXJlbnQoKS5hdHRyKCJ0aXRsZSIsICIiKTsKCQkJCWpRdWVyeSgiYm9keSIpLmFw cGVuZCgiPHAgaWQ9J3Rvb2x0aXAnPiIrIHR0ICsiPC9wPiIpOwoJCQkJalF1ZXJ5KCIjdG9v bHRpcCIpCgkJCQkJLmNzcygidG9wIiwoZS5wYWdlWSAtIHhPZmZzZXQpICsgInB4IikKCQkJ CQkuY3NzKCJsZWZ0IiwoZS5wYWdlWCArIHlPZmZzZXQpICsgInB4IikKCQkJCQkuZmFkZUlu KCJmYXN0Iik7CgkJCX0KCQl9LAoJCWZ1bmN0aW9uKCkgewoJCQlqUXVlcnkodGhpcykucGFy ZW50KCkuYXR0cigidGl0bGUiLCB0dCk7CgkJCWpRdWVyeSgiI3Rvb2x0aXAiKS5yZW1vdmUo KTsKCSAgICB9KTsKCQlob3ZJdGVtLm1vdXNlbW92ZShmdW5jdGlvbihlKSB7CgkJCWpRdWVy eSgiI3Rvb2x0aXAiKQoJCQkJLmNzcygidG9wIiwoZS5wYWdlWSAtIHhPZmZzZXQpICsgInB4 IikKCQkJCS5jc3MoImxlZnQiLChlLnBhZ2VYICsgeU9mZnNldCkgKyAicHgiKTsKCQl9KTsK CgoJfSk7CgoJLy8gR3JleSBvdXQgdGhlIFNpemUgYm94IGZvciB0aG9zZSBpdGVtcyB0aGF0 IGRvbid0IHVzZSBpdAoJalF1ZXJ5KCIjcGFnZS1zbWRfYmlvIC5saXN0W25hbWU9J3R5cGUn XSIpLmNoYW5nZShmdW5jdGlvbigpIHsKCQl2YXIgdGhlVHlwZSA9IGpRdWVyeSgiI3BhZ2Ut c21kX2JpbyAubGlzdFtuYW1lPSd0eXBlJ10gb3B0aW9uOnNlbGVjdGVkIikudmFsKCk7CgkJ dmFyIGRlc3QgPSAiI3BhZ2Utc21kX2JpbyBpbnB1dFtuYW1lPSdzaXplJ10iOwoJCWlmICh0 aGVUeXBlID09ICdsaXN0JyB8fCB0aGVUeXBlID09ICdyYWRpbycgfHwgdGhlVHlwZSA9PSAn eWVzbm9yYWRpbycgfHwgdGhlVHlwZSA9PSAnY2hlY2tib3gnKSB7CgkJCWpRdWVyeShkZXN0 KS5hdHRyKCJkaXNhYmxlZCIsIHRydWUpOwoJCQlqUXVlcnkoZGVzdCkucGFyZW50KCkucHJl digpLmNzcygiY29sb3IiLCAnIzk5OScpOwoJCX0gZWxzZSB7CgkJCWpRdWVyeShkZXN0KS5h dHRyKCJkaXNhYmxlZCIsIGZhbHNlKTsKCQkJalF1ZXJ5KGRlc3QpLnBhcmVudCgpLnByZXYo KS5jc3MoImNvbG9yIiwgJycpOwoJCX0KCX0pLmNoYW5nZSgpOwoKCS8vIFBvcCB1cCB0aGUg aGVscCB0b29sdGlwcyBiYXNlZCBvbiB0aGUgY3VycmVudCBUeXBlCglqUXVlcnkoIi5wb3Bo ZWxwLnNtZF9iaW9fc2l6ZSIpLmhvdmVyKAoJCWZ1bmN0aW9uKGUpIHsKCQkJdmFyIHRoZVR5 cGUgPSBqUXVlcnkoIiNwYWdlLXNtZF9iaW8gLmxpc3RbbmFtZT0ndHlwZSddIG9wdGlvbjpz ZWxlY3RlZCIpLnZhbCgpOwoJCQlzcGFuaWQgPSAnc3BhbiNzbWRfYmlvX3NpemVfaGVscF8n K3RoZVR5cGU7CgkJCXRoaXMudGl0bGUgPSBqUXVlcnkoc3BhbmlkKS5hdHRyKCJ0aXRsZSIp OwoJCX0sIGZ1bmN0aW9uKGUpIHsKCQkJdGhpcy50aXRsZSA9ICcnOwoJCX0KCSk7CglqUXVl cnkoIi5wb3BoZWxwLnNtZF9iaW9fdmFsIikuaG92ZXIoCgkJZnVuY3Rpb24oZSkgewoJCQl2 YXIgdGhlVHlwZSA9IGpRdWVyeSgiI3BhZ2Utc21kX2JpbyAubGlzdFtuYW1lPSd0eXBlJ10g b3B0aW9uOnNlbGVjdGVkIikudmFsKCk7CgkJCXNwYW5pZCA9ICdzcGFuI3NtZF9iaW9fdmFs X2hlbHBfJyt0aGVUeXBlOwoJCQl0aGlzLnRpdGxlID0galF1ZXJ5KHNwYW5pZCkuYXR0cigi dGl0bGUiKTsKCQl9LCBmdW5jdGlvbihlKSB7CgkJCXRoaXMudGl0bGUgPSAnJzsKCQl9Cgkp Owp9KTsKLy9dXT4KPC9zY3JpcHQ+CnskY3NzfQpFT0pTOwp9CgovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLy8gTWFrZSB0aGUgbmFtZS92YWwgcGFpcnMgZm9yIHNlbGVjdElucHV0 IC8gcmFkaW8gLyBjaGVja2JveCBzZXRzCmZ1bmN0aW9uIHNtZF9iaW9fc3BsaXR2YWwoJHZh bCkgewoJJHNlbHYgPSBhcnJheSgpOwoKCSR3dmFscyA9IGV4cGxvZGUoJywnLCAkdmFsKTsK CWZvcmVhY2ggKCR3dmFscyBhcyAkd3ZhbCkgewoJCSRwcnRzID0gZXhwbG9kZSgnPT4nLCAk d3ZhbCk7CgkJaWYgKGNvdW50KCRwcnRzKSA9PSAxKSB7CgkJCSRwcnRzWzFdID0gJHBydHNb MF07CgkJCSRwcnRzWzBdID0gc21kX2Jpb19zYW5pdGl6ZSgkcHJ0c1swXSk7CgkJfQoJCSRz ZWx2W3RyaW0oJHBydHNbMF0pXSA9IHRyaW0oJHBydHNbMV0pOwoJfQoJcmV0dXJuICRzZWx2 Owp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gU3VwZXItc2FuaXRpemUgdGhl IHBhc3NlZCB2YWx1ZSBzbyB3ZSBjYW4gbWFrZSB2YXJpYWJsZSBuYW1lcyBmcm9tIHRoZSBy ZXR1cm5lZCBzdHJpbmcKZnVuY3Rpb24gc21kX2Jpb19zYW5pdGl6ZSgkdmFsKSB7CglyZXR1 cm4gc3RydG9sb3dlcihzdHJfcmVwbGFjZSgiLSIsICJfIiwgc2FuaXRpemVGb3JVcmwoJHZh bCkpKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9iaW9f c2F2ZSgkZXZlbnQsICRzdGVwKSB7CglnbG9iYWwgJHByZWZzOwoKCWlmIChzbWRfYmlvX3Rh YmxlX2V4aXN0KCkpIHsKCQkkdGFyZ2V0dmFycyA9IGFycmF5KCk7CgkJZXh0cmFjdChkb1Ns YXNoKHBzYShhcnJheSgncHJpdnMnLCAnbmFtZScsICdlbWFpbCcsICdSZWFsTmFtZScsICd1 c2VyX2lkJykpKSk7CgkJaWYgKGdldF9wcmVmKCdzbWRfYmlvX3Nhbml0aXplX25hbWUnLCAw KSA+IDApIHsKCQkJLy8gU2FuaXRpemUgYW5kIHBhc3MgdGhlIG5ldyBuYW1lIGZvcndhcmQg dG8gdGhlIGFjdHVhbCB0eHBfdXNlciBzYXZlIHJvdXRpbmUKCQkJJG5hbWUgPSBzdHJ0b2xv d2VyKHNhbml0aXplRm9yVXJsKCRuYW1lKSk7CgkJCSRfUE9TVFsnbmFtZSddID0gJG5hbWU7 CgkJfQoJCSRsZW5ndGggPSBmdW5jdGlvbl9leGlzdHMoJ21iX3N0cmxlbicpID8gbWJfc3Ry bGVuKCRuYW1lLCAnOGJpdCcpIDogc3RybGVuKCRuYW1lKTsKCgkJaWYgKCgkdXNlcl9pZCB8 fCAkbmFtZSkgYW5kICRsZW5ndGggPD0gNjQgYW5kIGlzX3ZhbGlkX2VtYWlsKCRlbWFpbCkp IHsKCQkJZm9yZWFjaCAoJF9QT1NUIGFzICRpZHggPT4gJGl0ZW0pIHsKCQkJCWlmIChzdHJw b3MoJGlkeCwgJ3NtZF9iaW9fJykgPT09IDApIHsKCQkJCQkkdGFyZ2V0dmFyc1tdID0gJGlk eDsKCQkJCX0KCQkJfQoKCQkJLy8gRG91YmxlIGRlLWNsdXRjaCBhZ2Fpbi4uLiBkYW1taXQg Oi0oCgkJCSR1c2VyX2lkID0gZ3BzKCd1c2VyX2lkJyk7CgkJCWlmICgkdXNlcl9pZCkgewoJ CQkJJHVzZXJfcmVmID0gc2FmZV9maWVsZCgnbmFtZScsJ3R4cF91c2VycycsInVzZXJfaWQg PSAnJHVzZXJfaWQnIik7CgkJCX0gZWxzZSB7CgkJCQkkdXNlcl9yZWYgPSAkbmFtZTsKCQkJ fQoKCQkJZXh0cmFjdChncHNhKCR0YXJnZXR2YXJzKSk7CgkJCSRiY29scyA9IGdldFRoaW5n cygnZGVzY3JpYmUgYCcuUEZYLlNNRF9CSU8uJ2AnKTsKCQkJJHNxbFNldCA9IGFycmF5KCk7 CgkJCWZvcmVhY2ggKCR0YXJnZXR2YXJzIGFzICR2YXIpIHsKCQkJCSRjb2xuYW1lID0gc3Ry X3JlcGxhY2UoJ3NtZF9iaW9fJywgJycsICR2YXIpOwoJCQkJaWYgKGluX2FycmF5KCRjb2xu YW1lLCAkYmNvbHMpKSB7CgkJCQkJJHNxbFNldFtdID0gImAkY29sbmFtZWAgPSAnIi5kb1Ns YXNoKCQkdmFyKS4iJyI7CgkJCQl9CgkJCX0KCQkJaWYgKCRzcWxTZXQpIHsKCQkJCSRycyA9 IHNhZmVfdXBzZXJ0KFNNRF9CSU8sIGpvaW4oJywnLCAkc3FsU2V0KSwgImB1c2VyX3JlZmAg PSAnJHVzZXJfcmVmJyIpOwoJCQl9CgkJfQoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KZnVuY3Rpb24gc21kX2Jpb19kZWxldGUoJGV2ZW50LCAkc3RlcCkgewoJZ2xvYmFs ICR0eHBfdXNlcjsKCglpZiAoc21kX2Jpb190YWJsZV9leGlzdCgpKSB7CgkJLy8gU2luY2Ug d2UgYXJlIGV4ZWN1dGluZyAncHJlJyBkZWxldGUgd2UgbmVlZCB0byB1bmZvcnR1bmF0ZWx5 IGR1cGxpY2F0ZSBzb21lIG9mIHRoZSBjaGVja3MKCQkvLyBmcm9tIHR4cF9hZG1pbi5waHAg c28gd2UgbWluaW1pc2UgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGV0ZSBzb21lb25lIGJ5IG1p c3Rha2UKCQkkc2VsZWN0ZWQgPSBwcygnc2VsZWN0ZWQnKTsKCQkkbWV0aG9kID0gcHMoJ2Vk aXRfbWV0aG9kJyk7CgkJaWYgKCEkc2VsZWN0ZWQgb3IgIWlzX2FycmF5KCRzZWxlY3RlZCkp IHsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoJG1ldGhvZCAhPSAnZGVsZXRlJykgewoJCQlyZXR1 cm47CgkJfQoKCQkkbmFtZXMgPSBzYWZlX2NvbHVtbignbmFtZScsICd0eHBfdXNlcnMnLCAi bmFtZSBJTiAoJyIuam9pbigiJywnIiwgZG9TbGFzaCgkc2VsZWN0ZWQpKS4iJykgQU5EIG5h bWUgIT0gJyIuZG9TbGFzaCgkdHhwX3VzZXIpLiInIik7CgkJaWYgKCEkbmFtZXMpIHJldHVy bjsKCgkJJGFzc2lnbl9hc3NldHMgPSBwcygnYXNzaWduX2Fzc2V0cycpOwoJCWlmICgkYXNz aWduX2Fzc2V0cyA9PT0gJycpIHsKCQkJcmV0dXJuOwoJCX0gZWxzZWlmIChpbl9hcnJheSgk YXNzaWduX2Fzc2V0cywgJG5hbWVzKSkgewoJCQlyZXR1cm47CgkJfSBlbHNlIHsKCQkJLy8g QWxsIHRoZSBjaGVja3MgcGFzc2VkIC0tIGRvIGl0CgkJCXNhZmVfZGVsZXRlKFNNRF9CSU8s ICJ1c2VyX3JlZiBJTiAoJyIuam9pbigiJywnIiwgZG9TbGFzaCgkbmFtZXMpKS4iJykiKTsK CQl9Cgl9Cn0KCgovLyAqKioqKioqKioqKioqKioqKioqKioqKioKLy8gQklPIENPTkZJR1VS QVRJT04KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFRhYiBoYW5kbGVyCmZ1bmN0 aW9uIHNtZF9iaW8oJGV2ZW50LCAkc3RlcCkgewoJaWYoISRzdGVwIG9yICFpbl9hcnJheSgk c3RlcCwgYXJyYXkoCgkJCSdzbWRfYmlvX21ldGFfYWRkJywKCQkJJ3NtZF9iaW9fbWV0YV9k ZWwnLAoJCQknc21kX2Jpb19tZXRhX3NhdmUnLAoJCSkpKSB7CgkJc21kX2Jpb19jb25maWco JycpOwoJfSBlbHNlICRzdGVwKCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpm dW5jdGlvbiBzbWRfYmlvX2NvbmZpZygkbWVzc2FnZSkgewoJaWYgKCFzbWRfYmlvX3RhYmxl X2V4aXN0KCkpIHsKCQlzbWRfYmlvX2luc3RhbGwoJycpOwoJCWV4aXQ7Cgl9CgoJcGFnZXRv cChzbWRfYmlvX2dUeHQoJ2FkbWluX3RhYicpLCAkbWVzc2FnZSk7CgoJZWNobyBzbWRfYmlv X21ldGFfZWRpdCgpOwoJZWNobyBzbWRfYmlvX21ldGFfbGlzdCgpOwp9CgovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2Jpb19tZXRhX2VkaXQoKSB7CglnbG9i YWwgJHNtZF9iaW9fdHlwZXM7CgoJJHZhcnMgPSBhcnJheSgnc3RlcCcsICdpZCcsICd0aXRs ZScsICduYW1lJywgJ3R5cGUnLCAnc2l6ZScsICd2YWwnLCAncG9zaXRpb24nKTsKCSRycyA9 IGFycmF5KCk7CgoJZXh0cmFjdChncHNhKCR2YXJzKSk7CglpZiAoJGlkICYmICRzdGVwID09 ICdtZXRhX2VkaXQnKSB7CgkJJGlkID0gYXNzZXJ0X2ludCgkaWQpOwoJCSRycyA9IHNhZmVf cm93KCcqJywgU01EX0JJT19NRVRBLCAiaWQgPSAkaWQiKTsKCQlleHRyYWN0KCRycyk7Cgl9 CgoJaWYgKCRzdGVwID09ICdzbWRfYmlvX21ldGFfc2F2ZScgfHwgJHN0ZXAgPT0gJ3NtZF9i aW9fbWV0YV9hZGQnIHx8ICRzdGVwID09ICdzbWRfYmlvX21ldGFfZGVsJykgewoJCWZvcmVh Y2ggKCR2YXJzIGFzICR2YXIpIHsKCQkJJCR2YXIgPSAnJzsKCQl9Cgl9CgoJJGNhcHRpb24g PSBzbWRfYmlvX2dUeHQoKCRzdGVwID09ICdtZXRhX2VkaXQnKSA/ICdtZXRhX2VkaXQnIDog J21ldGFfYWRkJyk7CgoJLy8gTWFrZSB0aGUgbmFtZS92YWwgcGFpcnMgZm9yIHNlbGVjdElu cHV0Cgkkc2VsdiA9IGFycmF5KCk7Cglmb3JlYWNoICgkc21kX2Jpb190eXBlcyBhcyAkd2lk eCA9PiAkd3ZhbCkgewoJCSRzZWx2WyR3aWR4XSA9ICR3dmFsOwoJfQoKCXJldHVybiBmb3Jt KAoJCWhlZCgkY2FwdGlvbiwgMywnIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IicpLgoK CQlzdGFydFRhYmxlKCdlZGl0JywgJycsICdlZGl0LXBhbmUnKS4KCgkJdHIoCgkJCWZMYWJl bENlbGwoJ25hbWUnKS4KCQkJKCRpZCAmJiAkc3RlcCA9PSAnbWV0YV9lZGl0JyA/IHRkKHN0 cm9uZygkbmFtZSkpIDogZklucHV0Q2VsbCgnbmFtZScsICRuYW1lKSkKCQkpLgoKCQl0cigK CQkJZkxhYmVsQ2VsbCgndGl0bGUnKS4KCQkJZklucHV0Q2VsbCgndGl0bGUnLCAkdGl0bGUp CgkJKS4KCgkJdHIoCgkJCWZMYWJlbENlbGwoJ3R5cGUnKS4KCQkJdGQoc2VsZWN0SW5wdXQo J3R5cGUnLCAkc2VsdiwgJHR5cGUsIGZhbHNlKSkKCQkpLgoKCQl0cigKCQkJZkxhYmVsQ2Vs bChzbWRfYmlvX2dUeHQoJ3NpemUnKSkuCgkJCWZJbnB1dENlbGwoJ3NpemUnLCAkc2l6ZSku dGQodGFnKHNtZF9iaW9fZ1R4dCgnaGVscCcpLCAnYScsICcgY2xhc3M9InBvcGhlbHAgc21k X2Jpb19zaXplIicpKQoJCSkuCgoJCXRyKAoJCQlmTGFiZWxDZWxsKCd2YWx1ZScpLgoJCQl0 ZCh0ZXh0X2FyZWEoJ3ZhbCcsICc1MCcsICcxMjgnLCAkdmFsKSkudGQodGFnKHNtZF9iaW9f Z1R4dCgnaGVscCcpLCAnYScsICcgY2xhc3M9InBvcGhlbHAgc21kX2Jpb192YWwiJykpCgkJ KS4KCgkJdHIoCgkJCWZMYWJlbENlbGwoc21kX2Jpb19nVHh0KCdwb3NpdGlvbicpKS4KCQkJ ZklucHV0Q2VsbCgncG9zaXRpb24nLCAkcG9zaXRpb24pCgkJKS4KCgkJdHIoCgkJCXRkKCku CgkJCXRkKAoJCQkJZklucHV0KCdzdWJtaXQnLCAnJywgZ1R4dCgnc2F2ZScpLCAncHVibGlz aCcpCgkJCSkKCQkpLgoKCQllbmRUYWJsZSgpLgoKCQllSW5wdXQoJ3NtZF9iaW8nKS4KCQko JGlkID8gaElucHV0KCdpZCcsICRpZCkuaElucHV0KCduYW1lJywgJG5hbWUpLnNJbnB1dCgn c21kX2Jpb19tZXRhX3NhdmUnKSA6IHNJbnB1dCgnc21kX2Jpb19tZXRhX2FkZCcpKS4KCQl0 YWcoJyAnLCAnc3BhbicsICcgaWQ9InNtZF9iaW9fc2l6ZV9oZWxwX3RleHRfaW5wdXQiIHRp dGxlPSInLnNtZF9iaW9fZ1R4dCgnc2l6ZWhlbHBfdGV4dF9pbnB1dCcpLiciJykuCgkJdGFn KCcgJywgJ3NwYW4nLCAnIGlkPSJzbWRfYmlvX3NpemVfaGVscF9saXN0IiB0aXRsZT0iJy5z bWRfYmlvX2dUeHQoJ2hlbHBfdW51c2VkJykuJyInKS4KCQl0YWcoJyAnLCAnc3BhbicsICcg aWQ9InNtZF9iaW9fc2l6ZV9oZWxwX3JhZGlvIiB0aXRsZT0iJy5zbWRfYmlvX2dUeHQoJ2hl bHBfdW51c2VkJykuJyInKS4KCQl0YWcoJyAnLCAnc3BhbicsICcgaWQ9InNtZF9iaW9fc2l6 ZV9oZWxwX3llc25vcmFkaW8iIHRpdGxlPSInLnNtZF9iaW9fZ1R4dCgnaGVscF91bnVzZWQn KS4nIicpLgoJCXRhZygnICcsICdzcGFuJywgJyBpZD0ic21kX2Jpb19zaXplX2hlbHBfY2hl Y2tib3giIHRpdGxlPSInLnNtZF9iaW9fZ1R4dCgnaGVscF91bnVzZWQnKS4nIicpLgoJCXRh ZygnICcsICdzcGFuJywgJyBpZD0ic21kX2Jpb19zaXplX2hlbHBfdGV4dGFyZWEiIHRpdGxl PSInLnNtZF9iaW9fZ1R4dCgnc2l6ZWhlbHBfdGV4dGFyZWEnKS4nIicpLgoJCXRhZygnICcs ICdzcGFuJywgJyBpZD0ic21kX2Jpb19zaXplX2hlbHBfaW1hZ2UiIHRpdGxlPSInLnNtZF9i aW9fZ1R4dCgnc2l6ZWhlbHBfaW1hZ2UnKS4nIicpLgoJCXRhZygnICcsICdzcGFuJywgJyBp ZD0ic21kX2Jpb19zaXplX2hlbHBfZGF0ZXRpbWUiIHRpdGxlPSInLnNtZF9iaW9fZ1R4dCgn c2l6ZWhlbHBfdGV4dF9pbnB1dCcpLiciJykuCgoJCXRhZygnICcsICdzcGFuJywgJyBpZD0i c21kX2Jpb192YWxfaGVscF90ZXh0X2lucHV0IiB0aXRsZT0iJy5zbWRfYmlvX2dUeHQoJ3Zh bGhlbHBfdGV4dF9pbnB1dCcpLiciJykuCgkJdGFnKCcgJywgJ3NwYW4nLCAnIGlkPSJzbWRf YmlvX3ZhbF9oZWxwX2xpc3QiIHRpdGxlPSInLnNtZF9iaW9fZ1R4dCgndmFsaGVscF9scmMn KS4nIicpLgoJCXRhZygnICcsICdzcGFuJywgJyBpZD0ic21kX2Jpb192YWxfaGVscF9yYWRp byIgdGl0bGU9Iicuc21kX2Jpb19nVHh0KCd2YWxoZWxwX2xyYycpLiciJykuCgkJdGFnKCcg JywgJ3NwYW4nLCAnIGlkPSJzbWRfYmlvX3ZhbF9oZWxwX3llc25vcmFkaW8iIHRpdGxlPSIn LnNtZF9iaW9fZ1R4dCgndmFsaGVscF95bnInKS4nIicpLgoJCXRhZygnICcsICdzcGFuJywg JyBpZD0ic21kX2Jpb192YWxfaGVscF9jaGVja2JveCIgdGl0bGU9Iicuc21kX2Jpb19nVHh0 KCd2YWxoZWxwX2xyYycpLiciJykuCgkJdGFnKCcgJywgJ3NwYW4nLCAnIGlkPSJzbWRfYmlv X3ZhbF9oZWxwX3RleHRhcmVhIiB0aXRsZT0iJy5zbWRfYmlvX2dUeHQoJ3ZhbGhlbHBfdGV4 dF9pbnB1dCcpLiciJykuCgkJdGFnKCcgJywgJ3NwYW4nLCAnIGlkPSJzbWRfYmlvX3ZhbF9o ZWxwX2ltYWdlIiB0aXRsZT0iJy5zbWRfYmlvX2dUeHQoJ3ZhbGhlbHBfaW1hZ2UnKS4nIicp LgoJCXRhZygnICcsICdzcGFuJywgJyBpZD0ic21kX2Jpb192YWxfaGVscF9kYXRldGltZSIg dGl0bGU9Iicuc21kX2Jpb19nVHh0KCd2YWxoZWxwX3RleHRfaW5wdXQnKS4nIicpCgkpOwp9 CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2Jpb19tZXRhX2xp c3QoKSB7CglnbG9iYWwgJHNtZF9iaW9fdHlwZXM7CgoJZXh0cmFjdChncHNhKGFycmF5KCdz b3J0JywgJ2RpcicsICdjcml0JywgJ3NlYXJjaF9tZXRob2QnKSkpOwoJaWYgKCRzb3J0ID09 PSAnJykgJHNvcnQgPSBnZXRfcHJlZignc21kX2Jpb19tZXRhX3NvcnRfY29sdW1uJywgJ25h bWUnKTsKCWlmICgkZGlyID09PSAnJykgJGRpciA9IGdldF9wcmVmKCdzbWRfYmlvX21ldGFf c29ydF9kaXInLCAnYXNjJyk7CgkkZGlyID0gKCRkaXIgPT0gJ2Rlc2MnKSA/ICdkZXNjJyA6 ICdhc2MnOwoKCWlmICghaW5fYXJyYXkoJHNvcnQsIGFycmF5KCduYW1lJywgJ3RpdGxlJywg J3R5cGUnLCAnc2l6ZScsICd2YWwnLCAncG9zaXRpb24nKSkpICRzb3J0ID0gJ3Bvc2l0aW9u JzsKCgkkc29ydF9zcWwgICA9ICRzb3J0LicgJy4kZGlyOwoKCXNldF9wcmVmKCdzbWRfYmlv X21ldGFfc29ydF9jb2x1bW4nLCAkc29ydCwgJ3NtZF9iaW8nLCAyLCAnJywgMCwgUFJFRl9Q UklWQVRFKTsKCXNldF9wcmVmKCdzbWRfYmlvX21ldGFfc29ydF9kaXInLCAkZGlyLCAnc21k X2JpbycsIDIsICcnLCAwLCBQUkVGX1BSSVZBVEUpOwoKCSRzd2l0Y2hfZGlyID0gKCRkaXIg PT0gJ2Rlc2MnKSA/ICdhc2MnIDogJ2Rlc2MnOwoKCSRycyA9IHNhZmVfcm93c19zdGFydCgn KicsIFNNRF9CSU9fTUVUQSwgJzEgPSAxIE9SREVSIEJZICcuJHNvcnRfc3FsKTsKCglpZiAo JHJzKSB7CgkJZWNobyAnPGZvcm0gYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9zdCIg bmFtZT0ibG9uZ2Zvcm0iIG9uc3VibWl0PSJyZXR1cm4gdmVyaWZ5KFwnJy5nVHh0KCdhcmVf eW91X3N1cmUnKS4nXCcpIj4nLgoKCQlzdGFydFRhYmxlKCdsaXN0JykuCgkJdHIoCgkJCWNv bHVtbl9oZWFkKCduYW1lJywgJ25hbWUnLCAnc21kX2JpbycsIHRydWUsICRzd2l0Y2hfZGly LCAnJywgJycsICgnbmFtZScgPT0gJHNvcnQpID8gJGRpciA6ICcnKS4KCQkJY29sdW1uX2hl YWQoJ3RpdGxlJywgJ3RpdGxlJywgJ3NtZF9iaW8nLCB0cnVlLCAkc3dpdGNoX2RpciwgJycs ICcnLCAoJ3RpdGxlJyA9PSAkc29ydCkgPyAkZGlyIDogJycpLgoJCQljb2x1bW5faGVhZCgn dHlwZScsICd0eXBlJywgJ3NtZF9iaW8nLCB0cnVlLCAkc3dpdGNoX2RpciwgJycsICcnLCAo J3R5cGUnID09ICRzb3J0KSA/ICRkaXIgOiAnJykuCgkJCWNvbHVtbl9oZWFkKHNtZF9iaW9f Z1R4dCgnc2l6ZScpLCAnc2l6ZScsICdzbWRfYmlvJywgdHJ1ZSwgJHN3aXRjaF9kaXIsICcn LCAnJywgKCdzaXplJyA9PSAkc29ydCkgPyAkZGlyIDogJycpLgoJCQljb2x1bW5faGVhZCgn dmFsdWUnLCAndmFsJywgJ3NtZF9iaW8nLCB0cnVlLCAkc3dpdGNoX2RpciwgJycsICcnLCAo J3ZhbCcgPT0gJHNvcnQpID8gJGRpciA6ICcnKS4KCQkJY29sdW1uX2hlYWQoc21kX2Jpb19n VHh0KCdwb3NpdGlvbicpLCAncG9zaXRpb24nLCAnc21kX2JpbycsIHRydWUsICRzd2l0Y2hf ZGlyLCAnJywgJycsICgncG9zaXRpb24nID09ICRzb3J0KSA/ICRkaXIgOiAnJykuCgkJCWhD ZWxsKCkuCgkJCWhDZWxsKCkKCQkpOwoKCQl3aGlsZSAoJGEgPSBuZXh0Um93KCRycykpIHsK CQkJZXh0cmFjdChkb1NwZWNpYWwoJGEpKTsKCgkJCWVjaG8gdHIoCgkJCQl0ZCgkbmFtZSku CgkJCQl0ZCgkdGl0bGUpLgoJCQkJdGQoJHNtZF9iaW9fdHlwZXNbJHR5cGVdKS4KCQkJCXRk KCRzaXplKS4KCQkJCXRkKCR2YWwsMjAwKS4KCQkJCXRkKCRwb3NpdGlvbikuCgkJCQl0ZChl TGluaygnc21kX2JpbycsICdtZXRhX2VkaXQnLCAnaWQnLCAkaWQsIGdUeHQoJ2VkaXQnKSkp LgoJCQkJdGQoZExpbmsoJ3NtZF9iaW8nLCAnc21kX2Jpb19tZXRhX2RlbCcsICdpZCcsICRp ZCwgMSwgJ25hbWUnLCAkbmFtZSkpCgkJCSk7CgkJfQoKCQllY2hvIGVuZFRhYmxlKCkuJzwv Zm9ybT4nOwoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21k X2Jpb19tZXRhX21ha2VfbGlzdCgkdmFsKSB7Cgkkd3ZhbHMgPSBkb19saXN0KCR2YWwsICdc clxuJyk7CglpZiAoY291bnQoJHd2YWxzKSA9PSAxKSB7CgkJJHd2YWxzID0gZG9fbGlzdCgk dmFsKTsKCX0KCXJldHVybiBqb2luKCcsICcsIGRvQXJyYXkoJHd2YWxzLCAndHJpbScpKTsK fQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9iaW9fbWV0YV9z YXZlKCkgewoJZXh0cmFjdChkb1NsYXNoKHBzYShhcnJheSgnaWQnLCAnbmFtZScsICd0aXRs ZScsICd0eXBlJywgJ3NpemUnLCAndmFsJywgJ3Bvc2l0aW9uJykpKSk7CgkkaWQgPSBhc3Nl cnRfaW50KCRpZCk7CgkkdmFsID0gc21kX2Jpb19tZXRhX21ha2VfbGlzdCgkdmFsKTsKCgkk cnMgPSBzYWZlX3VwZGF0ZShTTURfQklPX01FVEEsICIKCQl0aXRsZSA9ICckdGl0bGUnLAoJ CXR5cGUgPSAnJHR5cGUnLAoJCXNpemUgPSAnJHNpemUnLAoJCXZhbCA9ICckdmFsJywKCQlw b3NpdGlvbiA9ICckcG9zaXRpb24nIiwKCQkiaWQgPSAkaWQiCgkpOwoKCWlmICgkcnMpIHsK CQlzbWRfYmlvX2NvbmZpZygKCQkJc21kX2Jpb19nVHh0KCdtZXRhX3VwZGF0ZWQnLCBhcnJh eSgne25hbWV9JyA9PiAkbmFtZSkpCgkJKTsKCX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCmZ1bmN0aW9uIHNtZF9iaW9fbWV0YV9hZGQoKSB7CglleHRyYWN0KGRvU2xhc2go cHNhKGFycmF5KCduYW1lJywgJ3RpdGxlJywgJ3R5cGUnLCAnc2l6ZScsICd2YWwnLCAncG9z aXRpb24nKSkpKTsKCSRuYW1lID0gc21kX2Jpb19zYW5pdGl6ZSgkbmFtZSk7CgoJaWYgKCFl bXB0eSgkbmFtZSkgJiYgc21kX2Jpb19tZXRhX2NoZWNrKCRuYW1lKSkgewoJCSRzaXplID0g KGVtcHR5KCRzaXplKSkgPyAyNSA6ICRzaXplOwoJCS8vVE9ETzogbWFrZSB0aGUgc2VsZWN0 aW9uIG9mIGNvbHVtbiBtb3JlIGludGVsbGlnZW50IGJhc2VkIG9uIHRoZSBnaXZlbiB0eXBl CgkJaWYgKCR0eXBlID09ICd0ZXh0YXJlYScpIHsKCQkJJGFzaXplID0gJzQwOTYnOyAvL1RP RE86IEZpbmQgYSB3YXkgdG8gdXNlciBzcGVjaWZ5IHRoaXMKCQkJJGNvbHR5cGUgPSAndGV4 dCc7CgkJfSBlbHNlIHsKCQkJJGFzaXplID0gJzY0JzsgLy9UT0RPOiBGaW5kIGEgd2F5IHRv IHVzZXIgc3BlY2lmeSB0aGlzCgkJCSRjb2x0eXBlID0gJ3ZhcmNoYXInOwoJCX0KCQkkcmV0 ID0gc2FmZV9hbHRlcihTTURfQklPLCAiQUREIGAkbmFtZWAgJGNvbHR5cGUoJGFzaXplKSBO VUxMIik7CgkJJHZhbCA9IHNtZF9iaW9fbWV0YV9tYWtlX2xpc3QoJHZhbCk7CgoJCWlmICgk cmV0KSB7CgkJCSRycyA9IHNhZmVfaW5zZXJ0KFNNRF9CSU9fTUVUQSwgIgoJCQkJbmFtZSA9 ICckbmFtZScsCgkJCQl0aXRsZSA9ICckdGl0bGUnLAoJCQkJdHlwZSA9ICckdHlwZScsCgkJ CQlzaXplID0gJyRzaXplJywKCQkJCXZhbCA9ICckdmFsJywKCQkJCXBvc2l0aW9uID0gJyRw b3NpdGlvbicKCQkJIik7CgoJCQlpZiAoJHJzKSB7CgkJCQlzbWRfYmlvX2NvbmZpZyhzbWRf YmlvX2dUeHQoJ21ldGFfYWRkZWQnKSk7CgkJCQlyZXR1cm47CgkJCX0KCQkJCQl9Cgl9CgoJ c21kX2Jpb19jb25maWcoYXJyYXkoc21kX2Jpb19nVHh0KCdtZXRhX25vdF9hZGRlZCcpLCBF X0VSUk9SKSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRf YmlvX21ldGFfZGVsKCkgewoJZXh0cmFjdChncHNhKGFycmF5KCdpZCcsJ25hbWUnKSkpOwoK CSRpZCA9IGFzc2VydF9pbnQoJGlkKTsKCSRtZXNzYWdlID0gc21kX2Jpb19nVHh0KCdtZXRh X25vdF9kZWxldGVkJyk7CgoJJGV4aXN0cyA9IHNtZF9iaW9fbWV0YV9jaGVjaygkbmFtZSk7 CgkkcmV0ID0gQHNhZmVfYWx0ZXIoU01EX0JJTywgIkRST1AgQ09MVU1OIGAkbmFtZWAiKTsK CWlmICgkcmV0IHx8ICRleGlzdHMpIHsKCQkkcmV0ID0gc2FmZV9kZWxldGUoU01EX0JJT19N RVRBLCAiaWQ9JyRpZCciKTsKCQkkbWVzc2FnZSA9IHNtZF9iaW9fZ1R4dCgnbWV0YV9kZWxl dGVkJyk7Cgl9CgoJc21kX2Jpb19jb25maWcoJG1lc3NhZ2UpOwp9CgovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2Jpb19tZXRhX2NoZWNrKCRjb2wpIHsKCSR1 Y29scyA9IGdldFRoaW5ncygnZGVzY3JpYmUgYCcuUEZYLid0eHBfdXNlcnNgJyk7CgkkYmNv bHMgPSBnZXRUaGluZ3MoJ2Rlc2NyaWJlIGAnLlBGWC5TTURfQklPLidgJyk7CgkkY29scyA9 IGFycmF5X21lcmdlKCR1Y29scywgJGJjb2xzKTsKIAlyZXR1cm4gKCFpbl9hcnJheSgkY29s LCAkY29scykpOwp9CgoKLy8gKioqKioqKioqKioqKioqKioqKioqKioqCi8vIFRBQkxFIEdF TkVSQVRJT04KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9iaW9f dGFibGVfZXhpc3QoKSB7CglpZiAoZ3BzKCdkZWJ1ZycpKSB7CgkJZWNobyAiKysgVEFCTEUg Ii5TTURfQklPX01FVEEuIiBIQVMgIi5jb3VudChAc2FmZV9zaG93KCdjb2x1bW5zJywgU01E X0JJT19NRVRBKSkuIiBDT0xVTU5TOyI7Cgl9CglyZXR1cm4oQHNhZmVfc2hvdygnY29sdW1u cycsIFNNRF9CSU9fTUVUQSkpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVu Y3Rpb24gc21kX2Jpb19pbnN0YWxsKCRtZXNzYWdlKSB7CglnbG9iYWwgJHNtZF9iaW9fdHlw ZXM7CgoJJHZlcnNpb24gPSBteXNxbF9nZXRfc2VydmVyX2luZm8oKTsKCSRHTE9CQUxTWyd0 eHBfZXJyX2NvdW50J10gPSAwOwoJaWYgKCR2ZXJzaW9uIDwgIjQuMS4yIikgewoJCSRHTE9C QUxTWyd0eHBfZXJyX2NvdW50J10rKzsKCQl0cmlnZ2VyX2Vycm9yKCJzbWRfYmlvIHJlcXVp cmVzIE15U1FMIHY0LjEuMiBvciBncmVhdGVyLiIpOwoJfSBlbHNlIHsKCQkkcmV0ID0gJyc7 CgkJJHNxbCA9IGFycmF5KCk7CgkJJHNxbFtdID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJ U1RTIGAiLlBGWC5TTURfQklPLiJgICgKCQkJYHVzZXJfcmVmYCB2YXJjaGFyKDY0KSBOT1Qg TlVMTCBkZWZhdWx0ICcnLAoJCQlVTklRVUUgS0VZIGB1c2VyX3JlZmAgKGB1c2VyX3JlZmAp CgkJKSBFTkdJTkU9TXlJU0FNIFBBQ0tfS0VZUz0xICI7CgoJCSRzcWxbXSA9ICJDUkVBVEUg VEFCTEUgSUYgTk9UIEVYSVNUUyBgIi5QRlguU01EX0JJT19NRVRBLiJgICgKCQkJYGlkYCBp bnQoNCkgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCgkJCWB0aXRsZWAgdmFyY2hhcig2NCkg TlVMTCBkZWZhdWx0ICcnLAoJCQlgbmFtZWAgdmFyY2hhcig2NCkgTk9UIE5VTEwgZGVmYXVs dCAnJywKCQkJYHR5cGVgIHNldCgiLmRvUXVvdGUoam9pbigiJywnIiwgYXJyYXlfa2V5cygk c21kX2Jpb190eXBlcykpKS4iKSBOT1QgTlVMTCBkZWZhdWx0ICd0ZXh0X2lucHV0JywKCQkJ YHNpemVgIHZhcmNoYXIoMTApIE5VTEwgZGVmYXVsdCAwLAoJCQlgdmFsYCB0ZXh0IE5VTEwg ZGVmYXVsdCAnJywKCQkJYHBvc2l0aW9uYCB0aW55aW50KDMpIE5VTEwgZGVmYXVsdCAwLAoJ CQlQUklNQVJZIEtFWSAoYGlkYCksCgkJCVVOSVFVRSBLRVkgKGBuYW1lYCkKCQkpIEVOR0lO RT1NeUlTQU0gQVVUT19JTkNSRU1FTlQ9MSI7CgoJCWlmKGdwcygnZGVidWcnKSkgewoJCQlk bXAoJHNxbCk7CgkJfQoJCWZvcmVhY2ggKCRzcWwgYXMgJHFyeSkgewoJCQkkcmV0ID0gc2Fm ZV9xdWVyeSgkcXJ5KTsKCQkJaWYgKCRyZXQ9PT1mYWxzZSkgewoJCQkJJEdMT0JBTFNbJ3R4 cF9lcnJfY291bnQnXSsrOwoJCQkJZWNobyAiPGI+Ii4kR0xPQkFMU1sndHhwX2Vycl9jb3Vu dCddLiIuPC9iPiAiLm15c3FsX2Vycm9yKCkuIjxiciAvPlxuIjsKCQkJCWVjaG8gIjwhLS1c biAkcXJ5IFxuLS0+XG4iOwoJCQl9CgkJfQoJfQoKCWlmICgkR0xPQkFMU1sndHhwX2Vycl9j b3VudCddID09IDApIHsKCQkkbWVzc2FnZSA9IHNtZF9iaW9fZ1R4dCgndGJsX2luc3RhbGxl ZCcpOwoJCXNtZF9iaW9fY29uZmlnKCRtZXNzYWdlKTsKCX0gZWxzZSB7CgkJJG1lc3NhZ2Ug PSBzbWRfYmlvX2dUeHQoJ3RibF9ub3RfaW5zdGFsbGVkJyk7CgkJc21kX2Jpb19jb25maWco JG1lc3NhZ2UpOwoJfQp9CgovLyAqKioqKioqKioqKioqKioqKioqKioqKioKLy8gQ0xJRU5U LVNJREUgVEFHUwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2Jp b19pbmZvKCRhdHRzLCAkdGhpbmc9TlVMTCkgewoJZ2xvYmFsICR0aGlzYXJ0aWNsZTsKCgll eHRyYWN0KGxBdHRzKGFycmF5KAoJCSdhdXRob3InID0+ICcnLAoJCSdpdGVtcycgPT4gJ1NN RF9BTEwnLAoJCSdleGNsdWRlJyA9PiAnJywKCQknZm9ybScgPT4gJycsCgkJJ3dyYXB0YWcn ID0+ICcnLAoJCSdicmVhaycgPT4gJycsCgkJJ2NsYXNzJyA9PiAnJywKCQknbGFiZWwnID0+ ICcxJywKCQknbGFiZWx0YWcnID0+ICcnLAoJCSdsYWJlbGNsYXNzJyA9PiAnU01EX0RGTFQn LAoJCSdpdGVtd3JhcHRhZycgPT4gJycsCgkJJ2l0ZW1jbGFzcycgPT4gJ1NNRF9ERkxUJywK CQknZGVidWcnID0+ICcwJywKCSksICRhdHRzKSk7CgoJJGF1dGhvciA9ICgkYXV0aG9yKSA/ ICRhdXRob3IgOiAoaXNzZXQoJHRoaXNhcnRpY2xlKSA/ICR0aGlzYXJ0aWNsZVsnYXV0aG9y aWQnXSA6ICcnKTsKCSRhdXRob3IgPSBkb19saXN0KCRhdXRob3IpOwoJJGF1dGhvcnMgPSBh cnJheSgpOwoJJHRoaW5nID0gKGVtcHR5KCRmb3JtKSkgPyAkdGhpbmcgOiBmZXRjaF9mb3Jt KCRmb3JtKTsKCgkvLyBFeHBhbmQgYW55IHByaXYgbGV2ZWxzCglmb3JlYWNoICgkYXV0aG9y IGFzICR1c2VyKSB7CgkJaWYgKHN0cnBvcyhzdHJ0b2xvd2VyKCR1c2VyKSwgInNtZF9wcml2 cyIpID09PSAwKSB7CgkJCSRhcHJpdnMgPSBleHBsb2RlKCc6JywgJHVzZXIpOwoJCQlhcnJh eV9zaGlmdCgkYXByaXZzKTsgLy8gUmVtb3ZlIHNtZF9wcml2cyB0b2tlbiBmcm9tIHRoZSBh cnJheQoJCQkkYXV0aG9ycyA9IGFycmF5X21lcmdlKCRhdXRob3JzLCBzYWZlX2NvbHVtbign bmFtZScsICd0eHBfdXNlcnMnLCAncHJpdnMgaW4gKCcgLiBkb1F1b3RlKGpvaW4oIicsJyIs ICRhcHJpdnMpKSAuICcpJykpOwoJCX0gZWxzZSB7CgkJCSRhdXRob3JzW10gPSAkdXNlcjsK CQl9Cgl9CgoJJGl0ZW1zID0gZG9fbGlzdCgkaXRlbXMpOwoKCSRleGNsdWRlID0gZG9fbGlz dCgkZXhjbHVkZSk7CgkkZmluYWwgPSAnJzsKCgkvLyBUaGUgaW5kaWNlcyBhcmUgdGhlIGdU eHQoKSBuYW1lcyBmb3IgdGhlIGFzc29jaWF0ZWQgaXRlbQoJJGNvcmVDb2xzID0gYXJyYXko J2lkJyA9PiAndXNlcl9pZCcsICduYW1lJyA9PiAnbmFtZScsICdyZWFsX25hbWUnID0+ICdS ZWFsTmFtZScsICdlbWFpbCcgPT4gJ2VtYWlsJywgJ3ByaXZpbGVnZXMnID0+ICdwcml2cycs ICdkYXRlJyA9PiAnbGFzdF9hY2Nlc3MnKTsKCglpZiAoJGF1dGhvcnMpIHsKCQkkbWV0YSA9 IHNhZmVfcm93cygnKicsIFNNRF9CSU9fTUVUQSwgJzE9MScpOwoJCSRjbWV0YSA9IHNhZmVf c2hvdygnY29sdW1ucycsICd0eHBfdXNlcnMnKTsKCQkkbnVtID0gY291bnQoJG1ldGEpOwoJ CSRsaXN0X3R5cGVzID0gYXJyYXkoJ2NoZWNrYm94JywgJ3JhZGlvJywgJ2xpc3QnKTsKCgkJ Zm9yZWFjaCgkY21ldGEgYXMgJGluZm8pIHsKCQkJaWYgKCFpbl9hcnJheSgkaW5mb1snRmll bGQnXSwgJGNvcmVDb2xzKSkgY29udGludWU7CgkJCSRtZXRhWyRudW1dWyduYW1lJ10gPSAk aW5mb1snRmllbGQnXTsKCQkJJHRGaWVsZCA9IGpvaW4oJycsIGFycmF5X2tleXMoJGNvcmVD b2xzLCAkaW5mb1snRmllbGQnXSkpOwoJCQkkbWV0YVskbnVtXVsndGl0bGUnXSA9IChnVHh0 KCR0RmllbGQpID09ICR0RmllbGQpID8gc21kX2Jpb19nVHh0KCR0RmllbGQpIDogZ1R4dCgk dEZpZWxkKTsKCQkJJGxlbmd0aCA9ICgoJG9mZiA9IHN0cnBvcygkaW5mb1snVHlwZSddLCAn KCcpKSAhPT0gZmFsc2UpID8gJG9mZiA6IHN0cmxlbigkaW5mb1snVHlwZSddKTsgLy8gRmlu ZCB0aGUgZmlyc3Qgb3BlbiBicmFja2V0IG9yIGVuZCBvZiBzdHJpbmcKCQkJJG1ldGFbJG51 bV1bJ3R5cGUnXSA9IHN1YnN0cigkaW5mb1snVHlwZSddLCAwLCAkbGVuZ3RoKTsKCQkJJG51 bSsrOwoJCX0KCQlpZiAoJGRlYnVnID4gMSkgewoJCQllY2hvICcrKyBNRVRBIERBVEEgKysn OwoJCQlkbXAoJG1ldGEpOwoJCX0KCgkJLy8gRXhjbHVzaW9ucyBvdmVycmlkZSBnaXZlbiBp dGVtcwoJCWlmICgkZXhjbHVkZVswXSAhPSAnJyB8fCBpbl9hcnJheSgnU01EX0FMTCcsICRp dGVtcykpIHsKCQkJJGl0ZW1zID0gc2FmZV9jb2x1bW4oJ25hbWUnLCBTTURfQklPX01FVEEs ICcxPTEnKTsKCQkJJGl0ZW1zID0gYXJyYXlfbWVyZ2UoJGl0ZW1zLCAkY29yZUNvbHMpOwoJ CX0KCgkJZm9yZWFjaCAoJGF1dGhvcnMgYXMgJHVzZXIpIHsKCQkJJGNiaW8gPSBzYWZlX3Jv dygnKicsICd0eHBfdXNlcnMnLCAibmFtZT0nJHVzZXInIik7CgkJCSRlYmlvID0gc2FmZV9y b3coJyonLCBTTURfQklPLCAidXNlcl9yZWY9JyR1c2VyJyIpOwoJCQkkaWR4ID0gLTE7CgkJ CSRvdXQgPSBhcnJheSgpOwoJCQkkcmVwbGFjZW1lbnRzID0gYXJyYXkoKTsKCgkJCWZvcmVh Y2ggKCRpdGVtcyBhcyAkaXJlZiA9PiAkd2hhdG5vdCkgewoJCQkJaWYgKGluX2FycmF5KCR3 aGF0bm90LCAkZXhjbHVkZSkpIGNvbnRpbnVlOwoKCQkJCS8vIEZpbmQgdGhlIG1ldGEgcm93 CgkJCQlmb3JlYWNoICgkbWV0YSBhcyAkbnVtID0+ICRkYXRhKSB7CgkJCQkJaWYgKCRkYXRh WyduYW1lJ10gPT0gJHdoYXRub3QpIHsKCQkJCQkJJGlkeCA9ICRudW07CgkJCQkJCWJyZWFr OwoJCQkJCX0KCQkJCX0KCQkJCWlmICgkaWR4ID4gLTEpIHsKCQkJCQlpZiAoaW5fYXJyYXko JHdoYXRub3QsICRjb3JlQ29scykpIHsKCQkJCQkJJHJvdyA9IGlzc2V0KCRjYmlvWyR3aGF0 bm90XSkgPyAkY2Jpb1skd2hhdG5vdF0gOiAnJzsKCQkJCQl9IGVsc2UgewoJCQkJCQkkcm93 ID0gaXNzZXQoJGViaW9bJHdoYXRub3RdKSA/ICRlYmlvWyR3aGF0bm90XSA6ICcnOwoJCQkJ CX0KCgkJCQkJaWYgKCRyb3cpIHsKCQkJCQkJaWYgKGluX2FycmF5KCRtZXRhWyRpZHhdWyd0 eXBlJ10sICRsaXN0X3R5cGVzKSkgewoJCQkJCQkJJHJvdyA9IGRvX2xpc3QoJHJvdyk7CgkJ CQkJCQkkcm93ID0gam9pbignLCAnLCRyb3cpOwoJCQkJCQl9CgkJCQkJCSR0aGVDbGFzcyA9 ICgkaXRlbWNsYXNzPT0nU01EX0RGTFQnKSA/ICcgc21kX2Jpb18nLiRtZXRhWyRpZHhdWydu YW1lJ10gOiAoKCRpdGVtY2xhc3MpID8gJGl0ZW1jbGFzcyA6ICcnKTsKCQkJCQkJJGxhYkNs YXNzID0gKCRsYWJlbGNsYXNzPT0nU01EX0RGTFQnKSA/ICcgc21kX2Jpb18nLiRtZXRhWyRp ZHhdWyduYW1lJ10gOiAoKCRsYWJlbGNsYXNzKSA/ICRsYWJlbGNsYXNzIDogJycpOwoJCQkJ CQkkdGhlVGl0bGUgPSAkbWV0YVskaWR4XVsndGl0bGUnXTsKCQkJCQkJJHRoZU5hbWUgPSAk bWV0YVskaWR4XVsnbmFtZSddOwoJCQkJCQkkcmVwbGFjZW1lbnRzWyd7c21kX2Jpb19pbmZv X2l0ZW19J10gPSAkcm93OwoJCQkJCQlpZiAoaW5fYXJyYXkoJG1ldGFbJGlkeF1bJ3R5cGUn XSwgJGxpc3RfdHlwZXMpKSB7CgkJCQkJCQkkY2hvc2VucyA9IGRvX2xpc3QoJHJvdyk7CgkJ CQkJCQkkbnYgPSBzbWRfYmlvX3NwbGl0dmFsKCRtZXRhWyRpZHhdWyd2YWwnXSk7CgkJCQkJ CQlsaXN0KCRudiwgJGRmbHQpID0gc21kX2Jpb19nZXRfZGVmYXVsdCgkbnYsICRyb3cpOwoJ CQkJCQkJJGxpc3RjdHI9MTsKCQkJCQkJCSRjaG9zZW5jdHI9MDsKCQkJCQkJCWZvcmVhY2go JG52IGFzICRsaXN0aXRlbSA9PiAkbGlzdGxhYmVsKSB7CgkJCQkJCQkJJHJlcGxhY2VtZW50 c1sne3NtZF9iaW9fJy4kdGhlTmFtZS4nX2l0ZW1fJy4kbGlzdGN0ci4nfSddID0gJGxpc3Rp dGVtOwoJCQkJCQkJCSRyZXBsYWNlbWVudHNbJ3tzbWRfYmlvXycuJHRoZU5hbWUuJ19sYWJl bF8nLiRsaXN0Y3RyLid9J10gPSAkbGlzdGxhYmVsOwoJCQkJCQkJCWlmIChpbl9hcnJheSgk bGlzdGl0ZW0sICRjaG9zZW5zKSkgewoJCQkJCQkJCQkkY2hvc2VuY3RyKys7CgkJCQkJCQkJ CSRyZXBsYWNlbWVudHNbJ3tzbWRfYmlvXycuJHRoZU5hbWUuJ19jaG9zZW5fJy4kY2hvc2Vu Y3RyLid9J10gPSAkbGlzdGl0ZW07CgkJCQkJCQkJCSRyZXBsYWNlbWVudHNbJ3tzbWRfYmlv XycuJHRoZU5hbWUuJ19jaG9zZW5fbGFiZWxfJy4kY2hvc2VuY3RyLid9J10gPSAkbGlzdGxh YmVsOwoJCQkJCQkJCX0KCQkJCQkJCQkkbGlzdGN0cisrOwoJCQkJCQkJfQoJCQkJCQkJJHJl cGxhY2VtZW50c1sne3NtZF9iaW9fJy4kdGhlTmFtZS4nX2NvdW50fSddID0gJGxpc3RjdHIt MTsKCQkJCQkJCSRyZXBsYWNlbWVudHNbJ3tzbWRfYmlvXycuJHRoZU5hbWUuJ19jaG9zZW5f Y291bnR9J10gPSAkY2hvc2VuY3RyOwoJCQkJCQl9CgkJCQkJCSRyZXBsYWNlbWVudHNbJ3tz bWRfYmlvX2luZm9fbmFtZX0nXSA9ICR0aGVOYW1lOwoJCQkJCQkkcmVwbGFjZW1lbnRzWyd7 c21kX2Jpb19pbmZvX3RpdGxlfSddID0gJHRoZVRpdGxlOwoJCQkJCQkkcmVwbGFjZW1lbnRz Wyd7c21kX2Jpb19pbmZvX2l0ZW1jbGFzc30nXSA9ICR0aGVDbGFzczsKCQkJCQkJJHJlcGxh Y2VtZW50c1sne3NtZF9iaW9faW5mb19sYWJlbGNsYXNzfSddID0gJGxhYkNsYXNzOwoJCQkJ CQkkcmVwbGFjZW1lbnRzWyd7c21kX2Jpb18nLiR0aGVOYW1lLid9J10gPSAkcm93OwoJCQkJ CQlpZiAoJGRlYnVnKSB7CgkJCQkJCQllY2hvICcrKyBSRVBMQUNFTUVOVFMgKysnOwoJCQkJ CQkJZG1wKCRyZXBsYWNlbWVudHMpOwoJCQkJCQl9CgkJCQkJCSR0b1BhcnNlID0gKCFlbXB0 eSgkdGhpbmcpKSA/ICR0aGluZyA6ICh0YWcoKCgkbGFiZWw9PTEpID8gJHRoZVRpdGxlIDog KCgkbGFiZWw9PScnKSA/ICcnIDogKCgkbGFiZWwpID8gJGxhYmVsIDogJHRoZU5hbWUpKSks ICgoJGxhYmVsdGFnKT8kbGFiZWx0YWc6J2JyLycpLCAoKCRsYWJlbGNsYXNzKT8gJyBjbGFz cz0iJy4kbGFiQ2xhc3MuJyInIDogJycpKS4oKCRpdGVtd3JhcHRhZykgPyBkb1RhZygkcm93 LCAkaXRlbXdyYXB0YWcsICR0aGVDbGFzcyk6ICRyb3cpKTsKCgkJCQkJCSRvdXRbXSA9IHBh cnNlKHN0cnRyKCR0b1BhcnNlLCAkcmVwbGFjZW1lbnRzKSk7CgkJCQkJfQoJCQkJfQoJCQl9 CgoJCQkkZmluYWwgLj0gKCR3cmFwdGFnKSA/IGRvV3JhcCgkb3V0LCAkd3JhcHRhZywgJGJy ZWFrLCAkY2xhc3MpIDogam9pbignJywgJG91dCk7CgkJfQoJfQoJcmV0dXJuICRmaW5hbDsK fQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEEgd3JhcHBlciB0byBhcnRpY2xl X2N1c3RvbSB0aGF0IGF1dG8gc2V0cyB0aGUgdXNlciB0byB0aGUgb25lIHNwZWNpZmllZAov LyBvciB0aGUgY3VycmVudCBhcnRpY2xlJ3MgYXV0aG9yLgovLyBOT1RFOiBsQXR0cygpIGlz IE5PVCB1c2VkIGJlY2F1c2UgdGhhdCBsaW1pdHMgdGhlIHBsdWdpbiBhdHRyaWJ1dGVzLgpm dW5jdGlvbiBzbWRfYmlvX2FydGljbGVzKCRhdHRzLCAkdGhpbmc9TlVMTCkgewoJZ2xvYmFs ICR0aGlzYXJ0aWNsZTsKCgkkYXV0aG9yID0gKGlzc2V0KCRhdHRzWydhdXRob3InXSkpID8g JGF0dHNbJ2F1dGhvciddIDogKGlzc2V0KCR0aGlzYXJ0aWNsZSkgPyAkdGhpc2FydGljbGVb J2F1dGhvcmlkJ10gOiAnJyk7CgkkYXR0c1snYXV0aG9yJ10gPSAkYXV0aG9yOwoJcmV0dXJu IHBhcnNlQXJ0aWNsZXMoJGF0dHMsICcxJywgJHRoaW5nKTsKfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi8vIFBsdWdpbi1zcGVjaWZpYyByZXBsYWNlbWVudCBzdHJpbmdzIC0g bG9jYWxpc2UgYXMgcmVxdWlyZWQKZnVuY3Rpb24gc21kX2Jpb19nVHh0KCR3aGF0LCAkYXR0 cyA9IGFycmF5KCkpIHsKCSRsYW5nID0gYXJyYXkoCgkJJ2FkbWluX3RhYicgPT4gJ0JpbyBD b25maWcnLAoJCSdoZWxwJyA9PiAnVGlwJywKCQknaGVscF91bnVzZWQnID0+ICdVbnVzZWQg Zm9yIHRoaXMgVHlwZScsCgkJJ2lkJyA9PiAnSUQnLAoJCSduYW1lJyA9PiAnTmFtZScsCgkJ J21ldGFfYWRkJyA9PiAnQWRkIGJpbyBpdGVtJywKCQknbWV0YV9hZGRlZCcgPT4gJ0JpbyBp dGVtIGFkZGVkJywKCQknbWV0YV9ub3RfYWRkZWQnID0+ICdQcm9ibGVtIGFkZGluZyBiaW8g aXRlbTogY2hlY2sgbmFtZSBpcyBub3QgYWxyZWFkeSB1c2VkJywKCQknbWV0YV9kZWxldGVk JyA9PiAnQmlvIGl0ZW0gYW5kIGFsbCBpdHMgZGF0YSBkZWxldGVkJywKCQknbWV0YV9ub3Rf ZGVsZXRlZCcgPT4gJ1Byb2JsZW0gZGVsZXRpbmcgYmlvIGl0ZW06IGl0IG1heSBzdGlsbCBl eGlzdCcsCgkJJ21ldGFfZWRpdCcgPT4gJ0VkaXQgYmlvIGl0ZW0nLAoJCSdtZXRhX3VwZGF0 ZWQnID0+ICdCaW8gaXRlbSAie25hbWV9IiB1cGRhdGVkJywKCQkncG9zaXRpb24nID0+ICdQ b3NpdGlvbicsCgkJJ3ByaXZpbGVnZXMnID0+ICdQcml2aWxlZ2VzJywKCQkncmVhbF9uYW1l JyA9PiAnRnVsbCBuYW1lJywKCQknc2l6ZScgPT4gJ1NpemUnLAoJCSdzaXplaGVscF90ZXh0 X2lucHV0JyA9PiAnVXAgdG8gdHdvIHZhbHVlcyBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2Yg Y2hhcmFjdGVyczogMSkgb2YgdGhlIGlucHV0IGJveCBvbiB0aGUgQWRtaW4tPlVzZXJzIHRh YiwgMikgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBlbnRlcicsCgkJJ3NpemVoZWxwX3RleHRh cmVhJyA9PiAnVXAgdG8gdHdvIHZhbHVlcyBzcGVjaWZ5aW5nIHRoZSBkaW1lbnNpb25zIG9m IHRoZSB0ZXh0YXJlYSBpbiBjaGFyYWN0ZXJzOiAxKSBXaWR0aCwgMikgSGVpZ2h0JywKCQkn c2l6ZWhlbHBfaW1hZ2UnID0+ICdUaGUgeCwgeSBkaW1lbnNpb25zIG9mIHRoZSBpbWFnZS90 aHVtYm5haWwgb24gdGhlIEFkbWluLT5Vc2VycyB0YWIuIElmIG9ubHkgb25lIHZhbHVlIGlz IGdpdmVuLCB0aGUgaW1hZ2Ugd2lsbCBiZSBzcXVhcmUuIElmIGVpdGhlciB2YWx1ZSBpcyBv bWl0dGVkLCB0aGUgZGltZW5zaW9ucyBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlIHdpbGwgYmUg dXNlZCBpbnN0ZWFkJywKCQkndmFsaGVscF90ZXh0X2lucHV0JyA9PiAnVGhlIGRlZmF1bHQg dmFsdWUgdGhhdCB3aWxsIGFwcGVhciBpbiB0aGUgdGV4dCBib3gnLAoJCSd2YWxoZWxwX2xy YycgPT4gJ0NvbW1hLSBvciBuZXdsaW5lLXNlcGFyYXRlZCBsaXN0IG9mIGF2YWlsYWJsZSBv cHRpb25zIGluIHRoZSBzZXQuIElmIHlvdSBsaXN0IG9ubHkgaXRlbSBsYWJlbHMsIHRoZSBu YW1lcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgKGxvd2VyIGNhc2UsIG5vIHNw YWNlcykuIFlvdSBtYXkgc3BlY2lmeSB5b3VyIG93biBuYW1lcyB1c2luZzogbmFtZTEgPT4g TGFiZWwgMSwgbmFtZTIgLT4gTGFiZWwgMiwgLi4uJywKCQkndmFsaGVscF95bnInID0+ICdE ZWZhdWx0IHZhbHVlIG9mIHRoZSBZZXMvTm8gY2hlY2tib3guIDAgKG9yIG9taXR0ZWQpID0g Tm87IDEgPSBZZXMnLAoJCSd2YWxoZWxwX2ltYWdlJyA9PiAnTGltaXQgdGhlIGltYWdlcyBp biB0aGUgZHJvcGRvd24gdG8gdGhlIG9uZXMgaW4gdGhpcyBnaXZlbiBwYXJlbnQgaW1hZ2Ug Y2F0ZWdvcnkuIElmIG9taXR0ZWQsIGFsbCBpbWFnZXMgYXJlIGF2YWlsYWJsZScsCgkJJ3Ri bF9pbnN0YWxsZWQnID0+ICdUYWJsZXMgaW5zdGFsbGVkLicsCgkJJ3RibF9ub3RfaW5zdGFs bGVkJyA9PiAnVGFibGVzIE5PVCBpbnN0YWxsZWQuJywKCQkndGl0bGUnID0+ICdUaXRsZScs CgkJJ3R5cGUnID0+ICdUeXBlJywKCQkndmFsdWUnID0+ICdWYWx1ZScsCgkpOwoJcmV0dXJu IHN0cnRyKCRsYW5nWyR3aGF0XSwgJGF0dHMpOwp9IjtzOjM6Im1kNSI7czozMjoiOTI3M2Rj OWY1ZjQxNGI2NWY5OWFmM2U3ZTMxZTQxMjYiO30=