# smd_slimbox 0.24a # Image gallery lightbox wrapper using Christophe Beyl's Slimbox # Stef Dawson # http://www.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: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTE6InNtZF9zbGltYm94IjtzOjY6ImF1dGhvciI7czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjU6Imh0dHA6Ly93d3cuc3RlZmRhd3Nvbi5jb20iO3M6NzoidmVyc2lvbiI7czo1OiIwLjI0YSI7czoxMToiZGVzY3JpcHRpb24iO3M6NjI6IkltYWdlIGdhbGxlcnkgbGlnaHRib3ggd3JhcHBlciB1c2luZyBDaHJpc3RvcGhlIEJleWwncyBTbGltYm94IjtzOjQ6ImhlbHAiO3M6MTc2MjA6IjxoMT5zbWRfc2xpbWJveDwvaDE+DQo8cCBjbGFzcz0ic21hbGwiPltyZXF1aXJlcyBzbWRfbGliIHRvIGJlIGluc3RhbGxlZCBhbmQgYWN0aXZhdGVkXTxwPg0KDQo8cD5ZZWFoLCB5ZWFoIDxlbT5hbm90aGVyPC9lbT4gbGlnaHRib3gtc3R5bGUgaW1hZ2UgZ2FsbGVyeSEgQnV0IHRoaXMgdGltZSB1c2luZyA8YSBocmVmPSJodHRwOi8vd3d3LmRpZ2l0YWxpYS5iZS9zb2Z0d2FyZS9zbGltYm94Ij5DaHJpc3RvcGhlIEJleWwnczwvYT4gdWx0cmEtbGlnaHR3ZWlnaHQgU2xpbWJveCAoZGlldCBjb2tlIHZlcnNpb24gb2YgbGlnaHRib3gpIGFuZCBtb290b29scy4gQWxzbyBwbGFnaWFyaXNlcyBpZGVhcyBmcm9tIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD01MTc2Ij5Sb2IgU2FibGUncyByc3NfdGh1bWJwb3A8L2E+LiBTdXBwb3J0cyB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTIwNjkyIj5NdWx0aS1MaW5ndWFsIFBhY2s8L2E+IChNTFApIGZvciBpbWFnZSBjYXB0aW9uL2FsdCBhbmQgaW50ZXJuYWwgc3RyaW5nIGxvY2FsaXNhdGlvbi4gTWFueSB0aGFua3MgdG8gdGhlIG9yaWdpbmFsIGF1dGhvcnMuPC9wPg0KDQo8aDI+SW5zdGFsbGF0aW9uPC9oMj4NCg0KPHA+RW5zdXJlIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBqcyBmb2xkZXIgKDxjb2RlPm1vb3Rvb2xzLmpzPC9jb2RlPiBhbmQgPGNvZGU+c2xpbWJveC5qczwvY29kZT4pIGFuZCB0aGUgY3NzIGZvbGRlciAoPGNvZGU+c2xpbWJveC5jc3M8L2NvZGU+IGFuZCA0IGltYWdlcykgYXJlIHVwbG9hZGVkIHRvIHlvdXIgc2VydmVyLiBZb3UgY2FuIHB1dCB0aGUgZGlyZWN0b3JpZXMgaW4gdGhlIHRleHRwYXR0ZXJuIHJvb3QgZm9sZGVyIG9yIHNvbWV3aGVyZSBlbHNlIG9mIHlvdXIgY2hvaWNlLiBJdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hlcmUgeW91IHB1dCB0aGVtLCB5b3UganVzdCBoYXZlIHRvIHRlbGwgdGhlIHBsdWdpbiB3aGVyZSBpdCBpcy48L3A+DQoNCjxwPldoZW4gaW5zdGFsbGVkLCB0aGlzIHBsdWdpbiBhZGRzIHR3byB0YWdzLiBUaGUgZmlyc3QgKDxjb2RlPnNtZF9zbGltYm94X2luYzwvY29kZT4pIGdvZXMgaW4gdGhlICZsdDtoZWFkJmd0OyBzZWN0aW9uIG9mIHlvdXIgcGFnZSBhbmQgbG9hZHMgdGhlIHJlcXVpcmVkIGxpYnJhcmllcy4gVGhlIHNlY29uZCAoPGNvZGU+c21kX3NsaW1ib3g8L2NvZGU+KSBpcyB0aGUgYWN0dWFsIHBsdWdpbiB0aGF0IGRpc3BsYXlzIHlvdXIgaW1hZ2UgZ2FsbGVyeSAob3IgZ2FsbGVyaWVzIGlmIHlvdSdyZSBmZWVsaW5nIGFkdmVudHVyb3VzKS48L3A+DQoNCjxwPkEgcXVpY2sgd29yZCBhYm91dCBob3cgaXQgYWxsIHdvcmtzOiB0aGUgcGx1Z2luIG9wdGlvbnMgZ292ZXJuIHdoaWNoIHRodW1ibmFpbHMgdG8gdXNlIGFuZCBob3cgdGhleSBhcmUgZGlzcGxheWVkIG9ubHkuIE9uY2UgdGhlIHRodW1icyBhcmUgY2xpY2tlZCwgY29udHJvbCBpcyBoYW5kZWQgb3ZlciB0byBzbGltYm94IGFuZCBtb290b29scyB0byBkbyB0aGUgZmFuY3kgd29yay4gVGhlcmVmb3JlLCBpZiB5b3Ugd2lzaCB0byBjb25maWd1cmUgdGhlIGxvb2sgb2YgdGhlICJsaWdodGJveCIgcGFydCwgeW91IG5lZWQgdG8gZWRpdCA8Y29kZT5zbGltYm94LmpzPC9jb2RlPiBhbmQvb3IgPGNvZGU+c2xpbWJveC5jc3M8L2NvZGU+LiBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIG9uIDxhIGhyZWY9Imh0dHA6Ly93d3cuZGlnaXRhbGlhLmJlL3NvZnR3YXJlL3NsaW1ib3giPkNocmlzdG9waGUgQmV5bCdzIHBhZ2U8L2E+LjwvcD4NCg0KPHA+QWxzbywgaWYgeW91IGFscmVhZHkgdXNlIG1vb3Rvb2xzIGZvciB5b3VyIHBhZ2UgeW91IGRvbid0IG5lZWQgdG8gdXBsb2FkIGl0IGFnYWluLiBKdXN0IG1ha2Ugc3VyZSB0aGUgdmVyc2lvbiB5b3UgdXNlIGhhcyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHBsdXMgdGhlICJmeCIgYW5kICJ3aW5kb3ciIG1vZHVsZXMgbGlzdGVkIG9uIENocmlzdG9waGUncyBwYWdlLjwvcD4NCg0KPGgyPlVzYWdlOiBzbWRfc2xpbWJveF9pbmM8L2gyPg0KDQo8cD5Tb21ld2hlcmUgaW4gdGhlICZsdDtoZWFkJmd0OyBvZiB0aGUgcGFnZSB0aGF0IHlvdSB3YW50IHlvdXIgZ2FsbGVyeSBvbiwgYWRkOjwvcD4NCg0KPHA+PGNvZGU+Jmx0O3R4cDpzbWRfc2xpbWJveF9pbmMganNkaXI9Ii9qcyIgY3NzZGlyPSIvY3NzIiAvJmd0OzwvY29kZT48L3A+DQoNCjxwPklmIHlvdSBoYXZlIHRoZSBsaWJyYXJpZXMgaW4gdGhlIGpzIGFuZCBjc3MgZm9sZGVycyBpbiB5b3VyIHRleHRwYXR0ZXJuIHJvb3QgZm9sZGVyLCB0aGF0IHdpbGwgYmUgZmluZS4gSWYgbm90LCB5b3UgY2FuIGNoYW5nZSB3aGVyZSB0aGUgcGx1Z2luIGxvb2tzIGZvciB0aGUgbGlicmFyaWVzIGJ5IGFkanVzdGluZyB0aGUgdHdvIG9wdGlvbnMuPC9wPg0KDQo8cD5JZiB5b3Ugd2FudCBtb3JlIGNvbnRyb2wsIHlvdSBoYXZlIHR3byBtb3JlIG9wdGlvbnMgYXZhaWxhYmxlLiBUaGUgZmlyc3QgaXMgPGNvZGU+c2NyaXB0czwvY29kZT4uIFRoaXMgdGFrZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB1cCB0byAzIGFyZ3VtZW50cyBpbiB0aGlzIG9yZGVyOiBtb290b29sc0pTTG9jYXRpb24sIHNsaW1ib3hKU0xvY2F0aW9uLCBzbGltYm94Q1NTTG9jYXRpb24uIFRoZSBvcmRlciBpcyBpbXBvcnRhbnQ6IG1vb3Rvb2xzIG11c3QgYXBwZWFyIG9uIHRoZSBwYWdlIGJlZm9yZSBzbGltYm94LmpzISBTbyBpZiB5b3UgaGF2ZSB5b3VyIHNjcmlwdHMgaW4gZGlmZmVyZW50IGRpcmVjdG9yaWVzIG9yIGhhdmUgcmVuYW1lZCB0aGUgZmlsZXMsIGluc3RlYWQgb2YgdGhlIDxjb2RlPmNzc2RpcjwvY29kZT4gYW5kIDxjb2RlPmpzZGlyPC9jb2RlPiBvcHRpb25zIHlvdSBjb3VsZCBkbzo8L3A+DQoNCjxwPjxjb2RlPiZsdDt0eHA6c21kX3NsaW1ib3hfaW5jIHNjcmlwdHM9Ii9zY3JpcHRzL21vb3Rvb2xzLmpzLCAvc2JveC9zbGltYm94LmpzLCAvc2Jjc3Mvc2xpbWJveC5jc3MiIC8mZ3Q7PC9jb2RlPjwvcD4NCg0KPHA+VGhlIHRocmVlIG9wdGlvbnMgY2FuIGVpdGhlciBiZSBkaXJlY3QgZmlsZSBwYXRocywgYXMgaW4gdGhlIGV4YW1wbGUgYWJvdmUsIG9yIGZ1bGwgWEhUTUwgdGFncyBpbmNsdWRpbmcgPGNvZGU+Jmx0O3NjcmlwdCZndDs8L2NvZGU+IG9yIDxjb2RlPiZsdDtsaW5rJmd0OzwvY29kZT50YWdzLiBZb3UgY2FuIG1peCBhbmQgbWF0Y2ggdGhlIG9wdGlvbnMgaW4gYW55IHdheSB5b3UgbGlrZSwgYXMgbG9uZyBhcyB0aGUgdG90YWwgbnVtYmVyIG9mIHNjcmlwdHMgeW91IHRlbGwgdGhlIHRhZyB0byBsb2FkIGRvZXNuJ3QgZXhjZWVkIDMuIFNvIGFuIGVxdWl2YWxlbnQgdG8gdGhlIGFib3ZlIGlzOjwvcD4NCg0KPHA+PGNvZGU+Jmx0O3R4cDpzbWRfc2xpbWJveF9pbmMgc2NyaXB0cz0iL3NjcmlwdHMvbW9vdG9vbHMuanMsIC9zYm94L3NsaW1ib3guanMiIGNzc2Rpcj0iL3NiY3NzIiAvJmd0OzwvY29kZT48L3A+DQoNCjxwPklmIHlvdSB3aXNoIHRvIGxvYWQgc29tZSBvciBhbGwgb2YgdGhlIHNjcmlwdHMgIm91dHNpZGUiIHRoZSBzbWRfc2xpbWJveF9pbmMgZnVuY3Rpb24geW91IGNhbiB1c2UgdGhlIDxjb2RlPnNraXA8L2NvZGU+IG9wdGlvbiB0byB0ZWxsIGl0IGhvdyBtYW55IHlvdSBoYXZlIGxvYWRlZC4gSWYsIGZvciBleGFtcGxlLCB5b3UgaGF2ZSBzdG1famF2YXNjcmlwdCBpbnN0YWxsZWQgeW91IGNvdWxkIGRvOjwvcD4NCg0KPHA+PGNvZGU+Jmx0O3R4cDpqcyBuPSJtb290b29scyIgLyZndDs8L2NvZGU+PGJyIC8+DQo8Y29kZT4mbHQ7dHhwOnNtZF9zbGltYm94X2luYyBza2lwPSIxIiBzY3JpcHRzPSIsIC9zYm94L3NsaW1ib3guanMsIC9zYmNzcy9zbGltYm94LmNzcyIgLyZndDs8L2NvZGU+PC9wPg0KDQo8cD5Ob3RlIHRoZSBlbXB0eSBvcHRpb24gYXQgdGhlIHN0YXJ0LiBZb3UgZG9uJ3QgaGF2ZSB0byBkbyB0aGF0IChiZWNhdXNlIDxjb2RlPnNraXA8L2NvZGU+IHdpbGwganVtcCBvdmVyIGl0IGZvciB5b3UpIGJ1dCBpZiB5b3UgbGlrZSB0byBtYWtlIGl0IG9idmlvdXMsIGl0IGRvZXMgbm8gaGFybS4gVXNpbmcgdGhlIHNvbGUgb3B0aW9uIDxjb2RlPnNraXA9IjMiPC9jb2RlPiBtZWFucyAiSSd2ZSBsb2FkZWQgdGhlbSBhbGwgbXlzZWxmLCBJIGtub3cgd2hhdCBJJ20gZG9pbmciIDotKTwvcD4NCg0KPHA+T25lIG1vcmUgdGhpbmcgd2l0aCB0aGlzIGZlYXR1cmU6IFRYUCBkb2VzIG5vdCBhbGxvdyB5b3UgdG8gZGlyZWN0bHkgZW1iZWQgb3RoZXIgdGFncyBhcyBhdHRyaWJ1dGVzIChzbyB1bmZvcnR1bmF0ZWx5IDxjb2RlPnNjcmlwdHM9IiZsdDt0eHA6Y3NzIC8mZ3Q7IjwvY29kZT4gZmFpbHMpLiBJZiB5b3UgYWJzb2x1dGVseSBtdXN0IGRvIGl0LCB5b3UgY2FuIGNoZWF0IChzZWUgV2V0J3MgZXhjZWxsZW50IHBvc3Qgb24gPGEgaHJlZj0iaHR0cDovL2F3YXN0ZW9md29yZHMuY29tL2FydGljbGUvdGV4dHBhdHRlcm4tdGFncy1pbi10YWdzLXRoZS1nb3JkaWFuLWtub3QiPnRhZ3MgaW4gdGFnczwvYT4gZm9yIG1vcmUgZGV0YWlscykgYnkgZHJvcHBpbmcgaW50byBQSFAgYW5kIGRvaW5nIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmc6PC9wPg0KDQo8cD48Y29kZT4mbHQ7dHhwOnNtZF9zbGltYm94X2luYyBjc3NkaXI9Ii9jc3MiIHNjcmlwdHM9Ii9zY3JpcHRzL21vb3Rvb2xzLmpzLCAmbHQ7dHhwOnBocCZndDtlY2hvIGpzKGFycmF5KCAnbicgPT4gJ3NsaW1ib3gnKSk7Jmx0Oy90eHA6cGhwJmd0OyAvJmd0OzwvY29kZT48L3A+DQoNCjxwPlVuZm9ydHVuYXRlbHksIHRoZSBwbHVnaW4gZG9lcyBub3QgY2hlY2sgdGhhdCB5b3UgaGF2ZSBnaXZlbiBpdCB0aGUgY29ycmVjdCBmaWxlIGxvY2F0aW9ucyB0byB2YWxpZCwgcmVhZGFibGUgZmlsZXMgc28gaWYgeW91IGhhdmUgcHJvYmxlbXMgbWFraW5nIGl0IHdvcmssIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgcGFnZSB0byBzZWUgaWYgeW91J3JlIGxvYWRpbmcgd2hhdCB5b3UgdGhpbmsgeW91J3JlIGxvYWRpbmcgZnJvbSB0aGUgY29ycmVjdCBwbGFjZXMhPC9wPg0KDQo8cD5JZiB5b3UgYXJlIHVzaW5nIFJTUyBmZWVkcyBvciBqdXN0IGRvbid0IHdhbnQgdG8gdXNlIHNtZF9zbGltYm94X2luYywgeW91IGNhbiB0dXJuIGl0IG9mZi4gSnVzdCBhZGQgbGliY2hlY2s9IjAiIHRvIHRoZSBzbWRfc2xpbWJveCB0YWcuIFNlZSB0aGUgbmV4dCBzZWN0aW9uLjwvcD4NCg0KPGgyPlVzYWdlOiBzbWRfc2xpbWJveDwvaDI+DQoNCjxwPk9uY2UgdGhlIHNjcmlwdHMgYXJlIGxvYWRlZCwgeW91IGFyZSBmcmVlIHRvIHVzZSA8Y29kZT4mbHQ7dHhwOnNtZF9zbGltYm94IC8mZ3Q7PC9jb2RlPiB0byBkaXNwbGF5IGFuIGltYWdlIGdhbGxlcnkuIFdpdGhvdXQgYW55IG9wdGlvbnMgaXQgZGlzcGxheXMgZXZlcnkgaW1hZ2UgaW4geW91ciBlbnRpcmUgY29sbGVjdGlvbiBhbmQgd29uJ3QgbG9vayB2ZXJ5IHByZXR0eSAodGhvdWdoIHlvdSBjYW4gaGVscCBhIGJpdCBieSBzdGFydGluZyB3aXRoIHRoZSA8YSBocmVmPSIjU3R5bGluZyI+ZXhhbXBsZSBDU1M8L2E+IGdpdmVuIGxhdGVyKS4gVGhlIGZvbGxvd2luZyBvcHRpb25zIHRhbWUgdGhlIHBsdWdpbiBhIGxpdHRsZTo8L3A+DQoNCjxwPg0KPHVsPg0KPGxpPjxiPmNhdGVnb3J5PC9iPjxiciAvPmNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGltYWdlIGNhdGVnb3J5IG5hbWVzIHRvIHNob3cuDQo8YnIgLz5Vc2luZyAiP2MiIGFzIG9uZSBvZiB0aGUgb3B0aW9ucyB1c2VzIHRoZSBjdXJyZW50IGdsb2JhbCBjYXRlZ29yeSBhcyB0aGUgbmFtZSBvZiBhbiBpbWFnZSBjYXRlZ29yeS4NCjxiciAvPlVzaW5nICIhYyIgdXNlcyBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgY3VycmVudCBnbG9iYWwgY2F0ZWdvcnkuDQo8YnIgLz5Vc2luZyAiP3MiIGFzIG9uZSBvZiB0aGUgb3B0aW9ucyB1c2VzIHRoZSBjdXJyZW50IHNlY3Rpb24gYXMgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgY2F0ZWdvcnkuDQo8YnIgLz5Vc2luZyAiIXMiIHVzZXMgZXZlcnl0aGluZyBleGNlcHQgdGhlIGN1cnJlbnQgc2VjdGlvbi4NCjxiciAvPlVzaW5nICI/dCIgYXMgb25lIG9mIHRoZSBvcHRpb25zIHVzZXMgdGhlIGN1cnJlbnQgYXJ0aWNsZSdzIHVybD10aXRsZSBhcyB0aGUgbmFtZSBvZiBhbiBpbWFnZSBjYXRlZ29yeS4NCjxiciAvPlVzaW5nICIhdCIgdXNlcyBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgY3VycmVudCBhcnRpY2xlJ3MgdXJsPXRpdGxlLg0KPGJyIC8+VG8gbWFrZSBhIHBlci1hcnRpY2xlIGltYWdlIGdhbGxlcnksIHVzZSAiP2lkIiB0byB0YWtlIHRoZSBjdXJyZW50IGFydGljbGUgSUQ6IGl0IG1ha2VzIHVwIGEgY2F0ZWdvcnkgbmFtZSB1c2luZyB0aGUgPGNvZGU+Y2F0bGFiZWw8L2NvZGU+IG9wdGlvbiBhbmQgdGhlIElEIGZpZWxkLiBCeSBkZWZhdWx0IHRoaXMgd2lsbCBiZSAiYXJ0aWNsZS1JRCIuIFlvdSBtYXkgbmVnYXRlIHRoZSBhcnRpY2xlIElEIGJ5IHVzaW5nICIhaWQiLg0KPGJyIC8+WW91IGNhbiBhbHNvIHVzZSAiP2ZpZWxkbmFtZSIgd2hpY2ggd2lsbCBwaWNrIHVwIGNhdGVnb3JpZXMgZnJvbSB0aGUgZ2l2ZW4gZmllbGRuYW1lIG9mIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIGFydGljbGUuIERlc2lnbmVkIHByaW1hcmlseSBmb3IgdXNlIHdpdGggY3VzdG9tIGZpZWxkcyAoZS5nLiA/Y3VzdG9tMSksIGl0IGNvdWxkIGFsc28gYmUgYW55IG90aGVyIGZpZWxkIChvciBmaWVsZHMpIGZyb20geW91ciBhcnRpY2xlcyAoZS5nLiA/ZXhjZXJwdCBvciA/Y2F0ZWdvcnkxIG9yID9rZXl3b3JkcyBvciA/YXV0aG9yaWQsIGV0Yy4pIFRoZSBza3kncyB0aGUgbGltaXQgYmVjYXVzZSB0aG9zZSBmaWVsZHMgY291bGQgY29udGFpbiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3JpZXMuLi4gYmUgd2FybmVkOiBpZiB5b3UgdXNlID9ib2R5IG9yIHNvbWV0aGluZyBlcXVhbGx5IG91dHJhZ2VvdXMsIGNoYW5jZXMgYXJlIHRoZSBwbHVnaW4gd2lsbCBleHBsb2RlLg0KPGJyIC8+VG8gbmVnYXRlIHRoZSBjYXRlZ29yeSBzZWxlY3Rpb24sIHVzZSAiIWNhdGVnb3J5X29yX2ZpZWxkX25hbWUiLiBJZiB5b3UgbGlzdCBzcGVjaWZpYyBpbWFnZSBjYXRlZ29yaWVzIChlLmcuICFsYW5kc2NhcGUsICFiaXJkcykgdGhvc2UgY2F0ZWdvcmllcyB3aWxsIGJlIGV4Y2x1ZGVkLiBJZiB5b3Ugc3BlY2lmeSBhIGZpZWxkIG5hbWUgc3VjaCBhcyAha2V5d29yZHMgb3IgIWN1c3RvbTEsIHRoZSBjb250ZW50cyBvZiB0aGF0IGZpZWxkIHdpbGwgYmUgcmVhZCBhbmQgdGhlIGxpc3Qgb2YgaW1hZ2UgY2F0ZWdvcmllcyBmb3VuZCB0aGVyZSB3aWxsIGJlIGV4Y2x1ZGVkLiBOb3RlIHRoYXQgaWYgeW91IHNwZWNpZnkgYSBmaWVsZCBuYW1lIGFuZCB0aGF0IGZpZWxkIGluIHRoZSBhcnRpY2xlIGlzIGVtcHR5LCB0aGUgbmFtZSB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgaXQgd2FzIGFuIGltYWdlIGNhdGVnb3J5LiBBbHNvIG5vdGUgdGhhdCwgcmVnYXJkbGVzcyBvZiB0aGUgb3JkZXIgeW91IGxpc3QgdGhlbSwgYWxsICdwb3NpdGl2ZXMnIHdpbGwgYmUgcHJvY2Vzc2VkIGZpcnN0LCB0aGVuIGFueSBleGNsdXNpb25zIGFwcGxpZWQuPC9saT4NCjxsaT48Yj5zdWJjYXRzPSIxIjwvYj48YnIgLz50byBhdXRvbWF0aWNhbGx5IGluY2x1ZGUgYWxsIHN1Yi1jYXRlZ29yaWVzIG9mIHRoZSBjaG9zZW4gaW1hZ2UgY2F0ZWdvcmllczwvbGk+DQo8bGk+PGI+Y2F0bGFiZWw8L2I+PGJyIC8+dGhlIGxhYmVsIHVzZWQgaW4gZnJvbnQgb2YgdGhlIGNhdGVnb3J5IGlmIHRoZSAiP2lkIiBvciAiIWlkIiBvcHRpb24gaXMgdXNlZDsgZGVmYXVsdDogImFydGljbGUtIjwvbGk+DQo8bGk+PGI+aW1hZ2VpZDwvYj48YnIgLz5jb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBpbWFnZSBJRHMgdG8gc2hvdy4gVGhlc2UgYXJlIGFkZGVkIHRvIGFueSBpbWFnZXMgZnJvbSB0aGUgPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+IG9wdGlvbiBCRUZPUkUgYW55IGV4Y2x1c2lvbnMgYXJlIGFwcGxpZWQuDQo8YnIgLz5BcyB3aXRoIHRoZSA8Y29kZT5jYXRlZ29yeTwvY29kZT4gb3B0aW9uLCB5b3UgY2FuIGFsc28gdXNlICI/aWQiIGFuZCAiP2ZpZWxkbmFtZSIgd2hpY2ggd2lsbCBwaWNrIHVwIGltYWdlIElEcyBmcm9tIHRoZSBnaXZlbiBmaWVsZG5hbWUgb2YgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgYXJ0aWNsZS4gSW50ZXJlc3RpbmcgaWYgeW91IGNob29zZSA/YXJ0aWNsZV9pbWFnZSBiZWNhdXNlIHlvdSBjYW4gbWFrZSB5b3VyIGFydGljbGUgaW1hZ2Ugdmlld2FibGUgaW4gYSBsaWdodGJveCENCjxiciAvPlRoaXMgb3B0aW9uIGFsc28gc3VwcG9ydHMgaWQgYW5kIGZpZWxkIG5lZ2F0aW9uIHVzaW5nIHRoZSBzYW1lIHRlcm1pbm9sb2d5IGFzIHRoZSA8Y29kZT5jYXRlZ29yeTwvY29kZT4gb3B0aW9uLg0KPC9saT4NCjxsaT48Yj5saW1pdDwvYj48YnIgLz4wIChvciBvbWl0dGVkKT1lc3NlbnRpYWxseSB1bmxpbWl0ZWQ7IG9yIHRoZSBudW1iZXIgb2YgaW1hZ2UgdGh1bWJuYWlscyB0byBzaG93IHBlciBwYWdlPC9saT4NCjxsaT48Yj5tYXhsaW1pdDwvYj48YnIgLz4wIChvciBvbWl0dGVkKT1lc3NlbnRpYWxseSB1bmxpbWl0ZWQ7IG9yIHRoZSBhYnNvbHV0ZSBtYXhpbXVtIG51bWJlciBvZiBpbWFnZXMgdG8gcHVsbCBmcm9tIHRoZSBkYXRhYmFzZTwvbGk+DQo8bGk+PGI+b3JkZXJieTwvYj48YnIgLz5jb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB3YXlzIHRvIG9yZGVyIHRoZSByZXN1bHRzLiBDaG9vc2UgZnJvbTogY2F0ZWdvcnkgKHRoZSBkZWZhdWx0KSwgbmFtZSwgaWQsIGRhdGUsIGFsdCwgY2FwdGlvbiwgYXV0aG9yLCBleHQsIHdpZHRoLCBoZWlnaHQgb3IgcmFuZG9tLiBZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzb3J0IG9yZGVyIGJ5IGFkZGluZyA6YXNjIG9yIDpkZXNjIHRvIGFueSB2YWx1ZSAoZS5nIGNhdGVnb3J5LCBkYXRlOmRlc2Mgd291bGQgc29ydCBieSBjYXRlZ29yeSBmaXJzdCwgdGhlbiBkZXNjZW5kaW5nIGRhdGUpLiBBIHNwZWNpYWwsIG92ZXJyaWRpbmcsIG9wdGlvbiAnZml4ZWQnIGFsbG93cyB0aHVtYnMgdG8gYmUgb3V0cHV0IGluIHRoZSBvcmRlciBnaXZlbiBpbiB0aGUgaW1hZ2VpZCB0YWcuDQo8YnIgLz5Ob3RlIHRoYXQgcmFuZG9tIGFjdHMgc2xpZ2h0bHkgZGlmZmVyZW50bHkuIElmIGl0IGFwcGVhcnMgYXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QsIHJhbmRvbSBpbWFnZXMgd2lsbCBiZSBwdWxsZWQgZnJvbSB0aGUgZGF0YWJhc2UgYW5kIHRoZXkgd2lsbCB0aGVuIGJlIHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnMgbGlzdGVkIGFmdGVyIGl0LiBJZiBpdCBhcHBlYXJzIGFueXdoZXJlIGVsc2UgaW4gdGhlIGxpc3QsIGFueSBzb3J0IGl0ZW1zIGJlZm9yZSBpdCB3aWxsIGRldGVybWluZSB0aGUgb3JkZXIgb2YgZGF0YSBwdWxsZWQgZnJvbSB0aGUgZGF0YWJhc2UsIGFuZCB0aGUgcmVzdWx0cyB3aWxsIHRoZW4gYmUgb3JkZXJlZCByYW5kb21seSAoaW4gdGhhdCBjYXNlLCBhbnkgaXRlbXMgIGxpc3RlZCBhZnRlciAncmFuZG9tJyB3aWxsIGJlIGlnbm9yZWQuICdmaXhlZCcgaXMgc3RpbGwgaG9ub3VyZWQsIGhvd2V2ZXIpLiBTZWUgdGhlIGV4YW1wbGVzIGZvciBtb3JlIG9uIHRoaXMgZmVhdHVyZS48L2xpPg0KPGxpPjxiPmdyb3VwbmFtZTwvYj48YnIgLz50aGUgbmFtZSB0byBhcHBlbmQgdG8gdGhlIFtyZWxdIGFyZ3VtZW50IGluIG9yZGVyIHRvIGxvZ2ljYWxseSBncm91cCBpbWFnZXMuICI/YyIgdXNlcyB0aGUgaW1hZ2UgY2F0ZWdvcnksIG9yIHRyeSAiP2ZpZWxkbmFtZSIgdG8gcHVsbCB0aGUgZ3JvdXBuYW1lIGZyb20gdGhlIGdpdmVuIGZpZWxkIGluIHRoZSBjdXJyZW50IGFydGljbGUuIFNlZSB0aGUgPGEgaHJlZj0iI0V4YW1wbGVzIj5leGFtcGxlczwvYT4gYW5kIHRoZSBTbGltYm94IGRvY3VtZW50YXRpb24gZm9yIG1vcmUgb24gdGhpcyBmZWF0dXJlLiBEZWZhdWx0OiAic21kIjwvbGk+DQo8bGk+PGI+c2hvd2NhcHRpb248L2I+PGJyIC8+MT15ZXM7IDA9bm87IHRvIGRpc3BsYXkgdGhlIGltYWdlJ3MgY2FwdGlvbiB3aXRoIHRoZSBpbWFnZS4gT2ZmIGJ5IGRlZmF1bHQ8L2xpPg0KPGxpPjxiPnNob3dhbHQ8L2I+PGJyIC8+MT15ZXM7IDA9bm87IHRvIGRpc3BsYXkgdGhlIGltYWdlJ3MgYWx0IHRhZyB3aXRoIHRoZSBpbWFnZS4gT2ZmIGJ5IGRlZmF1bHQ8L2xpPg0KPGxpPjxiPnRleHRwb3M8L2I+PGJyIC8+cG9zaXRpb24gb2YgdGhlIGFsdC9jYXB0aW9uIGluZm9ybWF0aW9uLiBDaG9vc2UgZnJvbSBvbmUgb2Y6DQo8dWw+DQo8bGk+YWJvdmU6IGFib3ZlIHRoZSB0aHVtYm5haWwsIG5vdCBjbGlja2FibGU8L2xpPg0KPGxpPmJlbG93OiBiZWxvdyB0aGUgdGh1bWJuYWlsLCBub3QgY2xpY2thYmxlIChkZWZhdWx0KTwvbGk+DQo8bGk+YmVmb3JlOiBpbW1lZGlhdGVseSBhYm92ZSB0aGUgdGh1bWJuYWlsLCBjbGlja2FibGUgYXMgcGFydCBvZiB0aGUgbGluazwvbGk+DQo8bGk+YWZ0ZXI6IGltbWVkaWF0ZWx5IGJlbG93IHRoZSB0aHVtYm5haWwsIGNsaWNrYWJsZSBhcyBwYXJ0IG9mIHRoZSBsaW5rPC9saT4NCjwvdWw+DQo8L2xpPg0KPGxpPjxiPnNob3dwYWdlbGlua3M8L2I+PGJyIC8+MT15ZXM7IDA9bm87IHRvIGRpc3BsYXkgY2xpY2thYmxlIG5leHQvcHJldmlvdXMgbGlua3MuIE9uIGJ5IGRlZmF1bHQgKGlmIGxpbWl0IGlzIGdyZWF0ZXIgdGhhbiAwKTwvbGk+DQo8bGk+PGI+cHJldmxhYmVsPC9iPjxiciAvPkxhYmVsIGZvciB0aGUgJ3ByZXZpb3VzIHBhZ2UnIG9mIHBpY3R1cmVzIHdoZW4gdXNpbmcgc2hvd3BhZ2VsaW5rcy4gRGVmYXVsdDogIlByZXYiPC9saT4NCjxsaT48Yj5uZXh0bGFiZWw8L2I+PGJyIC8+TGFiZWwgZm9yIHRoZSAnbmV4dCBwYWdlJyBvZiBwaWN0dXJlcyB3aGVuIHVzaW5nIHNob3dwYWdlbGlua3MuIERlZmF1bHQ6ICJOZXh0IjwvbGk+DQo8bGk+PGI+d3JhcHRhZzwvYj48YnIgLz5UYWcgdG8gd3JhcCBlYWNoICdjZWxsJyB3aXRoLiBEbyBub3Qgc3BlY2lmeSB0aGUgJmx0OyBvciAmZ3Q7IGNoYXJhY3RlcnMuIEZvciBhIHZhbGlkIHBhZ2UsIHRoZSBvbmx5IHVzZWZ1bCBvcHRpb25zIGFyZSAiZGl2IiwgImxpIiBvciAicCIuIERlZmF1bHQ6IGVtcHR5IChpLmUuIG5vIHRhZyk8L2xpPg0KPGxpPjxiPmNlbGxjbGFzczwvYj48YnIgLz5DU1MgY2xhc3MgZm9yIGVhY2ggJ2NlbGwnIHRoYXQgZGlzcGxheXMgYSB0aHVtYm5haWwuIERlZmF1bHQ6IGVtcHR5IChpLmUuIG5vIGNsYXNzKTwvbGk+DQo8bGk+PGI+Y2FwdGlvbmNsYXNzPC9iPjxiciAvPkNTUyBjbGFzcyBmb3IgdGhlIGNhcHRpb24gdGV4dC4gRGVmYXVsdDogZW1wdHkgKGkuZS4gbm8gY2xhc3MpPC9saT4NCjxsaT48Yj5hbHRjbGFzczwvYj48YnIgLz5DU1MgY2xhc3MgZm9yIHRoZSBhbHQgdGV4dC4gRGVmYXVsdDogZW1wdHkgKGkuZS4gbm8gY2xhc3MpPC9saT4NCjxsaT48Yj5uYXZjbGFzczwvYj48YnIgLz5DU1MgY2xhc3MgZm9yIHRoZSBuZXh0L3ByZXYgY29udGFpbmVyLiBEZWZhdWx0OiBlbXB0eSAoaS5lLiBubyBjbGFzcyk8L2xpPg0KPGxpPjxiPnByZXZjbGFzczwvYj48YnIgLz5DU1MgY2xhc3MgZm9yIHRoZSAncHJldicgbGluay4gRGVmYXVsdDogc21kX3NsaW1ib3hfcHJldjwvbGk+DQo8bGk+PGI+bmV4dGNsYXNzPC9iPjxiciAvPkNTUyBjbGFzcyBmb3IgdGhlICduZXh0JyBsaW5rLiBEZWZhdWx0OiBzbWRfc2xpbWJveF9uZXh0PC9saT4NCjxsaT48Yj5saWJjaGVjazwvYj48YnIgLz5zZXQgdGhpcyB0byAwIHRvIGJ5cGFzcyB0aGUgbGlicmFyeSBjaGVjay4gVXNlZnVsIGlmIHlvdSB3YW50IHRoZSB0aHVtYnMgdG8gYmUgaW5jbHVkZWQgaW4gYW4gUlNTIGZlZWQgd2l0aG91dCB0aGUgcGx1Z2luIGNvbXBsYWluaW5nIHRoZSBsaWJyYXJpZXMgYXJlIG1pc3NpbmcuIERlZmF1bHQ6IDEgKG9uKTwvbGk+DQo8L3VsPg0KPC9wPg0KDQo8aDI+PGEgbmFtZT0iRXhhbXBsZXMiPjwvYT5FeGFtcGxlczwvaDI+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3NsaW1ib3ggY2F0ZWdvcnk9ImxhbmRzY2FwZSIgbGltaXQ9IjEwIiAvJmd0OzwvY29kZT4NCjxwPlNob3cgYWxsIGltYWdlcyBpbiB0aGUgbGFuZHNjYXBlIGNhdGVnb3J5LCB0ZW4gYXQgYSB0aW1lLjwvcD4NCg0KPGNvZGU+Jmx0O3R4cDpzbWRfc2xpbWJveCBjYXRlZ29yeT0iZG9ncywgYmlyZHMiIGxpbWl0PSI5IiBzaG93Y2FwdGlvbnM9IjEiIHRleHRwb3M9ImFmdGVyIiB3cmFwdGFnPSJsaSIgY2VsbGNsYXNzPSJjZWxsIiAvJmd0OzwvY29kZT4NCjxwPlNob3cgYWxsIGltYWdlcyBpbiB0aGUgZG9ncyBhbmQgYmlyZHMgY2F0ZWdvcmllcywgOSBwZXIgcGFnZS4gQWRkIHRoZSBjYXB0aW9ucyB1bmRlciB0aGUgdGh1bWJuYWlscyBhbmQgbWFrZSB0aGVtIGNsaWNrYWJsZSB0b28uIFdyYXAgZWFjaCBpbWFnZSBpbiBhIDxjb2RlPmxpPC9jb2RlPiB0YWcgYW5kIGdpdmUgZWFjaCBhIGNsYXNzIG9mICdjZWxsJyAoaW1wbGllcyB5b3UgbXVzdCBtYW51YWxseSBhZGQgYSBjb3JyZXNwb25kaW5nIDxjb2RlPiZsdDt1bCZndDs8L2NvZGU+IHRhZyBhcm91bmQgdGhlIHBsdWdpbiBpbiBvcmRlciB0byBtYWludGFpbiBwYWdlIHZhbGlkaXR5KS48L3A+DQoNCjxwPklmIHlvdSBhZGRlZCBvcmRlcmJ5PSJkYXRlOmRlc2MsIHJhbmRvbSIgdG8gdGhlIGFib3ZlIHRhZywgeW91IHdvdWxkIGdldCB0aGUgbW9zdCByZWNlbnQgOSBpbWFnZXMgb24gdGhlIGZpcnN0IHBhZ2UsIGJ1dCBzaG93biBpbiBhIHJhbmRvbSBvcmRlci4gVGhlIG5leHQgcGFnZSB3b3VsZCBzaG93IHRoZSBuZXh0IG1vc3QtcmVjZW50IDkgaW1hZ2VzLCBhZ2FpbiBzb3J0ZWQgcmFuZG9tbHkgd2l0aGluIHRoZW1zZWx2ZXMuPC9wPg0KDQo8cD5Td2l0Y2hpbmcgdGhlIHNvcnQgdG86IG9yZGVyYnk9InJhbmRvbSwgZGF0ZTpkZXNjIiB3b3VsZCBjaGFuZ2UgdGhlIG91dHB1dC4gWW91IHdvdWxkIHRoZW4gZ2V0IDkgcmFuZG9tIGltYWdlcyBvbiB0aGUgZmlyc3QgcGFnZSwgd2l0aCB0aGUgbW9zdCByZWNlbnQgb25lcyBvZiB0aGUgZ3JvdXAgc2hvd24gZmlyc3QuIENsaWNraW5nICdOZXh0JyB3b3VsZCBzaG93IGFub3RoZXIgOSByYW5kb20gaW1hZ2VzIChzb21lIG1heSBiZSB0aGUgc2FtZSBhcyBwYWdlIDEpIHNvcnRlZCBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIGRhdGUuIEZvciB0aGlzIHJlYXNvbiAodW5sZXNzIHlvdSdyZSBzaW1wbHkgdXNpbmcgdGhlIHBsdWdpbiB0byBwcmV0dHkgdXAgYSBwYWdlIHdpdGggcmFuZG9tIGltYWdlcykgaWYgeW91J3JlIHVzaW5nIHJhbmRvbSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gb3JkZXJieSwgeW91IHByb2JhYmx5IHdhbnQgdG8gZGlzYWJsZSBwYWdpbmcgYnkgc2V0dGluZyBzaG93cGFnZWxpbmtzPSIwIi48L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3NsaW1ib3ggaW1hZ2VpZD0iNDgsIDI1LCA0IiBjYXRlZ29yeT0iZG9ncywgP2N1c3RvbTEiIHN1YmNhdHM9IjEiIGxpbWl0PSIyMCIgcHJldmxhYmVsPSJCYWNrIiBvcmRlcmJ5PSJuYW1lOmRlc2MsIGNhdGVnb3J5IiAvJmd0OzwvY29kZT4NCjxwPlNob3cgaW1hZ2VzIHdpdGggSURzIDQ4LCAyNSBhbmQgNCBhcyB3ZWxsIGFzIGFsbCBpbWFnZXMgaW4gdGhlIGRvZ3MgY2F0ZWdvcnkgYW5kIGFsc28gcHVsbCB0aGUgaW1hZ2UgY2F0ZWdvcnkgbmFtZXMgZnJvbSB0aGUgY3VycmVudCBhcnRpY2xlJ3MgY3VzdG9tMSBmaWVsZCAoaWYgY3VzdG9tMSBoZWxkICJiaXJkcywgbGFuZHNjYXBlcyIgKHdpdGhvdXQgdGhlIHF1b3RlcykgeW91J2QgZ2V0IHBpY3R1cmVzIGZyb20gYWxsIHRocmVlIGNhdGVnb3JpZXMgYW5kIGFsbCB0aGVpciBzdWJjYXRlZ29yaWVzKS4gTGltaXQgdGhlIG51bWJlciBwZXIgcGFnZSB0byAyMCwgY2hhbmdlIHRoZSBwcmV2aW91cyBwYWdlIGxhYmVsIHRvICJCYWNrIiBhbmQgc29ydCB0aGUgaW1hZ2VzIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgbmFtZSwgdGhlbiBjYXRlZ29yeS48L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3NsaW1ib3ggY2F0ZWdvcnk9InN0YXRpYywgP2lkIiBpbWFnZWlkPSIhYXJ0aWNsZV9pbWFnZSIgbGltaXQ9IjYiIGdyb3VwbmFtZT0iP2MiIHNob3dwYWdlbGlua3M9IjAiIC8mZ3Q7PC9jb2RlPg0KPHA+SWYgdGhlIHBlcnNvbiBpcyBjdXJyZW50bHkgdmlld2luZyBhcnRpY2xlIElEIDY3LCBzaG93IGFsbCBpbWFnZXMgZnJvbSB0aGUgJ3N0YXRpYycgY2F0ZWdvcnkgYW5kIHRoZSAnYXJ0aWNsZS02NycgY2F0ZWdvcnkuIElmIGFueSBpbWFnZSBpbiBlaXRoZXIgb2YgdGhvc2UgY2F0ZWdvcmllcyBpcyBmb3VuZCB0byBoYXZlIGFuIElEIG9mIHRoZSBhcnRpY2xlIGltYWdlIGZyb20gdGhlIGN1cnJlbnQgYXJ0aWNsZSwgdGhhdCBwaWN0dXJlIHdpbGwgYmUgaWdub3JlZC4gT25seSBzaG93IDYgcGljdHVyZXMgYW5kIGRvbid0IHNob3cgdGhlIG5leHQvcHJldiBsaW5rcyBvbiB0aGUgcGFnZS4gQWxzbywgZ3JvdXAgdGhlIFNsaW1ib3ggcGljdHVyZXMgYnkgaW1hZ2UgY2F0ZWdvcnkuIFRoaXMgbWVhbnMgdGhhdCBpZiBzb21lb25lIGNsaWNrcyBvbiBhIHBpY3R1cmUgZnJvbSB0aGUgInN0YXRpYyIgY2F0ZWdvcnksIHRoZSBTbGltYm94IG5leHQvcHJldiBsaW5rcyBvbmx5IG5hdmlnYXRlIGJldHdlZW4gdGhvc2UgcGljdHVyZXMuIFRoZSB1c2VyIHdpbGwgaGF2ZSB0byBjbG9zZSB0aGUgbGlnaHRib3ggYW5kIGNsaWNrIGEgcGljdHVyZSBpbiB0aGUgYXJ0aWNsZS02NyBjYXRlZ29yeSB0byBzaG93IHBpY3R1cmVzIGZyb20gdGhlIG90aGVyIGdyb3VwLjwvcD4NCjxwPk9uIHRoZSBzdXJmYWNlIHRoZSBncm91cG5hbWUgb3B0aW9uIG1heSBzZWVtIGEgbGl0dGxlIHN1cGVyZmx1b3VzIGJ1dCBpdCBjYW4gYmUgdXNlZnVsIHRvIGFsbG93IHBlb3BsZSB0byBvbmx5IGZsaWNrIHRocm91Z2ggYSBzdWJzZXQgb2YgdGhlIHBpY3R1cmVzIG9uIGVhY2ggcGFnZSwgYmFzZWQgb24gdGhlaXIgY2F0ZWdvcnkgKG9yIGEgZml4ZWQgdmFsdWUgcmVhZCBmcm9tIGEgZmllbGQgaW4gdGhlIGN1cnJlbnQgYXJ0aWNsZSwgZS5nLiBncm91cG5hbWU9Ij9jdXN0b20yIikuIEl0IGNvbWVzIGludG8gaXRzIG93biB3aGVuIHlvdSB1c2UgQ1NTMiB0byBzdHlsZSBncm91cHMgb2YgaW1hZ2VzIGJhc2VkIG9uIHRoZWlyIFtyZWxdIGF0dHJpYnV0ZSBiZWNhdXNlIHlvdSBjYW4gc3ViLWRpdmlkZSB5b3VyIHBpY3R1cmVzIGZ1cnRoZXIgdGhhbiB5b3Ugd291bGQgbm9ybWFsbHkgYmUgYWJsZS48L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3NsaW1ib3ggY2F0ZWdvcnk9Ij9jLCA/Y3VzdG9tMSwgIWN1c3RvbTIsICFzdGF0aWMiIGxpbWl0PSI4IiBtYXhsaW1pdD0iMzIiIC8mZ3Q7PC9jb2RlPg0KPHA+QSBiaXQgb2YgYSBjb250cml2ZWQgZXhhbXBsZSB0aGF0IHNob3dzIGhvdyBjcmF6eSB5b3UgY2FuIGdldDogVGhpcyB3aWxsIHNob3cgYSBtYXhpbXVtIG9mIDMyIGltYWdlcyBmcm9tIGFuIGltYWdlIGNhdGVnb3J5IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgY3VycmVudCBnbG9iYWwgY2F0ZWdvcnksIHBsdXMgYWxsIGltYWdlcyBmcm9tIGNhdGVnb3JpZXMgbGlzdGVkIGluIHRoZSBjdXN0b20xIGZpZWxkIG9mIHRoZSBjdXJyZW50IGFydGljbGUgYnV0IDxlbT5leGNsdWRlPC9lbT4gaW1hZ2VzIGZyb20gY2F0ZWdvcmllcyBsaXN0ZWQgaW4gY3VzdG9tMiBhbmQgYWxzbyBleGNsdWRlIHRoZSAnc3RhdGljJyBjYXRlZ29yeS4gU2hvdyA4IGltYWdlIHRodW1ibmFpbHMgYXQgYSB0aW1lLjwvcD4NCg0KPGgyPjxhIG5hbWU9IlN0eWxpbmciPjwvYT5TdHlsaW5nIHdpdGggQ1NTPC9oMj4NCg0KPHA+VGhlcmUgYXJlIChkZWxpYmVyYXRlbHkpIHZlcnkgZmV3IGxheW91dCBhdHRyaWJ1dGVzIGZvciB0aGUgcGx1Z2luIGJlY2F1c2UgcHJldHR5IG11Y2ggZXZlcnl0aGluZyBjYW4gYmUgYWNjZXNzZWQgZnJvbSBDU1MgdG8gbGF5IHlvdXIgaW1hZ2VzIG91dCBob3dldmVyIHlvdSBsaWtlIHRoZW0uIFdhbnQgdG8gY2hhbmdlIHRoZSBudW1iZXIgb2YgaW1hZ2VzIHBlciByb3c/IENoYW5nZSB0aGUgd2lkdGggb2YgdGhlIGNvbnRhaW5pbmcgJmx0O2RpdiZndDsgYW5kIHNldCB0aGUgd2lkdGggb2YgZWFjaCB0aHVtYm5haWwgc3BhY2UgdG8gYSBwYXJ0aWN1bGFyIHNpemUuPC9wPg0KDQo8cD5UaGUgZm9sbG93aW5nIGxvZ2ljYWwgc3RydWN0dXJlIGFwcGxpZXM6PC9wPg0KDQo8dWw+DQo8bGk+QW4gb3B0aW9uYWwgd3JhcHRhZyBhbmQgY2xhc3MgbmFtZSBhcm91bmQgZWFjaCAiY2VsbCIgKGkuZS4gdGh1bWJuYWlsKTwvbGk+DQo8bGk+QSBsaW5rIGVsZW1lbnQgY29udGFpbmluZyB0aGUgdGh1bWJuYWlsJ3MgPGNvZGU+Jmx0O2ltZyZndDs8L2NvZGU+IHRhZzwvbGk+DQo8bGk+VGhlIGNhcHRpb24vYWx0IGlzIGEgJmx0O3NwYW4mZ3Q7IHdpdGggYW4gb3B0aW9uYWwgY2xhc3MgYW5kIGNhbiBhcHBlYXIgYWJvdmUsIGJlbG93IG9yIHdpdGhpbiB0aGUgbGluayBlbGVtZW50PC9saT4NCjxsaT5UaGUgbmV4dC9wcmV2IGxpbmtzIGFyZSB3cmFwcGVkIGluIHRoZSBvcHRpb25hbCB3cmFwdGFnIGNvbnRhaW5lciBhbmQgY2FuIGJlIGdpdmVuIGFuIG9wdGlvbmFsIGNsYXNzIG5hbWU8L2xpPg0KPGxpPlRoZSBuZXh0IGxpbmsgaGFzIGEgKGRlZmF1bHQpIGNsYXNzIG9mICJzbWRfc2xpbWJveF9uZXh0IiBhbmQgcHJldiBoYXMgInNtZF9zbGltYm94X3ByZXYiLiBUaGVzZSBjYW4gYmUgY2hhbmdlZCBvciByZW1vdmVkIGlmIHlvdSB3aXNoLjwvbGk+DQo8L3VsPg0KDQo8cD5Vc2luZyBDU1Mgc2VsZWN0b3JzIHlvdSBjYW4gYWNjZXNzIGV2ZXJ5IHBhcnQgb2YgdGhlIHN0cnVjdHVyZS4gQW4gZXhhbXBsZSBDU1MgbGF5b3V0IGlzIGdpdmVuIGhlcmUgdG8gZ2V0IHlvdSBzdGFydGVkIChhc3N1bWVzIGEgd3JhcHRhZyBvZiAnbGknLCBhIGNvbnRhaW5pbmcgJ3VsJyBhcm91bmQgdGhlIHBsdWdpbiB0YWcgd2l0aCBhIGNsYXNzIG9mIDxjb2RlPnNtZF9zbGltYm94PC9jb2RlPiBhbmQgPGNvZGU+bmF2Y2xhc3M9InNtZF9zbGltYm94X25hdiI8L2NvZGU+KS4gUGFzdGUgaXQgaW50byB5b3VyIENTUyB0ZW1wbGF0ZSBhbmQgeW91J3JlIGdvb2QgdG8gZ28uPC9wPg0KDQo8cHJlPg0KLnNtZF9zbGltYm94IHsNCglmbG9hdDpsZWZ0Ow0KCXdpZHRoOjYwMHB4Ow0KCW1hcmdpbjoxZW0gMDsNCgljbGVhcjpib3RoOw0KCWxpc3Qtc3R5bGU6bm9uZTsNCn0NCi5zbWRfc2xpbWJveCBsaSB7DQoJd2lkdGg6MTUwcHg7DQoJaGVpZ2h0OjE1MHB4Ow0KCWZsb2F0OmxlZnQ7DQoJbWFyZ2luOjFlbSBhdXRvOw0KCXRleHQtYWxpZ246Y2VudGVyOw0KfQ0KLnNtZF9zbGltYm94IGltZyB7DQoJbWFyZ2luOjAgYXV0bzsNCn0NCi5zbWRfc2xpbWJveCBzcGFuIHsNCglmbG9hdDpsZWZ0Ow0KCXdpZHRoOjE0MHB4Ow0KCXBhZGRpbmc6MnB4IDAgMCA1cHg7DQp9DQpsaS5zbWRfc2xpbWJveF9uYXYgew0KCWNsZWFyOmJvdGg7DQoJd2lkdGg6NTAwcHg7DQoJcGFkZGluZzoyMHB4Ow0KfQ0KLnNtZF9zbGltYm94X3ByZXYgew0KCWZsb2F0OmxlZnQ7DQp9DQouc21kX3NsaW1ib3hfbmV4dCB7DQoJZmxvYXQ6cmlnaHQ7DQp9DQo8L3ByZT4iO3M6NDoiY29kZSI7czoxNjIxNzoiLy8gdjAuMSAgIEluaXRpYWwgcHVibGljIHJlbGVhc2UNCi8vIHYwLjExIEFkZGVkICFjYXRlZ29yeSBzdXBwb3J0DQovLyB2MC4xMiBBZGRlZCB0ZXh0cG9zIG9wdGlvbiAodGhhbmtzIGxlZSkgYW5kIGltYWdlaWQgb3B0aW9uICh0aGFua3Mgd291YXJlbikNCi8vIHYwLjIgICBqcyBhbmQgY3NzIGNhbiBub3cgYmUgbG9hZGVkIGVsc2V3aGVyZSAodGhhbmtzIGpzdHViYnMpLiBBZGRlZCB3cmFwdGFnIGFuZCBjaGFuZ2VkIGRlZmF1bHRzIHRvIG1ha2Ugb3V0cHV0IGxlc3MgbGlrZSB0YWctc291cCAodGhhbmtzIHdvdWFyZW4pDQovLyB2MC4yMSBBZGRlZCBvcmRlcmJ5PSJmaXhlZCIgdG8gYWxsb3dlZCBmaXhlZCBpbWFnZWlkIG9yZGVyaW5nICh0aGFua3MgbGVlKS4gJHdoZXJlIHdhcm5pbmcgc3F1YXNoZWQgKHRoYW5rcyBiZW5qaWJvdCkNCi8vIHYwLjIyIE5vdyB1c2VzIHNtZF9saWIgYW5kIHN1YmNhdHMuIEFsc28gTUxQKE11bHRpLWxpbmd1YWwpLWF3YXJlLg0KLy8gdjAuMjMgRml4ZWQgb3JkZXJieSB3aGVuIHVzaW5nIHJhbmRvbSAodGhhbmtzIG1yZGFsZSkgYW5kIGFkZGVkIGFiaWxpdHkgdG8gb3ZlcnJpZGUgbWF4bGltaXQNCi8vIHYwLjI0IEFkZGVkIGxpYmNoZWNrICh0aGFua3MgcGFwdWFzcykuIE51bWVyaWMgcmFuZ2VzIG5vdyBhbGxvd2VkIGZvciBJRHMgKHNtZF9saWIpLiBGaXhlZCBlbXB0eSBmaWVsZC9pbWFnZWlkIG5lZ2F0aW9uIGJ1Z3MuIEZpeGVkIG5leHQvcHJldiBidXR0b25zIGZvciBNTFAuDQovLyB2MC4yNGEgVXNlcyB0aGUgZ2VuZXJpYyBNTFAgdmVzaW9uIG9mIHNtZF9saWIuIEFkZGVkIFVSTCByZXdyaXRpbmcga2x1ZGdlIHVudGlsIE1MUCBzdWJkaXIgcmV3cml0aW5nIGlzIGZpeGVkLg0KDQpyZXF1aXJlX3BsdWdpbignc21kX2xpYicpOw0KZ2xvYmFsICRzbWRfc2JveExhbmc7DQpnbG9iYWwgJHNtZF9zYm94X2xpYnM7DQoNCiRzbWRfc2JveF9zdHIgPSBhcnJheSgNCgknaW5jZXJyJyA9PiAnSWYgdXNpbmcgdGhlIHNjcmlwdHMgb3B0aW9uLCBzcGVjaWZ5IHVwIHRvIHRocmVlIHJlcXVpcmVkIHNjcmlwdHMgaW4gdGhpcyBvcmRlcjogJmx0O3R4cDpzbWRfc2xpbWJveF9pbmMgc2NyaXB0cz0ibW9vdG9vbHNKU0xvY2F0aW9uLCBzbGltYm94SlNMb2NhdGlvbiwgc2xpbWJveENTU0xvY2F0aW9uIiAvJmd0Oy4gSWYgYW55IHBvc2l0aW9ucyBhcmUgbGVmdCBlbXB0eSwgdGhlIG1pc3Npbmcgc2NyaXB0cyBtdXN0IGJlIHN1cHBsaWVkIHZpYSB0aGUganNkaXIvY3NzZGlyIG9wdGlvbnMsIG9yIGxvYWRlZCBleHRlcm5hbGx5IGFuZCB0b2xkIHRvIHNraXAgdGhpcyBzdGVwLiBUaGUgdGhyZWUgdmFsdWVzIGNhbiBlaXRoZXIgYmUgYSBmdWxsIFhIVE1MIHN0cmluZyAoZS5nLiBhcyByZXR1cm5lZCBieSB0eHA6c3RtX2phdmFzY3JpcHQgb3IgdHhwOmNzcywgYWx0aG91Z2ggdGhleSBtYXkgbm90IHdvcmsgZGlyZWN0bHkgd2l0aGluIHRoZSB0YWc7IHNlZSB0aGUgZG9jcykgb3Igc2ltcGx5IHBhdGhzIHRvIHRoZSBmaWxlcy4gTm90ZSB0aGF0IG5vIHZhbGlkYXRpb24gaXMgcGVyZm9ybWVkIHRvIGNoZWNrIGlmIHRoZSBmaWxlcyBleGlzdC4nLA0KCSdub2luYycgPT4gJ1JlcXVpcmVkIGxpYnJhcmllcyBub3QgbG9hZGVkLiBDYWxsICZsdDt0eHA6c21kX3NsaW1ib3hfaW5jIC8mZ3Q7IGluIHRoZSAmbHQ7aGVhZCZndDsgb2YgdGhpcyBwYWdlLicsDQoJJ25leHRfbGJsJyA9PiAnTmV4dCcsDQoJJ3ByZXZfbGJsJyA9PiAnUHJldicsDQopOw0KDQokc21kX3Nib3hMYW5nID0gbmV3IHNtZF9NTFAoJ3NtZF9zbGltYm94JywgJ3NtZF9zYm94JywgJHNtZF9zYm94X3N0cik7DQoNCi8vIFVzZSB0aGlzIHRvIGluY2x1ZGUgdGhlIGxpYnJhcmllcyBpbiB0aGUgPGhlYWQ+IHNlY3Rpb24gb2YgdGhlIHBhZ2UNCmZ1bmN0aW9uIHNtZF9zbGltYm94X2luYygkYXR0cykgew0KCWdsb2JhbCAkc21kX3Nib3hfbGliczsNCglnbG9iYWwgJHNtZF9zYm94TGFuZzsNCg0KCWlmIChpc19hcnJheSgkYXR0cykpIGV4dHJhY3QoJGF0dHMpOw0KDQoJLy8gRnVuY3Rpb24gb3B0aW9ucw0KCSRqc2RpciA9IGlzc2V0KCRqc2RpcikgPyBkb1NsYXNoKCRqc2RpcikgOiAnJzsNCgkkY3NzZGlyID0gaXNzZXQoJGNzc2RpcikgPyBkb1NsYXNoKCRjc3NkaXIpIDogJyc7DQoJJHNjcmlwdHMgPSBpc3NldCgkc2NyaXB0cykgPyAkc2NyaXB0cyA6ICcnOw0KCSRza2lwID0gaXNzZXQoJHNraXApID8gJHNraXAgOiAiMCI7DQoNCgkkbW9kc1JlcXVpcmVkID0gMzsNCgkkbW9kc0xvYWRlZCA9IDA7DQoJJG91dFN0ciA9ICcnOw0KDQoJaWYgKCRza2lwID4gMCkgew0KCQkkbW9kc0xvYWRlZCA9ICRza2lwOw0KCX0NCg0KCS8vIEluY2x1ZGUgdGhlIGpzIGxpYnMgaWYgcmVxdWlyZWQNCglpZiAoJGpzZGlyICE9ICcnKSB7DQoJCSRvdXRTdHIgLj0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicgLiRqc2Rpci4gJy9tb290b29scy5qcyI+PC9zY3JpcHQ+Jy5uOw0KCQkkb3V0U3RyIC49ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInIC4kanNkaXIuICcvc2xpbWJveC5qcyI+PC9zY3JpcHQ+Jy5uOw0KCQkkbW9kc0xvYWRlZCArPSAyOw0KCX0NCg0KCS8vIEZpbmQgd2hpY2ggc2NyaXB0cyB0byBhdXRvLWxvYWQNCglpZiAoKCRzY3JpcHRzICE9ICcnKSAmJiAoJG1vZHNMb2FkZWQgPCAkbW9kc1JlcXVpcmVkKSkgew0KCQkkbW9kc0xpc3QgPSBwcmVnX3NwbGl0KCcvWyxdKy8nLCRzY3JpcHRzLCRtb2RzUmVxdWlyZWQpOw0KCQkkanNwcmVmaXggPSAiPHNjcmlwdCI7DQoJCSRjc3NwcmVmaXggPSAiPGxpbmsiOw0KCQkkdHhwcHJlZml4ID0gIjx0eHAiOw0KCQlmb3JlYWNoICgkbW9kc0xpc3QgYXMgJGZpbGVvYmopIHsNCgkJCSRmaWxlb2JqID0gdHJpbSgkZmlsZW9iaik7DQoJCQlpZiAoJGZpbGVvYmogPT0gJycpIHsNCgkJCQkkbW9kc0xvYWRlZC0tOw0KCQkJfSBlbHNlIGlmIChzdWJzdHIoJGZpbGVvYmosIDAsIHN0cmxlbigkanNwcmVmaXgpKSA9PT0gJGpzcHJlZml4KSB7DQoJCQkJJG91dFN0ciAuPSAkZmlsZW9iai5uOw0KCQkJfSBlbHNlIGlmIChzdWJzdHIoJGZpbGVvYmosIDAsIHN0cmxlbigkY3NzcHJlZml4KSkgPT09ICRjc3NwcmVmaXgpIHsNCgkJCQkkb3V0U3RyIC49ICRmaWxlb2JqLm47DQoJCQl9IGVsc2UgaWYgKHN1YnN0cigkZmlsZW9iaiwgMCwgc3RybGVuKCR0eHBwcmVmaXgpKSA9PT0gJHR4cHByZWZpeCkgew0KCQkJCSRvdXRTdHIgLj0gcGFyc2UoJGZpbGVvYmopOw0KCQkJfSBlbHNlIHsNCgkJCQlpZiAoJG1vZHNMb2FkZWQgPCAyKSB7DQoJCQkJCSRvdXRTdHIgLj0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicgLiRmaWxlb2JqLiAnIj48L3NjcmlwdD4nLm47DQoJCQkJfSBlbHNlIHsNCgkJCQkJJG91dFN0ciAuPSAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSInIC4kZmlsZW9iai4gJyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iIC8+Jy5uOw0KCQkJCX0NCgkJCX0NCgkJCSRtb2RzTG9hZGVkKys7DQoJCX0NCgl9DQoNCgkvLyBJbmNsdWRlIHRoZSBjc3MgZmlsZSBpZiByZXF1aXJlZA0KCWlmICgkY3NzZGlyICE9ICcnKSB7DQoJCSRvdXRTdHIgLj0gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iJyAuJGNzc2Rpci4gJy9zbGltYm94LmNzcyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iIC8+Jy5uOw0KCQkkbW9kc0xvYWRlZCsrOw0KCX0NCg0KCS8vIFNldCB0aGUgZmxhZyB0byBzYXkgdGhlIGxpYnMgYXJlIG9rLiBTaGFtZSB0aGVyZSdzIG5vIGVhc3kgcHJvdmlzaW9uIGZvcg0KCS8vIGNoZWNraW5nIHRoZSBmaWxlcyBhY3R1YWxseSBleGlzdCBhdCB0aGUgZ2l2ZW4gbG9jYXRpb25zLCBidXQgaGV5DQoJaWYgKCRtb2RzTG9hZGVkID09ICRtb2RzUmVxdWlyZWQpIHsNCgkJJHNtZF9zYm94X2xpYnMgPSB0cnVlOw0KCX0gZWxzZSB7DQoJCSRzbWRfc2JveF9saWJzID0gZmFsc2U7DQoJCSRvdXRTdHIgPSAkc21kX3Nib3hMYW5nLT5nVHh0KCdpbmNlcnInKS5uOw0KCX0NCg0KCXJldHVybiAkb3V0U3RyOw0KfQ0KDQpmdW5jdGlvbiBzbWRfc2xpbWJveCgkYXR0cykgew0KCWdsb2JhbCAkcHJldGV4dCwgJHRoaXNhcnRpY2xlLCAkaW1nX2RpcjsNCglnbG9iYWwgJHNtZF9zYm94X2xpYnMsICRzbWRfc2JveExhbmc7DQoNCglpZiAoaXNfYXJyYXkoJGF0dHMpKSBleHRyYWN0KCRhdHRzKTsNCgkkY2F0aWRvcHRzID0gKGlzc2V0KCRjYXRlZ29yeSkgfHwgaXNzZXQoJGltYWdlaWQpKSA/IHRydWUgOiBmYWxzZTsNCg0KCS8vIFBsdWdpbiBvcHRpb25zDQoJJGxpYmNoZWNrID0gaXNzZXQoJGxpYmNoZWNrKSA/ICRsaWJjaGVjazogIjEiOw0KCSRpbWFnZWlkID0gaXNzZXQoJGltYWdlaWQpID8gZG9TbGFzaCgkaW1hZ2VpZCkgOiAnJzsNCgkkY2F0ZWdvcnkgPSBpc3NldCgkY2F0ZWdvcnkpID8gZG9TbGFzaCgkY2F0ZWdvcnkpIDogKCgkaW1hZ2VpZD09IiIpID8gJHByZXRleHRbJ2MnXTogJycpOw0KCSRzdWJjYXRzID0gaXNzZXQoJHN1YmNhdHMpID8gdHJ1ZSA6IGZhbHNlOw0KCSRjYXRsYWJlbCA9IGlzc2V0KCRjYXRsYWJlbCkgPyAkY2F0bGFiZWw6ICJhcnRpY2xlLSI7DQoJJGdyb3VwbmFtZSA9IGlzc2V0KCRncm91cG5hbWUpID8gJGdyb3VwbmFtZTogInNtZCI7DQoJJG1heGxpbWl0ID0gaXNzZXQoJG1heGxpbWl0KSA/ICRtYXhsaW1pdDogIjk5OTk5IjsNCgkkbGltaXQgPSBpc3NldCgkbGltaXQpID8gJGxpbWl0OiAiMCI7DQoJJG9yZGVyYnkgPSBpc3NldCgkb3JkZXJieSkgPyAkb3JkZXJieTogImNhdGVnb3J5IjsNCgkkc2hvd3BhZ2VsaW5rcyA9IGlzc2V0KCRzaG93cGFnZWxpbmtzKSA/ICRzaG93cGFnZWxpbmtzOiAiMSI7DQoJJHByZXZsYWJlbD0gaXNzZXQoJHByZXZsYWJlbCkgPyAkcHJldmxhYmVsOiAkc21kX3Nib3hMYW5nLT5nVHh0KCdwcmV2X2xibCcpOw0KCSRuZXh0bGFiZWw9IGlzc2V0KCRuZXh0bGFiZWwpID8gJG5leHRsYWJlbDogJHNtZF9zYm94TGFuZy0+Z1R4dCgnbmV4dF9sYmwnKTsNCgkkc2hvd2NhcHRpb24gPSBpc3NldCgkc2hvd2NhcHRpb24pID8gJHNob3djYXB0aW9uOiAiMCI7DQoJJHNob3dhbHQgPSBpc3NldCgkc2hvd2FsdCkgPyAkc2hvd2FsdDogIjAiOw0KCSR0ZXh0cG9zID0gaXNzZXQoJHRleHRwb3MpID8gJHRleHRwb3M6ICJiZWxvdyI7DQoJJHdyYXB0YWcgPSBpc3NldCgkd3JhcHRhZykgPyAkd3JhcHRhZzogIiI7DQoJJGNlbGxjbGFzcyA9IGlzc2V0KCRjZWxsY2xhc3MpID8gJGNlbGxjbGFzczogIiI7DQoJJGltZ2NsYXNzID0gaXNzZXQoJGltZ2NsYXNzKSA/ICRpbWdjbGFzczogIiI7DQoJJG5hdmNsYXNzID0gaXNzZXQoJG5hdmNsYXNzKSA/ICRuYXZjbGFzczogIiI7DQoJJHByZXZjbGFzcyA9IGlzc2V0KCRwcmV2Y2xhc3MpID8gJHByZXZjbGFzczogInNtZF9zbGltYm94X3ByZXYiOw0KCSRuZXh0Y2xhc3MgPSBpc3NldCgkbmV4dGNsYXNzKSA/ICRuZXh0Y2xhc3M6ICJzbWRfc2xpbWJveF9uZXh0IjsNCgkkY2FwdGlvbmNsYXNzID0gaXNzZXQoJGNhcHRpb25jbGFzcykgPyAkY2FwdGlvbmNsYXNzOiAiIjsNCgkkYWx0Y2xhc3MgPSBpc3NldCgkYWx0Y2xhc3MpID8gJGFsdGNsYXNzOiAiIjsNCg0KCSRmaXhlZE9yZGVyID0gZmFsc2U7DQoNCgkvLyBNYWluIGNvZGUgYm9keQ0KCWlmICgoJGxpYmNoZWNrID09IDEpICYmICgkc21kX3Nib3hfbGlicyA9PSBmYWxzZSkpIHsNCgkJJG91dFN0ciA9ICRzbWRfc2JveExhbmctPmdUeHQoJ25vaW5jJyk7DQoJfSBlbHNlIHsNCgkJLy8gVGhlIGRhdGFiYXNlIGZpZWxkcyByZXF1aXJlZA0KCQkkZmllbGRzID0gJ2lkLG5hbWUsY2FwdGlvbixhbHQsY2F0ZWdvcnksZGF0ZSxhdXRob3IsZXh0LHcsaCc7DQoNCgkJLy9OT1RFOiBLbHVkZ2UgZm9yIE1MUCBVUkwgcmV3cml0aW5nIG9mIHRwZyBwYWdlcy4gUmVtb3ZlIHdoZW4gZml4ZWQNCgkJaWYgKGZ1bmN0aW9uX2V4aXN0cygnbDEwbl9nZXRfbGFuZycpKSB7DQoJCQkkdGhpc0xhbmcgPSBsMTBuX2dldF9sYW5nKGFycmF5KCkpIC4gJy8nOw0KCQl9IGVsc2Ugew0KCQkJJHRoaXNMYW5nID0gJyc7DQoJCX0NCg0KCQkvLyBDb252ZXJ0IHRoZSBjYXRlZ29yeSAocG9zc2libHkgYSBjb21tYS1zZXAgbGlzdCkgaW50byBhbiBTUUwtc3R5bGUgJ2luJyBsaXN0Lg0KCQkkZnVsbENhdExpc3QgPSBhcnJheSgpOw0KCQkkbm90Q2F0TGlzdCA9IGFycmF5KCk7DQoJCSRjYXRWYXJzID0gYXJyYXkoIj9jIiwgIiFjIiwgIj9zIiwgIiFzIiwgIj90IiwgIiF0IiwgIj9pZCIsICIhaWQiLCAiP2ZpZWxkIiwgIiFmaWVsZCIpOw0KCQkkcmV0QXJyYXkgPSBzbWRfZ2V0QXR0cygkY2F0ZWdvcnksICRjYXRWYXJzLCAkY2F0bGFiZWwpOw0KCQkkZnVsbENhdExpc3QgPSAkcmV0QXJyYXlbMF07DQoJCSRub3RDYXRMaXN0ID0gJHJldEFycmF5WzFdOw0KDQoJCS8vIENvbnZlcnQgdGhlIGltYWdlaWQgKHBvc3NpYmx5IGEgY29tbWEtc2VwIGxpc3QpIGludG8gYW4gU1FMLXN0eWxlICdpbicgbGlzdC4NCgkJJGZ1bGxJRExpc3QgPSBhcnJheSgpOw0KCQkkbm90SURMaXN0ID0gYXJyYXkoKTsNCgkJJGlkVmFycyA9IGFycmF5KCI/aWQiLCAiIWlkIiwgIj9maWVsZCIsICIhZmllbGQiKTsNCgkJJHJldEFycmF5ID0gc21kX2dldEF0dHMoJGltYWdlaWQsICRpZFZhcnMpOw0KCQkkZnVsbElETGlzdCA9ICRyZXRBcnJheVswXTsNCgkJJG5vdElETGlzdCA9ICRyZXRBcnJheVsxXTsNCg0KCQkvLyBNYWtlIHVwIHRoZSBXSEVSRSBzdGF0ZW1lbnQgZnJvbSB0aGUgY29tYmluZWQgbGlzdHMuDQoJCS8vIFRoZSBjYXRlZ29yaWVzL2ltYWdlIElEcyBhcmUgT1JlZCB0b2dldGhlciBpbiBicmFja2V0cyBmaXJzdA0KCQkvLyBiZWZvcmUgdGhlIG5lZ2F0aW9uIG9wdGlvbnMgYXJlIHRhY2tlZCBvbiBhcyBBTkRzIGFmdGVyd2FyZHMNCgkJJHdoZXJlT1IgPSBhcnJheSgpOw0KCQkkd2hlcmVBTkQgPSBhcnJheSgpOw0KDQoJCS8vIFN0YXJ0IHRoZSBXSEVSRSBzdGF0ZW1lbnQgd2l0aCB0aGUgY29tYmluZWQgbGlzdCBvZiBpbWFnZSBJRHMNCgkJaWYgKGNvdW50KCRmdWxsSURMaXN0KSA+IDApIHsNCgkJCWZvciAoJGlkeCA9IGNvdW50KCRmdWxsSURMaXN0KTsgJGlkeCA+PTA7ICRpZHgtLSkgew0KCQkJCWlmIChlbXB0eSgkZnVsbElETGlzdFskaWR4XSkpIHsNCgkJCQkJdW5zZXQoJGZ1bGxJRExpc3RbJGlkeF0pOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRmdWxsSURMaXN0WyRpZHhdID0gIiciIC4gJGZ1bGxJRExpc3RbJGlkeF0gLiAiJyI7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKGNvdW50KCRmdWxsSURMaXN0KSA+IDApIHsNCgkJCQkkd2hlcmVPUltdID0gImlkIElOICgiIC4gaW1wbG9kZSgiLCIsICRmdWxsSURMaXN0KS4gIikiOw0KCQkJfQ0KCQl9DQoNCgkJLy8gaW5jbHVkZWQgY2F0ZWdvcmllcyAtIHNvbWUgbWF5IGJlIHN1YmNhdHMNCgkJJHRtcGEgPSBhcnJheSgpOw0KCQlmb3IgKCRpZHggPSAwOyAkaWR4IDwgY291bnQoJGZ1bGxDYXRMaXN0KTsgJGlkeCsrKSB7DQoJCQlpZiAoJHN1YmNhdHMpIHsNCgkJCQkkY2F0ZWdzID0gc21kX2dldFN1YkNhdHMoJGZ1bGxDYXRMaXN0WyRpZHhdLCdpbWFnZScpOw0KCQkJCWZvciAoJGpkeCA9IDA7ICRqZHggPCBjb3VudCgkY2F0ZWdzKTsgJGpkeCsrKSB7DQoJCQkJCWlmICgkY2F0ZWdzWyRqZHhdWyduYW1lJ10gIT0gInJvb3QiKSB7DQoJCQkJCQkkdG1wYVtdID0gIiciIC4kY2F0ZWdzWyRqZHhdWyduYW1lJ10uICInIjsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJJHRtcGFbXSA9ICInIiAuJGZ1bGxDYXRMaXN0WyRpZHhdLiAiJyI7DQoJCQl9DQoJCX0NCgkJaWYgKGNvdW50KCR0bXBhKSA+IDApIHsNCgkJCSR3aGVyZU9SW10gPSAiY2F0ZWdvcnkgSU4gKCIgLmltcGxvZGUoIiwiLCAkdG1wYSkuICIpIjsNCgkJfQ0KDQoJCWlmIChjb3VudCgkd2hlcmVPUikgPiAwKSB7DQoJCQkkd2hlcmUgPSAiKCIgLiBpbXBsb2RlKCIgT1IgIiwgJHdoZXJlT1IpIC4gIikiOw0KCQl9IGVsc2Ugew0KCQkJJHdoZXJlID0gIiI7DQoJCX0NCg0KCQkvLyBleGNsdWRlZCBjYXRlZ29yaWVzDQoJCSR0bXBhID0gYXJyYXkoKTsNCgkJZm9yICgkaWR4ID0gMDsgJGlkeCA8IGNvdW50KCRub3RDYXRMaXN0KTsgJGlkeCsrKSB7DQoJCQlpZiAoJHN1YmNhdHMpIHsNCgkJCQkkY2F0ZWdzID0gc21kX2dldFN1YkNhdHMoJG5vdENhdExpc3RbJGlkeF0sJ2ltYWdlJyk7DQoJCQkJZm9yICgkamR4ID0gMDsgJGpkeCA8IGNvdW50KCRjYXRlZ3MpOyAkamR4KyspIHsNCgkJCQkJaWYgKCRjYXRlZ3NbJGpkeF1bJ25hbWUnXSAhPSAicm9vdCIpIHsNCgkJCQkJCSR0bXBhW10gPSAiJyIgLiRjYXRlZ3NbJGpkeF1bJ25hbWUnXS4gIiciOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQkkdG1wYVtdID0gIiciIC4kbm90Q2F0TGlzdFskaWR4XS4gIiciOw0KCQkJfQ0KCQl9DQoJCWlmIChjb3VudCgkdG1wYSkgPiAwKSB7DQoJCQkkd2hlcmVBTkRbXSA9ICJjYXRlZ29yeSBOT1QgSU4gKCIgLmltcGxvZGUoIiwiLCAkdG1wYSkuICIpIjsNCgkJfQ0KDQoJCS8vIEFkZCB0byB0aGUgV0hFUkUgc3RhdGVtZW50IHRoZSBjb21iaW5lZCBsaXN0IG9mIE5PVCBpbWFnZSBJRHMNCgkJaWYgKGNvdW50KCRub3RJRExpc3QpID4gMCkgew0KCQkJZm9yICgkaWR4ID0gY291bnQoJG5vdElETGlzdCk7ICRpZHggPj0wOyAkaWR4LS0pIHsNCgkJCQlpZiAoZW1wdHkoJG5vdElETGlzdFskaWR4XSkpIHsNCgkJCQkJdW5zZXQoJG5vdElETGlzdFskaWR4XSk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJG5vdElETGlzdFskaWR4XSA9ICInIiAuICRub3RJRExpc3RbJGlkeF0gLiAiJyI7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKGNvdW50KCRub3RJRExpc3QpID4gMCkgew0KCQkJCSR3aGVyZUFORFtdID0gImlkIE5PVCBJTiAoIiAuIGltcGxvZGUoIiwiLCAkbm90SURMaXN0KS4gIikiOw0KCQkJfQ0KCQl9DQoNCgkJaWYgKGNvdW50KCR3aGVyZUFORCkgPiAwKSB7DQoJCQkkd2hlcmUgLj0gKCgkd2hlcmU9PSIiKSA/ICIiIDogIiBBTkQgIikgLiBpbXBsb2RlKCIgQU5EICIsICR3aGVyZUFORCk7DQoJCX0NCg0KCQkvLyBJZiB0aGUgcmVhc29uIG5vdGhpbmcgd2FzIHJldHVybmVkIGlzIGJlY2F1c2Ugbm8gb3B0aW9ucyB3ZXJlIGdpdmVuDQoJCWlmICgkd2hlcmUgPT0gIiIgJiYgISRjYXRpZG9wdHMpIHsNCgkJCSR3aGVyZSA9ICIxPTEiOw0KCQl9DQoNCgkJLy8gQ29udmVydCB0aGUgb3JkZXJieSBpbnRvIGEgdmFsaWQgc29ydGluZyBoaWVyYXJjaHkuDQoJCS8vIE5vdGUgdGhhdCByYW5kb20gaXMgYSBzcGVjaWFsIGNhc2UgYW5kIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbHk6DQoJCS8vICAxKSBBbnl0aGluZyBhcHBlYXJpbmcgYmVmb3JlIHJhbmRvbSBpcyBwYXNzZWQgdG8gdGhlIGRhdGFiYXNlIHF1ZXJ5IGZvciBvcmRlcmluZw0KCQkvLyAgMikgQXMgc29vbiBhcyByYW5kb20gaXMgZW5jb3VudGVyZWQsIHRoZSBvcmRlcmJ5IHN0cmluZyBpcyBpZ25vcmVkLg0KCQkvLyAgICAgVGhlIHJlc3VsdHNldCB3aWxsIGJlIHNvcnRlZCByYW5kb21seSBpbnN0ZWFkDQoJCS8vICAzKSBJZiByYW5kb20gYXBwZWFycyBmaXJzdCBpbiB0aGUgbGlzdCwgdGhlIGRhdGEgaXMgcmV0cmlldmVkIHJhbmRvbWx5IHRoZW4gdGhlDQoJCS8vICAgICByZW1haW5pbmcgb3B0aW9ucyBzb3J0IHRoZSByZXN1bHRzZXQNCgkJJHdoZXJlT0IgPSBBcnJheSgpOw0KCQkkcG9zdE9yZGVyID0gYXJyYXkoKTsNCgkJJHJ1bGUgPSAic3FsIjsNCgkJJHBvc3RQcmVmaXggPSAiU09SVF8iOw0KCQkkcmFuZHNvcnQgPSBmYWxzZTsNCgkJJG9iTGlzdCA9IHByZWdfc3BsaXQoJy9bLFxzXSsvJywkb3JkZXJieSwtMSxQUkVHX1NQTElUX05PX0VNUFRZKTsNCgkJZm9yICgkaWR4ID0gMDsgJGlkeCA8IGNvdW50KCRvYkxpc3QpOyAkaWR4KyspIHsNCgkJCSRvYl9kaXIgPSBleHBsb2RlKCc6Jywkb2JMaXN0WyRpZHhdKTsNCgkJCSRkaXJlY3Rpb24gPSAnJzsNCgkJCSRjb2xSZWYgPSAnJzsNCgkJCWlmIChjb3VudCgkb2JfZGlyKSA8PSAxKSB7DQoJCQkJJG9iX2RpclsxXSA9ICJhc2MiOw0KCQkJfQ0KCQkJaWYgKCRydWxlID09ICJzcWwiKSB7DQoJCQkJJGRpcmVjdGlvbiA9ICgkb2JfZGlyWzFdID09ICJkZXNjIikgPyAnIGRlc2MnIDogJyBhc2MnOw0KCQkJfSBlbHNlIHsNCgkJCQkkZGlyZWN0aW9uID0gKCRvYl9kaXJbMV0gPT0gImRlc2MiKSA/ICRwb3N0UHJlZml4LidERVNDJyA6ICRwb3N0UHJlZml4LidBU0MnOw0KCQkJfQ0KCQkJc3dpdGNoICgkb2JfZGlyWzBdKSB7DQoJCQkJY2FzZSAnbmFtZSc6DQoJCQkJCSRjb2xSZWYgPSAnbmFtZSc7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2lkJzoNCgkJCQkJJGNvbFJlZiA9ICdpZCc7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2FsdCc6DQoJCQkJCSRjb2xSZWYgPSAnYWx0JzsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAnY2FwdGlvbic6DQoJCQkJCSRjb2xSZWYgPSAnY2FwdGlvbic7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2RhdGUnOg0KCQkJCQkkY29sUmVmID0gJ2RhdGUnOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdleHQnOg0KCQkJCQkkY29sUmVmID0gJ2V4dCc7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2F1dGhvcic6DQoJCQkJCSRjb2xSZWYgPSAnYXV0aG9yJzsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAnd2lkdGgnOg0KCQkJCQkkY29sUmVmID0gJ3cnOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdoZWlnaHQnOg0KCQkJCQkkY29sUmVmID0gJ2gnOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdyYW5kb20nOg0KCQkJCQkkcnVsZSA9ICJwb3N0IjsNCgkJCQkJaWYgKCRpZHggPT0gMCkgew0KCQkJCQkJJHdoZXJlT0JbXSA9ICdyYW5kKCknOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJHJhbmRzb3J0ID0gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICdmaXhlZCc6DQoJCQkJCS8vICdmaXhlZCcgb25seSB3b3JrcyBvbiBpbWFnZSBpZHMNCgkJCQkJaWYgKCRpbWFnZWlkICE9ICIiKSB7DQoJCQkJCQkkZml4ZWRPcmRlciA9IHRydWU7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAnY2F0ZWdvcnknOg0KCQkJCWRlZmF1bHQ6DQoJCQkJCSRjb2xSZWYgPSAnY2F0ZWdvcnknOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJCWlmICgkcnVsZSA9PSAic3FsIikgew0KCQkJCWlmICgkY29sUmVmICE9ICIiKSB7DQoJCQkJCSR3aGVyZU9CW10gPSAkY29sUmVmLiRkaXJlY3Rpb247DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQlpZiAoISRyYW5kc29ydCkgew0KCQkJCQlpZiAoJGNvbFJlZiAhPSAiIikgew0KCQkJCQkJJHBvc3RPcmRlcltdID0gYXJyYXkoImNvbCIgPT4gJGNvbFJlZiwgInNvcnQiID0+ICRkaXJlY3Rpb24pOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJaWYgKGNvdW50KCR3aGVyZU9CKSA+IDApIHsNCgkJCSR3aGVyZSAuPSAnIE9SREVSIEJZICcgLiBpbXBsb2RlKCIsIiwkd2hlcmVPQik7DQoJCX0NCg0KCQkvLyBIYW5kbGUgcGFnaW5nDQoJCWlmICgoJGxpbWl0ID4gMCkgJiYgJHNob3dwYWdlbGlua3MpIHsNCgkJCSRycyA9IHNhZmVfcm93cygkZmllbGRzLCAndHhwX2ltYWdlJywgJHdoZXJlIC4nIExJTUlUIDAsJy4kbWF4bGltaXQpOw0KCQkJJG51bXRodW0gPSBjb3VudCgkcnMpOw0KCQkJJG51bVBhZ2VzID0gKCRudW10aHVtID4gMCkgPyBjZWlsKCRudW10aHVtLyRsaW1pdCkgOiAxOw0KCQkJJHRodW1icGFnZSA9ICghZ3BzKCd0cGcnKSkgPyAxIDogZ3BzKCd0cGcnKTsNCgkJCSRvZmZzZXQgPSAoJHRodW1icGFnZSAtIDEpICogJGxpbWl0Ow0KCQkJJHJzID0gc2FmZV9yb3dzKCRmaWVsZHMsICd0eHBfaW1hZ2UnLCAkd2hlcmUgLicgTElNSVQgJy4kb2Zmc2V0LicsJy4kbGltaXQpOw0KCQl9IGVsc2Ugew0KCQkJLy8gTm8gcGFnaW5nIHJlcXVpcmVkDQoJCQkkbnVtUGFnZXMgPSAxOw0KCQkJJHRodW1icGFnZSA9IDE7DQoJCQkkcnMgPSBzYWZlX3Jvd3MoJGZpZWxkcywgJ3R4cF9pbWFnZScsICR3aGVyZSAuJyBMSU1JVCAwLCcuICgoJGxpbWl0PT0wKSA/ICRtYXhsaW1pdCA6ICRsaW1pdCkpOw0KCQl9DQoNCgkJLy8gSXMgcG9zdC1vcmRlcmluZyByZXF1aXJlZD8gRG8gaXQNCgkJaWYgKCRyYW5kc29ydCkgew0KCQkJc2h1ZmZsZSgkcnMpOw0KCQl9IGVsc2UgaWYgKGNvdW50KCRwb3N0T3JkZXIpID4gMCkgew0KCQkJLy8gVHJhbnNsYXRlIHRoZSByb3dzIGludG8gY29sdW1ucyB0aGF0IGNhbiBiZSBzb3J0ZWQNCgkJCWZvcmVhY2goJHJzIGFzICRrZXkgPT4gJHJvdykgew0KCQkJCSRjb2xfaWRbJGtleV0gPSAkcm93WydpZCddOw0KCQkJCSRjb2xfbmFtZVska2V5XSA9ICRyb3dbJ25hbWUnXTsNCgkJCQkkY29sX2NhcHRpb25bJGtleV0gPSAkcm93WydjYXB0aW9uJ107DQoJCQkJJGNvbF9hbHRbJGtleV0gPSAkcm93WydhbHQnXTsNCgkJCQkkY29sX2NhdGVnb3J5WyRrZXldID0gJHJvd1snY2F0ZWdvcnknXTsNCgkJCQkkY29sX2RhdGVbJGtleV0gPSAkcm93WydkYXRlJ107DQoJCQkJJGNvbF9leHRbJGtleV0gPSAkcm93WydleHQnXTsNCgkJCQkkY29sX2F1dGhvclska2V5XSA9ICRyb3dbJ2F1dGhvciddOw0KCQkJCSRjb2xfd1ska2V5XSA9ICRyb3dbJ3cnXTsNCgkJCQkkY29sX2hbJGtleV0gPSAkcm93WydoJ107DQoJCQl9DQoJCQkvLyBNYWtlIHVwIGFuIGFycmF5X211bHRpc29ydCBhcmcgbGlzdCBhbmQgZXhlY3V0ZSBpdA0KCQkJZm9yICgkaWR4ID0gMDsgJGlkeCA8IGNvdW50KCRwb3N0T3JkZXIpOyAkaWR4KyspIHsNCgkJCQkkc29ydGFyZ3NbXSA9ICckY29sXycuJHBvc3RPcmRlclskaWR4XVsnY29sJ107DQoJCQkJJHNvcnRhcmdzW10gPSAkcG9zdE9yZGVyWyRpZHhdWydzb3J0J107DQoJCQl9DQoJCQkkc29ydGl0ID0gJ2FycmF5X211bHRpc29ydCgnLmltcGxvZGUoIiwgIiwkc29ydGFyZ3MpLicsICRycyk7JzsNCgkJCWV2YWwoJHNvcnRpdCk7DQoJCX0NCg0KCQkvLyBJcyBmaXhlZC1vcmRlciBvdXRwdXQgZGVzaXJlZD8gSWYgc28sIHJlLW9yZGVyIHRoZSAkcnMNCgkJaWYgKCRmaXhlZE9yZGVyKSB7DQoJCQkkb3JkZXJlZFJTID0gQXJyYXkoKTsNCgkJCSRpZ25vcmVMaXN0ID0gQXJyYXkoKTsNCgkJCSRyZW1haW5pbmdSUyA9IEFycmF5KCk7DQoJCQkvLyBTdWNrIG91dCB0aGUgZml4ZWQgaXRlbXMgZmlyc3QNCgkJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkZnVsbElETGlzdCk7ICRpZHgrKykgew0KCQkJCWZvcmVhY2goJHJzIGFzICRyb3cpIHsNCgkJCQkJaWYgKCInIi4kcm93WydpZCddLiInIiA9PSAkZnVsbElETGlzdFskaWR4XSkgew0KCQkJCQkJJG9yZGVyZWRSU1tdID0gJHJvdzsNCgkJCQkJCSRpZ25vcmVMaXN0W10gPSAkcm93WydpZCddOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gVGFjayBvbiB0aGUgcmVtYWluaW5nIHJvd3MNCgkJCWZvcmVhY2goJHJzIGFzICRyb3cpIHsNCgkJCQlpZiAoIWluX2FycmF5KCRyb3dbJ2lkJ10sICRpZ25vcmVMaXN0KSkgew0KCQkJCQkkcmVtYWluaW5nUlNbXSA9ICRyb3c7DQoJCQkJfQ0KCQkJfQ0KCQkJJHJzID0gYXJyYXlfbWVyZ2UoJG9yZGVyZWRSUywgJHJlbWFpbmluZ1JTKTsNCgkJfQ0KDQoJCS8vIENvbnN0cnVjdCB0aGUgb3V0cHV0DQoJCSRvdXRTdHIgPSAnJzsNCgkJaWYoJHJzKSB7DQoJCQlmb3JlYWNoKCRycyBhcyAkcm93KSB7DQoJCQkJJHRodW1iID0gaHUuJGltZ19kaXIuJy8nIC4gJHJvd1snaWQnXSAuICd0JyAuICRyb3dbJ2V4dCddOw0KCQkJCSRmdWxsID0gaHUuJGltZ19kaXIuJy8nIC4gJHJvd1snaWQnXSAuICRyb3dbJ2V4dCddOw0KCQkJCWlmICgkZ3JvdXBuYW1lID09PSAiP2MiKSB7DQoJCQkJCSRncnAgPSAkcm93WydjYXRlZ29yeSddOw0KCQkJCX0gZWxzZSBpZiAoJGdyb3VwbmFtZVswXSA9PT0gIj8iKSB7DQoJCQkJCS8vIFNwbGl0IG9mZiB0aGUgZmllbGQgbmFtZSBmcm9tIHRoZSBxdWVzdGlvbiBtYXJrDQoJCQkJCSRmaWVsZG5hbWUgPSBzdWJzdHIoJGdyb3VwbmFtZSwxKTsNCgkJCQkJaWYgKGlzc2V0KCR0aGlzYXJ0aWNsZVskZmllbGRuYW1lXSkpIHsNCgkJCQkJCSRncnAgPSAkdGhpc2FydGljbGVbJGZpZWxkbmFtZV07DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkZ3JwID0gJyc7DQoJCQkJCX0NCgkJCQl9IGVsc2Ugew0KCQkJCQkkZ3JwID0gJGdyb3VwbmFtZTsNCgkJCQl9DQoNCgkJCQkvLyBHZW5lcmF0ZSB0aGUgY2FwdGlvbi9hbHQgaWYgcmVxdWlyZWQNCgkJCQkkY2FwU3RyID0gKCRzaG93YWx0ICYmICRyb3dbJ2FsdCddKSA/ICc8c3BhbicgLiAoKCRhbHRjbGFzcyAhPSAiIikgPyAnIGNsYXNzPSInIC4kYWx0Y2xhc3MuICciJyA6ICcnKSAuICc+JyAuJHJvd1snYWx0J10uICc8L3NwYW4+JyA6ICcnOw0KCQkJCSRjYXBTdHIgLj0gKCRzaG93Y2FwdGlvbiAmJiAkcm93WydjYXB0aW9uJ10pID8gJzxzcGFuJyAuICgoJGNhcHRpb25jbGFzcyAhPSAiIikgPyAnIGNsYXNzPSInIC4kY2FwdGlvbmNsYXNzLiAnIicgOiAnJykgLiAnPicgLiRyb3dbJ2NhcHRpb24nXS4gJzwvc3Bhbj4nIDogJyc7DQoNCgkJCQkvLyBDb25zdHJ1Y3QgdGhlIGxpbmsgYW5kIHB1dCBjYXB0aW9uL2FsdCBpbiB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb24NCgkJCQkkb3V0U3RyIC49ICgkd3JhcHRhZyAhPSAiIikgPyAnPCcgLiR3cmFwdGFnLiAoKCRjZWxsY2xhc3MgIT0gIiIpID8gJyBjbGFzcz0iJyAuJGNlbGxjbGFzcy4gJyInIDogJycpIC4gJz4nIDogJyc7DQoJCQkJJG91dFN0ciAuPSAoJHRleHRwb3MgPT0gImFib3ZlIikgPyAkY2FwU3RyIDogJyc7DQoJCQkJJG91dFN0ciAuPSAnPGEgaHJlZj0iJy4kZnVsbC4nIiByZWw9ImxpZ2h0Ym94LScgLiRncnAuICciIHRpdGxlPSInIC4kcm93WydjYXB0aW9uJ10uICciPicgLigoJHRleHRwb3MgPT0gImJlZm9yZSIpID8gJGNhcFN0ciA6ICcnKS4gJzxpbWcgc3JjPSInIC4kdGh1bWIuICciIGFsdD0iJyAuJHJvd1snYWx0J10uICciJyAuICgoJGltZ2NsYXNzICE9ICIiKSA/ICcgY2xhc3M9IicgLiRpbWdjbGFzcy4gJyInIDogJycpIC4gJyAvPicgLigoJHRleHRwb3MgPT0gImFmdGVyIikgPyAkY2FwU3RyIDogJycpLiAnPC9hPicubjsNCgkJCQkkb3V0U3RyIC49ICgkdGV4dHBvcyA9PSAiYmVsb3ciKSA/ICRjYXBTdHIgOiAnJzsNCgkJCQkkb3V0U3RyIC49ICgkd3JhcHRhZyAhPSAiIikgPyAnPC8nIC4kd3JhcHRhZy4gJz4nIDogJyc7DQoJCQkJJG91dFN0ciAuPSBuOw0KCQkJfQ0KDQoJCQkvLyBBZGQgdGhlIHBhZ2luZyBmZWF0dXJlcyBpZiByZXF1aXJlZA0KCQkJaWYgKCgkbGltaXQgPiAwKSAmJiAkc2hvd3BhZ2VsaW5rcykgew0KCQkJCSRuZXh0ID0gKCRudW1QYWdlcyA+IDEgJiYgJHRodW1icGFnZSAhPSAkbnVtUGFnZXMpOw0KCQkJCSRwcmV2ID0gKCRudW1QYWdlcyA+IDEgJiYgJHRodW1icGFnZSA+IDEpOw0KDQoJCQkJLy8gUmVwbGFjZSBhbnkgcGFnaW5nIGluZm8gaW4gdGhlIHF1ZXJ5IHN0cmluZw0KCQkJCSRwcmV2UGFnZSA9IHNtZF9hZGRRU1ZhcihzaXRlX3VybChhcnJheSgpKS4gJHRoaXNMYW5nIC4gc3Vic3RyKCRwcmV0ZXh0WydyZXEnXSwxKSwgJ3RwZycsICR0aHVtYnBhZ2UtMSk7DQoJCQkJJG5leHRQYWdlID0gc21kX2FkZFFTVmFyKHNpdGVfdXJsKGFycmF5KCkpLiAkdGhpc0xhbmcgLiBzdWJzdHIoJHByZXRleHRbJ3JlcSddLDEpLCAndHBnJywgJHRodW1icGFnZSsxKTsNCg0KCQkJCSRvdXRTdHIgLj0gKCR3cmFwdGFnICE9ICIiKSA/ICc8JyAuJHdyYXB0YWcuICgoJG5hdmNsYXNzICE9ICIiKSA/ICcgY2xhc3M9IicgLiRuYXZjbGFzcy4gJyInIDogJycpIC4gJz4nIDogJyc7DQoJCQkJJG91dFN0ciAuPSAoJHByZXYpID8gJzxhJyAuICgoJHByZXZjbGFzcyAhPSAiIikgPyAnIGNsYXNzPSInIC4kcHJldmNsYXNzLiAnIicgOiAnJykgLiAnIGhyZWY9IicgLiRwcmV2UGFnZS4gJyI+JyAuJHByZXZsYWJlbC4gJzwvYT4nLm4gOiAnJzsNCgkJCQkkb3V0U3RyIC49ICgkbmV4dCkgPyAnPGEnIC4gKCgkbmV4dGNsYXNzICE9ICIiKSA/ICcgY2xhc3M9IicgLiRuZXh0Y2xhc3MuICciJyA6ICcnKSAuICcgaHJlZj0iJyAuJG5leHRQYWdlLiAnIj4nIC4kbmV4dGxhYmVsLiAnPC9hPicubiA6ICcnOw0KCQkJCSRvdXRTdHIgLj0gKCR3cmFwdGFnICE9ICIiKSA/ICc8LycgLiR3cmFwdGFnLiAnPicgOiAnJzsNCgkJCQkkb3V0U3RyIC49IG47DQoJCQl9DQoJCX0NCgl9DQoNCglyZXR1cm4gJG91dFN0cjsNCn0iO3M6NDoidHlwZSI7czoxOiIwIjtzOjM6Im1kNSI7czozMjoiNjIzNmJkYjMwZTNkNDMxNDc0NDI5NDc1MWYzZTVhZjAiO30=