# ajw_clean_feed v0.2 # Extends Atom & RSS functionality to allow for /clean/feed/urls # http://compooter.org/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE0OiJhandfY2xlYW5fZmVlZCI7czo3OiJ2ZXJzaW9uIjtz OjM6IjAuMiI7czo2OiJhdXRob3IiO3M6MTE6IkFuZHJldyBXYWVyIjtzOjEwOiJhdXRob3Jf dXJpIjtzOjIxOiJodHRwOi8vY29tcG9vdGVyLm9yZy8iO3M6MTE6ImRlc2NyaXB0aW9uIjtz OjYyOiJFeHRlbmRzIEF0b20gJiBSU1MgZnVuY3Rpb25hbGl0eSB0byBhbGxvdyBmb3IgL2Ns ZWFuL2ZlZWQvdXJscyI7czo0OiJ0eXBlIjtpOjA7czo0OiJoZWxwIjtzOjMyMTg6Igk8aDI+ PHN0cm9uZz5handfY2xlYW5fZmVlZDwvc3Ryb25nPjwvaDI+Cgk8cD5UaGlzIHBsdWdpbiBl eHRlbmRzIFRleHRwYXR0ZXJuJiM4MjE3O3MgZGVmYXVsdCBBdG9tICYjMzg7IFJTUyBmdW5j dGlvbmFsaXR5IHRvIGFsbG93IGZvciA8Y29kZT4vY2xlYW4vZmVlZC91cmxzPC9jb2RlPi4g ICBJbmNsdWRlZCB3aXRoIHRoaXMgcGx1Z2luIGlzIHRoZSB0ZW1wbGF0ZSB0YWcgPGNvZGU+ YWp3X2NsZWFuX2ZlZWRfbGluazwvY29kZT4gKGRldGFpbGVkIGJlbG93KSwgd2hpY2ggaXMg dXNlZCBmb3IgZGlzcGxheWluZyBmZWVkIGxpbmtzIGluIHlvdXIgcGFnZSB0ZW1wbGF0ZXMu PC9wPgoJPGgzPlVzYWdlPC9oMz4KCTxwPkFsbCB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgdG8g ZW5hYmxlIGNsZWFuIGZlZWQgdXJscyBvbiB5b3VyIHNpdGUgaXMgaW5zdGFsbCAmIzM4OyBh Y3RpdmF0ZSB0aGlzIHBsdWdpbi4gUlNTIGFuZCBBdG9tIHNob3VsZCB0aGVuIGJlIGFjY2Vz c2libGUgYXQgYW55IDxjb2RlPi9jbGVhbi9yc3MvPC9jb2RlPiBvciBAL2NsZWFuL2F0b20v IHVybC48L3A+Cgk8aDM+RXhhbXBsZSBVUkxzPC9oMz4KIDxzcGFuIHN0eWxlPSJsaW5lLWhl aWdodDoxOHB4Ij4KCTx1bD4KCQk8bGk+QXJ0aWNsZXMKCTx1bD4KCQk8bGk+PGNvZGU+aHR0 cDovL2V4YW1wbGUuY29tL3Jzcy88L2NvZGU+IChkZWZhdWx0KTwvbGk+CgkJPGxpPjxjb2Rl Pmh0dHA6Ly9leGFtcGxlLmNvbS9mb28vcnNzLzwvY29kZT4gKFJTUyBmb3IgYXJ0aWNsZXMg aW4gc2VjdGlvbiAmIzgyMTY7Zm9vJiM4MjE3Oyk8L2xpPgoJCTxsaT48Y29kZT5odHRwOi8v ZXhhbXBsZS5jb20vY2F0ZWdvcnkvYmFyL3Jzcy88L2NvZGU+IChSU1MgZm9yIGFydGljbGVz IHVuZGVyIGNhdGVnb3J5ICYjODIxNjtiYXImIzgyMTc7KTwvbGk+Cgk8L3VsPjwvbGk+CgkJ PGxpPkxpbmtzCgk8dWw+CgkJPGxpPjxjb2RlPmh0dHA6Ly9leGFtcGxlLmNvbS9saW5rL3Jz cy88L2NvZGU+IChsaW5rcyBmZWVkKTwvbGk+CgkJPGxpPjxjb2RlPmh0dHA6Ly9leGFtcGxl LmNvbS9saW5rL2Zvby9yc3MvPC9jb2RlPiAobGlua3MgZmVlZCBmb3IgbGlua3MgY2F0ZWdv cnkgJiM4MjE2O2ZvbyYjODIxNzspPC9saT4KCTwvdWw+PC9saT4KCQk8bGk+Q29tbWVudHMg IDxzdHJvbmc+PGEgaHJlZj0iI2ZuMSI+PHNwYW4gc3R5bGU9J2NvbG9yOiNDQzAwMDAnPjxz dXA+MTwvc3VwPjwvc3Bhbj48L2E+PC9zdHJvbmc+Cgk8dWw+CgkJPGxpPjxjb2RlPmh0dHA6 Ly9leGFtcGxlLmNvbS95eXl5L21tL2RkL3VybC10aXRsZS9yc3MvPC9jb2RlPiAoUlNTIGZv ciBjb21tZW50cyBmb3IgYXJ0aWNsZSk8L2xpPgoJCTxsaT48Y29kZT5odHRwOi8vZXhhbXBs ZS5jb20vc2VjdGlvbi9pZC91cmwtdGl0bGUvcnNzLzwvY29kZT4gKFJTUyBmb3IgY29tbWVu dHMgZm9yIGFydGljbGUpPC9saT4KCQk8bGk+PGNvZGU+aHR0cDovL2V4YW1wbGUuY29tL2Nv bW1lbnRzL3Jzcy88L2NvZGU+IChSU1MgZm9yIHNpdGV3aWRlIGNvbW1lbnRzKTwvbGk+Cgk8 L3VsPjwvbGk+Cgk8L3VsPgogPC9zcGFuPgoJPHA+PHN0cm9uZz48c3BhbiBpZD0iZm4xIiBz dHlsZT0nY29sb3I6I0NDMDAwMCc+PHN1cD4xPC9zdXA+PC9zcGFuPjwvc3Ryb25nPiA8ZW0+ UmVxdWlyZXMgPGEgaHJlZj0iaHR0cDovL2NvbXBvb3Rlci5vcmcvYXJ0aWNsZS8xNDAvdGV4 dHBhdHRlcm4tcGx1Z2luLWFqdy1jb21tZW50cy1mZWVkIj5handfY29tbWVudHNfZmVlZDwv YT4gPC9lbT48L3A+Cgk8aDI+PHN0cm9uZz5handfY2xlYW5fZmVlZF9saW5rPC9zdHJvbmc+ PC9oMj4KCTxwPk5vdyB0aGF0IHlvdSBoYXZlIGNsZWFuIGZlZWRzIHdvcmtpbmcsIHlvdSB3 aWxsIG5lZWQgdG8gdXNlIHRoZSB0ZW1wbGF0ZSB0YWcgPGNvZGU+YWp3X2NsZWFuX2ZlZWRf bGluazwvY29kZT4gaW4gb3JkZXIgdG8gb3V0cHV0IGxpbmtzIHRvIHNpdGV3aWRlLCBwZXIt c2VjdGlvbiwgcGVyLWNhdGVnb3J5LCBjb21tZW50cywgb3IgbGlua3MgZmVlZHMuICBUaGlz IHRlbXBsYXRlIHRhZyB3b3JrcyBpZGVudGljYWxseSB0byA8YSBocmVmPSJodHRwOi8vdGV4 dHBhdHRlcm4ubmV0L3dpa2kvaW5kZXgucGhwP3RpdGxlPVR4cDpmZWVkX2xpbmtfLyI+PGNv ZGU+ZmVlZF9saW5rPC9jb2RlPjwvYT4gYW5kIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVy bi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9VHhwOmxpbmtfZmVlZF9saW5rXy8iPjxjb2Rl PmxpbmtfZmVlZF9saW5rPC9jb2RlPjwvYT4sIHdpdGggYSBmZXcgYWRkaXRpb25hbCBhdHRy aWJ1dGUgb3B0aW9uczo8L3A+Cgk8aDM+U3RhbmRhcmQgYXR0cmlidXRlczo8L2gzPgogPHNw YW4gc3R5bGU9ImxpbmUtaGVpZ2h0OjE4cHgiPgoJPHVsPgoJCTxsaT5sYWJlbDwvbGk+CgkJ PGxpPnRpdGxlPC9saT4KCQk8bGk+d3JhcHRhZzwvbGk+CgkJPGxpPmNhdGVnb3J5PC9saT4K CQk8bGk+c2VjdGlvbjwvbGk+CgkJPGxpPmZsYXZvcjwvbGk+Cgk8L3VsPgogPC9zcGFuPgoJ PGgzPk5vbi1zdGFuZGFyZCBhdHRyaWJ1dGVzOjwvaDM+CiA8c3BhbiBzdHlsZT0ibGluZS1o ZWlnaHQ6MThweCI+Cgk8dWw+CgkJPGxpPjxjb2RlPmFyZWE8L2NvZGU+Cgk8dWw+CgkJPGxp PkEgdGVtcGxhdGUgdGFnIHVzaW5nIDxjb2RlPmFyZWE9ImxpbmsiPC9jb2RlPiB3aWxsIG91 dHB1dCBhIGNsZWFuIGZlZWQgbGluayB0byB5b3VyIHNpdGUmIzgyMTc7cyBsaW5rcyBsb2cu PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PGNvZGU+c2l0ZXdpZGU8L2NvZGU+Cgk8dWw+CgkJ PGxpPih5fG4pIFNldHRpbmcgdGhpcyB0byAmIzgyMTY7eSYjODIxNzsgd2lsbCBhbHdheXMg b3V0cHV0IGEgJiM4MjIwO3NpdGV3aWRlJiM4MjIxOyBmZWVkIGxpbmsgaW4gdGhlIGZvcm1h dCA8Y29kZT5odHRwOi8vZXhhbXBsZS5jb20vcnNzLzwvY29kZT4gb3IgPGNvZGU+aHR0cDov L2V4YW1wbGUuY29tL2F0b20vPC9jb2RlPiwgcmVnYXJkbGVzcyBvZiB0aGUgY29udGV4dCBv ZiB0aGUgdGVtcGxhdGUgdGFnLjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxjb2RlPnVybF9v bmx5PC9jb2RlPgoJPHVsPgoJCTxsaT4oeXxuKSBTZXR0aW5nIHRoaXMgdG8gJiM4MjE2O3km IzgyMTc7IHdpbGwgb3V0cHV0IG9ubHkgdGhlIGZlZWQgdXJsLCBmb3IgdXNlIGluICBhdXRv ZGlzY292ZXJ5IDxjb2RlPiZsdDtsaW5rJmd0OzwvY29kZT4gdGFncyBpbiB0aGUgaGVhZCBv ZiB5b3VyIHdlYnBhZ2UuCiA8L3NwYW4+CgogIjtzOjQ6ImNvZGUiO3M6NzQ5MDoiCglpZiAo QHR4cGludGVyZmFjZSA9PSAncHVibGljJykKCQlyZWdpc3Rlcl9jYWxsYmFjaygiYWp3X2Ns ZWFuX2ZlZWQiLCAncHJldGV4dCcpOwoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gYWp3X2NsZWFu X2ZlZWQoKQoJewoJCWdsb2JhbCAkcHJlZnM7CgkJZXh0cmFjdCgkcHJlZnMpOwoKCQkvLyBw cmVyZXF1aXNpdGUgZm9yIHBlci1hcnRpY2xlIGNvbW1lbnQgZmVlZHMKCQkkY29tbWVudHNf ZmVlZF9lbmFibGVkID0gZnVuY3Rpb25fZXhpc3RzKCdhandfY29tbWVudHNfZmVlZCcpOwoK CQkkcGFnZVsncmVxJ10gID0gYWp3X2NsZWFuX2ZlZWRfcmVxdWVzdCgpOwoJCSRwYWdlWydw YXRoJ10gPSBhandfY2xlYW5fZmVlZF9jaG9wKEAkcGFnZVsncmVxJ11bMF0pOwoKCQlpZiAo IWVtcHR5KCRwYWdlWydwYXRoJ10pKSB7CgoJCQkkdWNvdW50ID0gY291bnQoJHBhZ2VbJ3Bh dGgnXSk7CgoJCQkvLyBnZXQgbGFzdCBpdGVtIGluIHVyaQoJCQkkdWxhc3QgPSBzdHJ0b2xv d2VyKCRwYWdlWydwYXRoJ11bJHVjb3VudC0xXSk7CgoJCQlpZiAoJHVsYXN0ID09ICdyc3Mn IHx8ICR1bGFzdCA9PSAnYXRvbScpIHsKCgkJICAgIAkvLyBzZXQgR0VUIGZvciBhandfY29t bWVudHNfZmVlZCAmIGFueSBvdGhlciBmZWVkIHBsdWdpbnMKCQkJCSRfR0VUWyR1bGFzdF0g PSAnMSc7CgoJCQkJaWYgKCR1Y291bnQgPD0gMSkKCQkJCQlyZXR1cm47CS8vIHBhc3N0aHJv dWdoIHJvb3QgcnNzL2F0b20gcmVxdWVzdAoJCQkJZWxzZQoJCQkJewoJCQkJICAgIC8vIHNl dCAkdTEgLSAkdTQsIHNvcnRhIGxpa2UgcHJldGV4dCgpCiAgICAgICAgCQkgICAgZm9yICgk aSA9IDE7ICRpIDwgJHVjb3VudDsgJGkrKykKICAgICAgICAJCSAgICAgICAgJHsidSRpIn0g PSAkcGFnZVsncGF0aCddWyRpLTFdOwoKCQkJCQlzd2l0Y2ggKCR1MSkKCQkJCQl7CgkJCQkJ CS8vIHNpdGV3aWRlIGNvbW1lbnRzIGZlZWQKCQkJCQkJY2FzZSAnY29tbWVudHMnOgoJCQkJ CQkJJF9HRVRbJ2FyZWEnXSA9ICdjb21tZW50cyc7CgkJCQkJCQlyZXR1cm47CgkJCQkJCWJy ZWFrOwoKCQkJCQkJLy8gcGVyLWNhdGVnb3J5IGZlZWRzCgkJCQkJCWNhc2UgdXJsZGVjb2Rl KHN0cnRvbG93ZXIodXJsZW5jb2RlKGdUeHQoJ2NhdGVnb3J5JykpKSk6CgkJCQkJCQlpZiAo JGMgPSBAYWp3X2NrRXgoJ2NhdGVnb3J5JywkdTIpKSB7CgkJCQkJCQkJJF9HRVRbJ2NhdGVn b3J5J10gPSAoQCRjKSA/ICR1MiA6ICcnOwoJCQkJCQkJCXJldHVybjsKCQkJCQkJCX0KCQkJ CQkJYnJlYWs7CgoJCQkJCQkvLyBmZWVkcyBieSBhdXRob3IgYXJlbid0IGF2YWlsYWJsZSBp biBUeHAgY29yZQoJCQkJCQljYXNlIHVybGRlY29kZShzdHJ0b2xvd2VyKHVybGVuY29kZShn VHh0KCdhdXRob3InKSkpKToKCQkJCQkJCXJldHVybjsKCQkJCQkJYnJlYWs7CgoJCQkJCQkv LyBsaW5rIGZlZWRzCgkJCQkJCWNhc2UgJ2xpbmsnOgoJCQkJCQkJJF9HRVRbJ2FyZWEnXSA9 ICdsaW5rJzsKCQkJCQkJCSRfR0VUWydjYXRlZ29yeSddID0gKGlzc2V0KCR1MikpCgkJCQkJ CQkJPyBhandfY2tFeCgnY2F0ZWdvcnknLCR1MikKCQkJCQkJCQk6ICcnOwoJCQkJCQkJcmV0 dXJuOwoJCQkJCQlicmVhazsKCgkJCQkJCS8vIHBlci1zZWN0aW9uIGZlZWRzCgkJCQkJCWRl ZmF1bHQ6CgkJCQkJCQlpZiAoJHMgPSBAYWp3X2NrRXgoJ3NlY3Rpb24nLCR1MSkgJiYgIWlz c2V0KCR1MikpIHsKCQkJCQkJCQkkX0dFVFsnc2VjdGlvbiddICA9IChAJHMpID8gJHUxIDog Jyc7CgkJCQkJCQkJcmV0dXJuOwoJCQkJCQkJfQoJCQkJCQlicmVhazsKCQkJCQl9CgoJCQkJ CS8vIG5vdyBkZWFsIHdpdGggb3RoZXIga25vd24gZm9ybWF0cwoJCQkJCXN3aXRjaCAoJHBl cm1saW5rX21vZGUpCgkJCQkJewoJCQkJCQljYXNlICdzZWN0aW9uX2lkX3RpdGxlJzoKCQkJ CQkJICAgIGlmIChpc3NldCgkdTIpICYmIEBhandfbG9va3VwQnlJRCgkdTIpICYmICRjb21t ZW50c19mZWVkX2VuYWJsZWQpIHsKCQkJCQkJICAgICAgICAkX0dFVFsnYXJlYSddID0gJ2Nv bW1lbnRzJzsKCQkJCQkJCSAgICAkX0dFVFsnaWQnXSA9ICR1MjsKCQkJCQkJCX0gZWxzZWlm ICghaXNzZXQoJHUyKSAmJiAhaXNzZXQoJHUzKSAmJiAkcyA9IEBhandfY2tFeCgnc2VjdGlv bicsJHUxKSkgewoJCQkJCQkJICAgICRfR0VUWydzZWN0aW9uJ10gPSAkczsKCQkJCQkJICAg IH0gZWxzZSB7CgkJCQkJCSAgICAgICAgdW5zZXQoJF9HRVRbJHVsYXN0XSk7CgkJCQkJCSAg ICB9CgkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICd5ZWFyX21vbnRoX2RheV90aXRsZSc6CgkJ CQkJCQlpZiAoaXNzZXQoJHU0KSAmJiAoJGlkID0gQGFqd19sb29rdXBCeVRpdGxlKCR1NCkp ICYmICRjb21tZW50c19mZWVkX2VuYWJsZWQpIHsKCQkJCQkJICAgICAgICAkX0dFVFsnYXJl YSddID0gJ2NvbW1lbnRzJzsKCQkJCQkJCSAgICAkX0dFVFsnaWQnXSA9ICRpZDsKCQkJCQkJ CX0gZWxzZSB7CgkJCQkJCQkJdW5zZXQoJF9HRVRbJHVsYXN0XSk7CgkJCQkJCQl9CgkJCQkJ CWJyZWFrOwoJCQkJCQljYXNlICdzZWN0aW9uX3RpdGxlJzoKCQkJCQkJCWlmIChpc3NldCgk dTIpICYmICgkaWQgPSBAYWp3X2xvb2t1cEJ5VGl0bGVTZWN0aW9uKCR1MiwkdTEpKSAmJiAk Y29tbWVudHNfZmVlZF9lbmFibGVkKSB7CgkJCQkJCQkgICAgJF9HRVRbJ2FyZWEnXSA9ICdj b21tZW50cyc7CgkJCQkJCQkgICAgJF9HRVRbJ2lkJ10gPSAkaWQ7CgkJCQkJCQl9IGVsc2Vp ZiAoIWlzc2V0KCR1MikgJiYgKCRzID0gQGFqd19ja0V4KCdzZWN0aW9uJywkdTEpKSkgewoJ CQkJCQkJICAgICRfR0VUWydzZWN0aW9uJ10gPSAkczsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJ CQkJdW5zZXQoJF9HRVRbJHVsYXN0XSk7CgkJCQkJCQl9CgkJCQkJCWJyZWFrOwoJCQkJCQlj YXNlICd0aXRsZV9vbmx5JzoKCQkJCQkJCWlmIChpc3NldCgkdTEpICYmICgkaWQgPSBAYWp3 X2xvb2t1cEJ5VGl0bGUoJHUxKSkgJiYgJGNvbW1lbnRzX2ZlZWRfZW5hYmxlZCkgewoJCQkJ CQkgICAgICAgICRfR0VUWydhcmVhJ10gPSAnY29tbWVudHMnOwoJCQkJCQkJICAgICRfR0VU WydpZCddID0gJGlkOwoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQl1bnNldCgkX0dFVFskdWxh c3RdKTsKCQkJCQkJCX0KCQkJCQkJYnJlYWs7CgkJCQkJCWNhc2UgJ2lkX3RpdGxlJzoKCQkJ CQkJCWlmIChpc3NldCgkdTEpICYmICgkaWQgPSBAYWp3X2xvb2t1cEJ5SUQoJHUxKSkgJiYg JGNvbW1lbnRzX2ZlZWRfZW5hYmxlZCkgewoJCQkJCQkgICAgICAgICRfR0VUWydhcmVhJ10g PSAnY29tbWVudHMnOwoJCQkJCQkJICAgICRfR0VUWydpZCddID0gJGlkOwoJCQkJCQkJfSBl bHNlIHsKCQkJCQkJCQl1bnNldCgkX0dFVFskdWxhc3RdKTsKCQkJCQkJCX0KCQkJCQkJYnJl YWs7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQoKLy8gIHRlbXBsYXRlIHRhZywgd2hpY2gg b3V0cHV0cyAvY2xlYW4vbGluay90byByc3Mgb3IgYXRvbQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5j dGlvbiBhandfY2xlYW5fZmVlZF9saW5rKCRhdHRzKQogICAgewoJCWdsb2JhbCAkaWQsICRw ZXJtbGlua19tb2RlOwoKCQkvLyBwcmVyZXF1aXNpdGUgZm9yIHBlci1hcnRpY2xlIGNvbW1l bnQgZmVlZHMKCQkkY29tbWVudHNfZmVlZF9lbmFibGVkID0gZnVuY3Rpb25fZXhpc3RzKCdh andfY29tbWVudHNfZmVlZCcpOwoKCQlleHRyYWN0KGxBdHRzKGFycmF5KAoJCQknbGFiZWwn ICAgICA9PiAnU3Vic2NyaWJlIHRvIFhNTCBGZWVkJywKCQkJJ3dyYXB0YWcnICAgPT4gJycs CgkJCSdhcmVhJyAgICAgID0+ICcnLAoJCQknY2F0ZWdvcnknICA9PiAnJywKCQkJJ3NlY3Rp b24nICAgPT4gJycsCgkJCSdzaXRld2lkZScgID0+ICduJywKCQkJJ2ZsYXZvcicgICAgPT4g J3JzcycsCgkJCSd0aXRsZScgICAgID0+IGdUeHQoJ3htbF9mZWVkX3RpdGxlJyksCgkJCSd1 cmxfb25seScgID0+ICduJwoJCSksJGF0dHMpKTsKCgkJaWYgKCRwZXJtbGlua19tb2RlID09 ICdtZXNzeScpCgkJCXJldHVybjsKCgkJaWYgKCRzaXRld2lkZSA9PSAneScgfHwgKCRzaXRl d2lkZSA9PSAnbicgJiYgJGFyZWEgPT0gJ2NvbW1lbnRzJykpCgkJewoJCQkka2V5cyA9IGFy cmF5KAoJCQkJJ2FyZWEnICAgICAgPT4gJGFyZWEsCgkJCQknZmxhdm9yJyAgICA9PiAkZmxh dm9yCgkJCSk7CgkJCWlmICgkYXJlYSE9J2NvbW1lbnRzJykKCQkJCXVuc2V0KCRrZXlzWydh cmVhJ10pOwoJCQkkdXJsID0gYWp3X2NsZWFuX2ZlZWRfbGlua191cmwoJGtleXMpOwoJCX0g ZWxzZWlmICgkYXJlYSA9PSAnbGluaycpIHsKCQkJJHBhdGggPSBhcnJheV9maWx0ZXIoYXJy YXkoJGFyZWEsICRjYXRlZ29yeSwgJ3Jzcy8nKSk7CgkJCSR1cmwgPSBodS5qb2luKCcvJywk cGF0aCk7CgkJfSBlbHNlaWYgKCFlbXB0eSgkc2VjdGlvbikgfHwgIWVtcHR5KCRjYXRlZ29y eSkpIHsKCQkJJHVybCA9IGFqd19jbGVhbl9mZWVkX2xpbmtfdXJsKAoJCQkJYXJyYXkoCgkJ CQkJJ2NhdGVnb3J5JyAgPT4gJGNhdGVnb3J5LAoJCQkJCSdzZWN0aW9uJyAgID0+ICRzZWN0 aW9uLAoJCQkJCSdmbGF2b3InICAgID0+ICRmbGF2b3IKCQkJCSkKCQkJKTsKCQl9IGVsc2Vp ZiAoJGlkICYmICRjb21tZW50c19mZWVkX2VuYWJsZWQpIHsKCQkJJHVybCA9IHBlcm1saW5r dXJsX2lkKCRpZCkuIi8kZmxhdm9yLyI7CgkJfSBlbHNlIHsKCQkJJHVybCA9IGFqd19jbGVh bl9mZWVkX2xpbmtfdXJsKAoJCQkJYXJyYXkoCgkJCQkJJ2ZsYXZvcicgICAgPT4gJGZsYXZv cgoJCQkJKQoJCQkpOwoJCX0KCgkJJG91dCA9ICc8YSBocmVmPSInLiR1cmwuJyIgdGl0bGU9 IicuJHRpdGxlLiciPicuJGxhYmVsLic8L2E+JzsKCgkJcmV0dXJuICgkdXJsX29ubHk9PSd5 JwoJCQk/ICR1cmwKCQkJOiAoJHdyYXB0YWcKCQkJCT8gdGFnKCRvdXQsJHdyYXB0YWcpCgkJ CQk6ICRvdXQKCQkJKQoJCSk7CiAgICB9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiBhandfY2xl YW5fZmVlZF9saW5rX3VybCgka2V5cykKCXsKCQlnbG9iYWwgJHBlcm1saW5rX21vZGU7CgoJ CWlmIChAJGtleXNbJ3NlY3Rpb24nXSA9PSAnZGVmYXVsdCcpCgkJCXVuc2V0KCRrZXlzWydz ZWN0aW9uJ10pOwoKCQlmb3JlYWNoICgka2V5cyBhcyAkayA9PiAkdikKCQkJJGtleXNbJGtd PXVybGVuY29kZSgkdik7CgoJCWlmICghZW1wdHkoJGtleXNbJ3NlY3Rpb24nXSkgfHwgIWVt cHR5KCRrZXlzWydjYXRlZ29yeSddKSkgewoJCQkkcGF0aFtdID0gKCFlbXB0eSgka2V5c1sn c2VjdGlvbiddKSkKCQkJCT8gJGtleXNbJ3NlY3Rpb24nXQoJCQkJOiAnY2F0ZWdvcnkvJy4k a2V5c1snY2F0ZWdvcnknXTsKCQl9CgoJCWlmIChAJGtleXNbJ2FyZWEnXT09J2NvbW1lbnRz JykKCQkJJHBhdGhbXSA9ICRrZXlzWydhcmVhJ107CgoJCSRwYXRoW10gPSAka2V5c1snZmxh dm9yJ107CgoJCXJldHVybiBodSAuIGpvaW4oJy8nLGFycmF5X2ZpbHRlcigkcGF0aCkpIC4g Jy8nOwoJfQoKLy8gcmV0dXJucyBhcnJheSBjb250YWluaW5nIHBhdGggYW5kIHF1ZXJ5c3Ry aW5nIG9yIFVSSSByZXF1ZXN0Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAlmdW5jdGlvbiBhandfY2xlYW5fZmVl ZF9yZXF1ZXN0KCkKCXsKCQkkc3VicGF0aCA9IHByZWdfcXVvdGUocHJlZ19yZXBsYWNlKCIv aHR0cDpcL1wvLiooXC8uKikvVWkiLCIkMSIsaHUpLCIvIik7CgkJJHJlcSA9IHByZWdfcmVw bGFjZSgiL14kc3VicGF0aC9pIiwiLyIsJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pOwoJCSRy ZXEgPSBleHBsb2RlKCc/JywkcmVxKTsKCQlyZXR1cm4gJHJlcTsKCX0KCi8vIHJldHVybnMg YXJyYXkgY29udGFpbmluZyAvZWFjaC91cmkvcGF0aC92YXJpYWJsZQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglm dW5jdGlvbiBhandfY2xlYW5fZmVlZF9jaG9wKCRyZXE9JycpCgl7CgkJJHJlcSA9IHVybGRl Y29kZShzdHJ0b2xvd2VyKCRyZXEpKTsKCQkvL3N0cmlwIG9mZiBxdWVyeV9zdHJpbmcsIGlm IHByZXNlbnQKCQkkcXMgPSBzdHJwb3MoJHJlcSwnPycpOwoJCWlmICgkcXMpICRyZXEgPSBz dWJzdHIoJHJlcSwgMCwgJHFzKTsKCQkkcmVxID0gcHJlZ19yZXBsYWNlKCcvaW5kZXhcLnBo cCQvJywgJycsICRyZXEpOwoJCSRyZXEgPSBhcnJheV92YWx1ZXMoYXJyYXlfZmlsdGVyKGV4 cGxvZGUoJy8nLCRyZXEpKSk7CgkJcmV0dXJuICRyZXE7Cgl9CgovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5j dGlvbiBhandfY2tFeCgkdGFibGUsJHZhbCwkZGVidWc9JycpCgl7CgkJcmV0dXJuIHNhZmVf ZmllbGQoIm5hbWUiLCd0eHBfJy4kdGFibGUsImBuYW1lYCBsaWtlICciLmRvU2xhc2goJHZh bCkuIicgbGltaXQgMSIsJGRlYnVnKTsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGFqd19s b29rdXBCeVRpdGxlKCR2YWwsJGRlYnVnPScnKQoJewoJICAgIHJldHVybiBzYWZlX2ZpZWxk KCJJRCIsJ3RleHRwYXR0ZXJuJywidXJsX3RpdGxlIGxpa2UgJyIuZG9TbGFzaCgkdmFsKS4i JyBsaW1pdCAxIiwkZGVidWcpOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gYWp3X2xvb2t1 cEJ5VGl0bGVTZWN0aW9uKCR2YWwsJHNlY3Rpb24sJGRlYnVnPScnKQoJewoJCXJldHVybiBz YWZlX2ZpZWxkKCJJRCIsJ3RleHRwYXR0ZXJuJywidXJsX3RpdGxlIGxpa2UgJyIuZG9TbGFz aCgkdmFsKS4iJyBBTkQgU2VjdGlvbj0nJHNlY3Rpb24nIGxpbWl0IDEiLCRkZWJ1Zyk7Cgl9 CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCglmdW5jdGlvbiBhandfbG9va3VwQnlJRCgkaWQsJGRlYnVnPScnKQoJ ewogICAgICAgIHJldHVybiBzYWZlX2ZpZWxkKCJJRCIsJ3RleHRwYXR0ZXJuJywiSUQgPSAn Ii5kb1NsYXNoKCRpZCkuIicgbGltaXQgMSIsJGRlYnVnKTsKCX0KCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1 bmN0aW9uIGFqd19sb29rdXBCeURhdGVUaXRsZSgkd2hlbiwkdGl0bGUsJGRlYnVnPScnKQoJ ewoJCXJldHVybiBzYWZlX3JvdygiSUQsU2VjdGlvbiIsInRleHRwYXR0ZXJuIiwKCQkicG9z dGVkIGxpa2UgJyIuZG9TbGFzaCgkd2hlbikuIiUnIGFuZCB1cmxfdGl0bGUgbGlrZSAnIi5k b1NsYXNoKCR0aXRsZSkuIicgbGltaXQgMSIpOwoJfQoiO3M6ODoiaGVscF9yYXciO3M6MjQz OToiaDIuICphandfY2xlYW5fZmVlZCoKClRoaXMgcGx1Z2luIGV4dGVuZHMgVGV4dHBhdHRl cm4ncyBkZWZhdWx0IEF0b20gJiBSU1MgZnVuY3Rpb25hbGl0eSB0byBhbGxvdyBmb3IgQC9j bGVhbi9mZWVkL3VybHNALiAgIEluY2x1ZGVkIHdpdGggdGhpcyBwbHVnaW4gaXMgdGhlIHRl bXBsYXRlIHRhZyBAYWp3X2NsZWFuX2ZlZWRfbGlua0AgKGRldGFpbGVkIGJlbG93KSwgd2hp Y2ggaXMgdXNlZCBmb3IgZGlzcGxheWluZyBmZWVkIGxpbmtzIGluIHlvdXIgcGFnZSB0ZW1w bGF0ZXMuCgpoMy4gVXNhZ2UKCkFsbCB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgdG8gZW5hYmxl IGNsZWFuIGZlZWQgdXJscyBvbiB5b3VyIHNpdGUgaXMgaW5zdGFsbCAmIGFjdGl2YXRlIHRo aXMgcGx1Z2luLiBSU1MgYW5kIEF0b20gc2hvdWxkIHRoZW4gYmUgYWNjZXNzaWJsZSBhdCBh bnkgQC9jbGVhbi9yc3MvQCBvciBAL2NsZWFuL2F0b20vIHVybC4KCmgzLiBFeGFtcGxlIFVS THMKCiA8c3BhbiBzdHlsZT0ibGluZS1oZWlnaHQ6MThweCI+CiogQXJ0aWNsZXMKKiogQGh0 dHA6Ly9leGFtcGxlLmNvbS9yc3MvQCAoZGVmYXVsdCkKKiogQGh0dHA6Ly9leGFtcGxlLmNv bS9mb28vcnNzL0AgKFJTUyBmb3IgYXJ0aWNsZXMgaW4gc2VjdGlvbiAnZm9vJykKKiogQGh0 dHA6Ly9leGFtcGxlLmNvbS9jYXRlZ29yeS9iYXIvcnNzL0AgKFJTUyBmb3IgYXJ0aWNsZXMg dW5kZXIgY2F0ZWdvcnkgJ2JhcicpCiogTGlua3MKKiogQGh0dHA6Ly9leGFtcGxlLmNvbS9s aW5rL3Jzcy9AIChsaW5rcyBmZWVkKQoqKiBAaHR0cDovL2V4YW1wbGUuY29tL2xpbmsvZm9v L3Jzcy9AIChsaW5rcyBmZWVkIGZvciBsaW5rcyBjYXRlZ29yeSAnZm9vJykKKiBDb21tZW50 cyAgKiI8c3BhbiBzdHlsZT0nY29sb3I6I0NDMDAwMCc+XjFePC9zcGFuPiI6I2ZuMSoKKiog QGh0dHA6Ly9leGFtcGxlLmNvbS95eXl5L21tL2RkL3VybC10aXRsZS9yc3MvQCAoUlNTIGZv ciBjb21tZW50cyBmb3IgYXJ0aWNsZSkKKiogQGh0dHA6Ly9leGFtcGxlLmNvbS9zZWN0aW9u L2lkL3VybC10aXRsZS9yc3MvQCAoUlNTIGZvciBjb21tZW50cyBmb3IgYXJ0aWNsZSkKKiog QGh0dHA6Ly9leGFtcGxlLmNvbS9jb21tZW50cy9yc3MvQCAoUlNTIGZvciBzaXRld2lkZSBj b21tZW50cykKCiA8L3NwYW4+CgoqPHNwYW4gaWQ9ImZuMSIgc3R5bGU9J2NvbG9yOiNDQzAw MDAnPl4xXjwvc3Bhbj4qIDxlbT5SZXF1aXJlcyAiYWp3X2NvbW1lbnRzX2ZlZWQiOmh0dHA6 Ly9jb21wb290ZXIub3JnL2FydGljbGUvMTQwL3RleHRwYXR0ZXJuLXBsdWdpbi1hanctY29t bWVudHMtZmVlZCA8L2VtPgoKaDIuICphandfY2xlYW5fZmVlZF9saW5rKgoKTm93IHRoYXQg eW91IGhhdmUgY2xlYW4gZmVlZHMgd29ya2luZywgeW91IHdpbGwgbmVlZCB0byB1c2UgdGhl IHRlbXBsYXRlIHRhZyBAYWp3X2NsZWFuX2ZlZWRfbGlua0AgaW4gb3JkZXIgdG8gb3V0cHV0 IGxpbmtzIHRvIHNpdGV3aWRlLCBwZXItc2VjdGlvbiwgcGVyLWNhdGVnb3J5LCBjb21tZW50 cywgb3IgbGlua3MgZmVlZHMuICBUaGlzIHRlbXBsYXRlIHRhZyB3b3JrcyBpZGVudGljYWxs eSB0byAiPGNvZGU+ZmVlZF9saW5rPC9jb2RlPiI6aHR0cDovL3RleHRwYXR0ZXJuLm5ldC93 aWtpL2luZGV4LnBocD90aXRsZT1UeHA6ZmVlZF9saW5rXy8gYW5kICI8Y29kZT5saW5rX2Zl ZWRfbGluazwvY29kZT4iOmh0dHA6Ly90ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/ dGl0bGU9VHhwOmxpbmtfZmVlZF9saW5rXy8sIHdpdGggYSBmZXcgYWRkaXRpb25hbCBhdHRy aWJ1dGUgb3B0aW9uczoKCmgzLiBTdGFuZGFyZCBhdHRyaWJ1dGVzOgoKIDxzcGFuIHN0eWxl PSJsaW5lLWhlaWdodDoxOHB4Ij4KKiBsYWJlbAoqIHRpdGxlCiogd3JhcHRhZwoqIGNhdGVn b3J5Ciogc2VjdGlvbgoqIGZsYXZvcgoKIDwvc3Bhbj4KCmgzLiBOb24tc3RhbmRhcmQgYXR0 cmlidXRlczoKCiA8c3BhbiBzdHlsZT0ibGluZS1oZWlnaHQ6MThweCI+CiogQGFyZWFACioq IEEgdGVtcGxhdGUgdGFnIHVzaW5nIEBhcmVhPSJsaW5rIkAgd2lsbCBvdXRwdXQgYSBjbGVh biBmZWVkIGxpbmsgdG8geW91ciBzaXRlJ3MgbGlua3MgbG9nLgoqIEBzaXRld2lkZUAKKiog KHl8bikgU2V0dGluZyB0aGlzIHRvICd5JyB3aWxsIGFsd2F5cyBvdXRwdXQgYSAic2l0ZXdp ZGUiIGZlZWQgbGluayBpbiB0aGUgZm9ybWF0IEBodHRwOi8vZXhhbXBsZS5jb20vcnNzL0Ag b3IgQGh0dHA6Ly9leGFtcGxlLmNvbS9hdG9tL0AsIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbnRl eHQgb2YgdGhlIHRlbXBsYXRlIHRhZy4KKiBAdXJsX29ubHlACioqICh5fG4pIFNldHRpbmcg dGhpcyB0byAneScgd2lsbCBvdXRwdXQgb25seSB0aGUgZmVlZCB1cmwsIGZvciB1c2UgaW4g IGF1dG9kaXNjb3ZlcnkgQDxsaW5rPkAgdGFncyBpbiB0aGUgaGVhZCBvZiB5b3VyIHdlYnBh Z2UuCiA8L3NwYW4+IjtzOjM6Im1kNSI7czozMjoiZmZiYmZlNzVjNWVkZjI2ZDIyYzhiOTA0 MDZkMmE4MzgiO3M6ODoiY29tcHJlc3MiO2I6MDt9