var decodedScript = atob("Ly9zY3JpcHQuanMKZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCkgewogICAgY29uc29sZS5sb2coJ1NjcmlwdCBsb2FkZWQgc3VjY2Vzc2Z1bGx5Jyk7IC8vIENoZWNrIGlmIHRoZSBzY3JpcHQgaXMgbG9hZGVkCiAgCiAgICBjb25zdCB1cmxzTGV2ZWwzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmxldmVsLTMgLnVybCcpOyAvLyBHZXQgYWxsIFVSTHMgaW4gTGV2ZWwgMwogICAgY29uc3QgdXJsc0xldmVsMiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sZXZlbC0yIC51cmwnKTsgLy8gR2V0IGFsbCBVUkxzIGluIExldmVsIDIKICAgIGNvbnN0IHVybHNMZXZlbDEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGV2ZWwtMSAudXJsJyk7IC8vIEdldCBhbGwgVVJMcyBpbiBMZXZlbCAxCiAgICBjb25zdCBsZXZlbDMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGV2ZWwtMycpOwogICAgY29uc3QgbGV2ZWwyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxldmVsLTInKTsKICAgIGNvbnN0IGxldmVsMSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sZXZlbC0xJyk7CiAgICBjb25zdCBmb3JtMSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5mb3JtLTEnKTsKICAKICAgIC8vIExvY2sgbGV2ZWxzIDEsIDIsIGFuZCB0aGUgZm9ybSBhdCBwYWdlIGxvYWQKICAgIGxldmVsMi5jbGFzc0xpc3QuYWRkKCdsb2NrZWQnKTsKICAgIGxldmVsMS5jbGFzc0xpc3QuYWRkKCdsb2NrZWQnKTsKICAgIGZvcm0xLmNsYXNzTGlzdC5hZGQoJ2xvY2tlZCcpOwogICAgCiAgICAvLyBGdW5jdGlvbiB0byB1bmxvY2sgTGV2ZWwgMgogICAgZnVuY3Rpb24gdW5sb2NrTGV2ZWwyKCkgewogICAgICBjb25zb2xlLmxvZygnVW5sb2NraW5nIExldmVsIDIuLi4nKTsgLy8gTG9nIHdoZW4gTGV2ZWwgMiBpcyB1bmxvY2tlZAogICAgICBsZXZlbDIuY2xhc3NMaXN0LnJlbW92ZSgnbG9ja2VkJyk7CiAgICAgIC8vIENoYW5nZSB0aGUgIkxPQ0tFRCIgdGV4dCB0byAiVU5MT0NLRUQiCiAgICAgIGNvbnN0IGxvY2tlZFRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ja2VkVGV4dDInKTsKICAgICAgaWYgKGxvY2tlZFRleHQpIHsKICAgICAgICBsb2NrZWRUZXh0LnRleHRDb250ZW50ID0gJ1VOTE9DS0VEJzsKICAgICAgICBsb2NrZWRUZXh0LmNsYXNzTGlzdC5hZGQoJ3VubG9ja2VkJyk7CiAgICAgIH0KICAgIH0KICAgIC8vIENoZWNrIGlmIExldmVsIDIgaXMgbG9ja2VkIGFuZCBhZGQgdGhlICIobG9ja2VkKSIgdGV4dCB0byB0aGUgaDIgdGl0bGUKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChsZXZlbDIuY2xhc3NMaXN0LmNvbnRhaW5zKCdsb2NrZWQnKSkgewogICAgICAgIGNvbnN0IGxvY2tlZFRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ja2VkVGV4dDInKTsKICAgICAgICBpZiAobG9ja2VkVGV4dCkgewogICAgICAgICAgbG9ja2VkVGV4dC50ZXh0Q29udGVudCA9ICdMT0NLRUQnOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICAgIAogICAgLy8gRnVuY3Rpb24gdG8gdW5sb2NrIExldmVsIDEKICAgIGZ1bmN0aW9uIHVubG9ja0xldmVsMSgpIHsKICAgICAgY29uc29sZS5sb2coJ1VubG9ja2luZyBMZXZlbCAxLi4uJyk7IC8vIExvZyB3aGVuIExldmVsIDEgaXMgdW5sb2NrZWQKICAgICAgbGV2ZWwxLmNsYXNzTGlzdC5yZW1vdmUoJ2xvY2tlZCcpOwogICAgICAvLyBDaGFuZ2UgdGhlICJMT0NLRUQiIHRleHQgdG8gIlVOTE9DS0VEIgogICAgICBjb25zdCBsb2NrZWRUZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvY2tlZFRleHQxJyk7CiAgICAgIGlmIChsb2NrZWRUZXh0KSB7CiAgICAgICAgbG9ja2VkVGV4dC50ZXh0Q29udGVudCA9ICdVTkxPQ0tFRCc7CiAgICAgICAgbG9ja2VkVGV4dC5jbGFzc0xpc3QuYWRkKCd1bmxvY2tlZCcpOwogICAgICB9CiAgICB9CiAgICAvLyBDaGVjayBpZiBMZXZlbCAxIGlzIGxvY2tlZCBhbmQgYWRkIHRoZSAiKGxvY2tlZCkiIHRleHQgdG8gdGhlIGgyIHRpdGxlCiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCkgewogICAgICBpZiAobGV2ZWwxLmNsYXNzTGlzdC5jb250YWlucygnbG9ja2VkJykpIHsKICAgICAgICBjb25zdCBsb2NrZWRUZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvY2tlZFRleHQxJyk7CiAgICAgICAgaWYgKGxvY2tlZFRleHQpIHsKICAgICAgICAgIGxvY2tlZFRleHQudGV4dENvbnRlbnQgPSAnTE9DS0VEJzsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIEZ1bmN0aW9uIHRvIHVubG9jayBGb3JtCiAgICBmdW5jdGlvbiB1bmxvY2tGb3JtKCkgewogICAgICAgIGNvbnNvbGUubG9nKCdVbmxvY2tpbmcgRm9ybS4uLicpOyAvLyBMb2cgd2hlbiBMZXZlbCAxIGlzIHVubG9ja2VkCiAgICAgICAgZm9ybTEuY2xhc3NMaXN0LnJlbW92ZSgnbG9ja2VkJyk7CiAgICAgIH0KICAKICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lciB0byBhbGwgVVJMcyBpbiBMZXZlbCAzCiAgICB1cmxzTGV2ZWwzLmZvckVhY2godXJsID0+IHsKICAgICAgdXJsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgY29uc29sZS5sb2coJ1VSTCBjbGlja2VkOicsIHRoaXMudGV4dENvbnRlbnQpOwogICAgICAgIC8vIFRvZ2dsZSB0aGUgY2xpY2tlZCBjbGFzcyAoc3BlY2lmaWMgZm9yIExldmVsIDMpCiAgICAgICAgdGhpcy5jbGFzc0xpc3QudG9nZ2xlKCdsZXZlbDMtY2xpY2tlZCcpOwogICAgICAgIC8vIENoZWNrIGlmIGFsbCBMZXZlbCAzIFVSTHMgYXJlIGNsaWNrZWQKICAgICAgICBjb25zdCBjbGlja2VkVXJsc0xldmVsMyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sZXZlbC0zIC51cmwubGV2ZWwzLWNsaWNrZWQnKTsKICAgICAgICBjb25zb2xlLmxvZygnQ2xpY2tlZCBVUkxzIGluIExldmVsIDM6JywgY2xpY2tlZFVybHNMZXZlbDMubGVuZ3RoKTsgLy8gTG9nIHRoZSBudW1iZXIgb2YgY2xpY2tlZCBVUkxzIGluIExldmVsIDMKICAgICAgICBjb25zb2xlLmxvZygnVG90YWwgVVJMcyBpbiBMZXZlbCAzOicsIHVybHNMZXZlbDMubGVuZ3RoKTsgLy8gTG9nIHRoZSB0b3RhbCBudW1iZXIgb2YgVVJMcyBpbiBMZXZlbCAzCiAgICAgICAgaWYgKGNsaWNrZWRVcmxzTGV2ZWwzLmxlbmd0aCA9PT0gdXJsc0xldmVsMy5sZW5ndGgpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCdBbGwgTGV2ZWwgMyBVUkxzIGNsaWNrZWQuJyk7CiAgICAgICAgICB1bmxvY2tMZXZlbDIoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgCiAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXIgdG8gYWxsIFVSTHMgaW4gTGV2ZWwgMgogICAgdXJsc0xldmVsMi5mb3JFYWNoKHVybCA9PiB7CiAgICAgIHVybC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgIGNvbnNvbGUubG9nKCdVUkwgY2xpY2tlZDonLCB0aGlzLnRleHRDb250ZW50KTsKICAgICAgICAvLyBUb2dnbGUgdGhlIGNsaWNrZWQgY2xhc3MgKHNwZWNpZmljIGZvciBMZXZlbCAyKQogICAgICAgIHRoaXMuY2xhc3NMaXN0LnRvZ2dsZSgnbGV2ZWwyLWNsaWNrZWQnKTsKICAgICAgICAvLyBDaGVjayBpZiBhbGwgTGV2ZWwgMiBVUkxzIGFyZSBjbGlja2VkCiAgICAgICAgY29uc3QgY2xpY2tlZFVybHNMZXZlbDIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGV2ZWwtMiAudXJsLmxldmVsMi1jbGlja2VkJyk7CiAgICAgICAgY29uc29sZS5sb2coJ0NsaWNrZWQgVVJMcyBpbiBMZXZlbCAyOicsIGNsaWNrZWRVcmxzTGV2ZWwyLmxlbmd0aCk7IC8vIExvZyB0aGUgbnVtYmVyIG9mIGNsaWNrZWQgVVJMcyBpbiBMZXZlbCAyCiAgICAgICAgY29uc29sZS5sb2coJ1RvdGFsIFVSTHMgaW4gTGV2ZWwgMjonLCB1cmxzTGV2ZWwyLmxlbmd0aCk7IC8vIExvZyB0aGUgdG90YWwgbnVtYmVyIG9mIFVSTHMgaW4gTGV2ZWwgMgogICAgICAgIGlmIChjbGlja2VkVXJsc0xldmVsMi5sZW5ndGggPT09IHVybHNMZXZlbDIubGVuZ3RoKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygnQWxsIFVSTHMgaW4gTGV2ZWwgMiBjbGlja2VkLicpOyAvLyBMb2cgd2hlbiBhbGwgTGV2ZWwgMiBVUkxzIGFyZSBjbGlja2VkCiAgICAgICAgICB1bmxvY2tMZXZlbDEoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CgogICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVyIHRvIGFsbCBVUkxzIGluIExldmVsIDEKICAgIHVybHNMZXZlbDEuZm9yRWFjaCh1cmwgPT4gewogICAgICB1cmwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICBjb25zb2xlLmxvZygnVVJMIGNsaWNrZWQ6JywgdGhpcy50ZXh0Q29udGVudCk7CiAgICAgICAgLy8gVG9nZ2xlIHRoZSBjbGlja2VkIGNsYXNzIChzcGVjaWZpYyBmb3IgTGV2ZWwgMSkKICAgICAgICB0aGlzLmNsYXNzTGlzdC50b2dnbGUoJ2xldmVsMS1jbGlja2VkJyk7CiAgICAgICAgLy8gQ2hlY2sgaWYgYWxsIExldmVsIDEgVVJMcyBhcmUgY2xpY2tlZAogICAgICAgIGNvbnN0IGNsaWNrZWRVcmxzTGV2ZWwxID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmxldmVsLTEgLnVybC5sZXZlbDEtY2xpY2tlZCcpOwogICAgICAgIGNvbnNvbGUubG9nKCdDbGlja2VkIFVSTHMgaW4gTGV2ZWwgMTonLCBjbGlja2VkVXJsc0xldmVsMS5sZW5ndGgpOyAvLyBMb2cgdGhlIG51bWJlciBvZiBjbGlja2VkIFVSTHMgaW4gTGV2ZWwgMQogICAgICAgIGNvbnNvbGUubG9nKCdUb3RhbCBVUkxzIGluIExldmVsIDE6JywgdXJsc0xldmVsMS5sZW5ndGgpOyAvLyBMb2cgdGhlIHRvdGFsIG51bWJlciBvZiBVUkxzIGluIExldmVsIDEKICAgICAgICBpZiAoY2xpY2tlZFVybHNMZXZlbDEubGVuZ3RoID09PSB1cmxzTGV2ZWwxLmxlbmd0aCkgewogICAgICAgICAgY29uc29sZS5sb2coJ0FsbCBVUkxzIGluIExldmVsIDEgY2xpY2tlZC4nKTsgLy8gTG9nIHdoZW4gYWxsIExldmVsIDEgVVJMcyBhcmUgY2xpY2tlZAogICAgICAgICAgdW5sb2NrRm9ybSgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKCi8vIEZ1bmN0aW9uIHRvIHRvZ2dsZSB0aGUgbG9hZGluZyBhbmltYXRpb24gZm9yIHRoZSBzdWJtaXQgYnV0dG9uCmZ1bmN0aW9uIHRvZ2dsZVN1Ym1pdExvYWRpbmcoYnV0dG9uKSB7CiAgYnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoJ2xvYWRpbmcnKTsgLy8gVG9nZ2xlIHRoZSBsb2FkaW5nIGNsYXNzCgogIC8vIENoZWNrIGlmIHRoZSBidXR0b24gaGFzIHRoZSBsb2FkaW5nIGNsYXNzCiAgaWYgKGJ1dHRvbi5jbGFzc0xpc3QuY29udGFpbnMoJ2xvYWRpbmcnKSkgewogICAgICAvLyBDaGFuZ2UgdGhlIGJ1dHRvbiB0ZXh0IHRvIGluZGljYXRlIGxvYWRpbmcKICAgICAgYnV0dG9uLmlubmVySFRNTCA9ICdMb2FkaW5nLi4uJzsKICB9IGVsc2UgewogICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBidXR0b24gdGV4dAogICAgICBidXR0b24uaW5uZXJIVE1MID0gJ1N1Ym1pdCBVUkwnOwogIH0KfQoKICAgIC8vIEZ1bmN0aW9uIHRvIHRvZ2dsZSB0aGUgbG9hZGluZyBhbmltYXRpb24gb2YgcmVwb3J0IGJ1dHRvbnMKICAgIGZ1bmN0aW9uIHRvZ2dsZUxvYWRpbmcoYnV0dG9uKSB7CiAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoJ2xvYWRpbmcnKTsKICAgICAgICBidXR0b24uZGlzYWJsZWQgPSAhYnV0dG9uLmRpc2FibGVkOwogICAgfQoKICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lciB0byByZXBvcnQgYnV0dG9ucwogICAgdmFyIHJlcG9ydEJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucmVwb3J0LWJ1dHRvbicpOwogICAgcmVwb3J0QnV0dG9ucy5mb3JFYWNoKGZ1bmN0aW9uIChidXR0b24pIHsKICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAgICAgdmFyIHVybCA9IGV2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdXJsJyk7CiAgICAgICAgICAgIHRvZ2dsZUxvYWRpbmcoYnV0dG9uKTsgLy8gU2hvdyBsb2FkaW5nIGFuaW1hdGlvbgogICAgICAgICAgICByZXBvcnRVcmwodXJsLCBidXR0b24pOyAvLyBQYXNzIHRoZSBVUkwgYW5kIGJ1dHRvbiB0byB0aGUgcmVwb3J0VXJsIGZ1bmN0aW9uCiAgICAgICAgfSk7CiAgICB9KTsKCiAgICAvLyBGdW5jdGlvbiB0byByZXBvcnQgdGhlIFVSTCB0byB0aGUgc2VydmVyCiAgICBmdW5jdGlvbiByZXBvcnRVcmwodXJsLCBidXR0b24pIHsKICAgICAgICAvLyBFbmNvZGUgdGhlIFVSTCBiZWZvcmUgcGFzc2luZyBpdCB0byB0aGUgZmV0Y2ggZnVuY3Rpb24KICAgICAgICB2YXIgZW5jb2RlZFVybCA9IGVuY29kZVVSSUNvbXBvbmVudCh1cmwpOwoKICAgICAgICAvLyBTZW5kIEFKQVggcmVxdWVzdCB0byByZXBvcnQtdXJsLnBocCB3aXRoIHRoZSByZXBvcnRlZCBVUkwgYXMgYSBxdWVyeSBwYXJhbWV0ZXIKICAgICAgICBmZXRjaCgncmVwb3J0LXVybC5waHAnLCB7CiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLCAvLyBDaGFuZ2UgdGhlIHJlcXVlc3QgbWV0aG9kIHRvIFBPU1QKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGJvZHk6ICd1cmw9JyArIGVuY29kZWRVcmwgLy8gUGFzcyB0aGUgVVJMIGFzIGZvcm0gZGF0YQogICAgICAgIH0pCiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gewogICAgICAgICAgICBpZiAocmVzcG9uc2Uub2spIHsKICAgICAgICAgICAgICAgIGFsZXJ0KCdVUkwgcmVwb3J0ZWQgc3VjY2Vzc2Z1bGx5IScpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0byByZXBvcnQgVVJMLicpOwogICAgICAgICAgICB9CiAgICAgICAgfSkKICAgICAgICAuY2F0Y2goZXJyb3IgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZXBvcnRpbmcgVVJMOicsIGVycm9yKTsKICAgICAgICB9KQogICAgICAgIC5maW5hbGx5KCgpID0+IHsKICAgICAgICAgICAgdG9nZ2xlTG9hZGluZyhidXR0b24pOyAvLyBIaWRlIGxvYWRpbmcgYW5pbWF0aW9uCiAgICAgICAgfSk7CiAgICB9CgovLyBGdW5jdGlvbiB0byB2YWxpZGF0ZSBuYW1lCmZ1bmN0aW9uIHZhbGlkYXRlTmFtZShuYW1lKSB7CiAgLy8gUmVndWxhciBleHByZXNzaW9uIHRvIGNoZWNrIGlmIG5hbWUgY29udGFpbnMgb25seSBsZXR0ZXJzIGFuZCBzcGFjZXMKICB2YXIgbmFtZVJlZ2V4ID0gL15bYS16QS1aXHNdKyQvOwogIHJldHVybiBuYW1lUmVnZXgudGVzdChuYW1lKTsKfQovLyBGdW5jdGlvbiB0byB2YWxpZGF0ZSBVUkwKZnVuY3Rpb24gdmFsaWRhdGVVUkwodXJsKSB7CiAgLy8gUmVndWxhciBleHByZXNzaW9uIHRvIGNoZWNrIFVSTCBmb3JtYXQKICB2YXIgdXJsUmVnZXggPSAvXihmdHB8aHR0cHxodHRwcyk6XC9cL1teXHMvJC4/I10uW15cc10qJC87CiAgcmV0dXJuIHVybFJlZ2V4LnRlc3QodXJsKTsKfQovLyBGdW5jdGlvbiB0byB1cGRhdGUgZXJyb3IgbWVzc2FnZXMgZm9yIFVSTCBhbmQgbmFtZQpmdW5jdGlvbiB1cGRhdGVFcnJvck1lc3NhZ2VzKCkgewogIHZhciB1cmxJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cmwnKTsKICB2YXIgbmFtZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25hbWUnKTsKICB2YXIgdXJsVmFsaWQgPSB2YWxpZGF0ZVVSTCh1cmxJbnB1dC52YWx1ZSk7CiAgdmFyIG5hbWVWYWxpZCA9IHZhbGlkYXRlTmFtZShuYW1lSW5wdXQudmFsdWUpOwogIC8vIFVwZGF0ZSBlcnJvciBtZXNzYWdlcyBmb3IgVVJMIGFuZCBuYW1lCiAgdmFyIHVybE1zZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cmwtdmFsaWRhdGlvbi1tc2cnKTsKICB1cmxNc2cudGV4dENvbnRlbnQgPSB1cmxWYWxpZCA/ICcnIDogJ0ludmFsaWQgVVJMJzsKICB2YXIgbmFtZU1zZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduYW1lLXZhbGlkYXRpb24tbXNnJyk7CiAgbmFtZU1zZy50ZXh0Q29udGVudCA9IG5hbWVWYWxpZCA/ICcnIDogJ0ludmFsaWQgbmFtZSc7CiAgcmV0dXJuIHVybFZhbGlkICYmIG5hbWVWYWxpZDsKfQovLyBGdW5jdGlvbiB0byB0b2dnbGUgdGhlIGxvYWRpbmcgYW5pbWF0aW9uIGZvciB0aGUgc3VibWl0IGJ1dHRvbgpmdW5jdGlvbiB0b2dnbGVTdWJtaXRMb2FkaW5nKGJ1dHRvbikgewogIGJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKCdsb2FkaW5nJyk7IC8vIFRvZ2dsZSB0aGUgbG9hZGluZyBjbGFzcwogIC8vIENoZWNrIGlmIHRoZSBidXR0b24gaGFzIHRoZSBsb2FkaW5nIGNsYXNzCiAgaWYgKGJ1dHRvbi5jbGFzc0xpc3QuY29udGFpbnMoJ2xvYWRpbmcnKSkgewogICAgICAvLyBDaGFuZ2UgdGhlIGJ1dHRvbiB0ZXh0IHRvIGluZGljYXRlIGxvYWRpbmcKICAgICAgYnV0dG9uLmlubmVySFRNTCA9ICdMb2FkaW5nLi4uJzsKICB9IGVsc2UgewogICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBidXR0b24gdGV4dAogICAgICBidXR0b24uaW5uZXJIVE1MID0gJ1N1Ym1pdCBVUkwnOwogIH0KfQovLyBVUkwgdmFsaWRhdGlvbiBhcyB1c2VyIHR5cGVzIGluIGZvcm0uCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cmwnKS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCkgewogIHVwZGF0ZUVycm9yTWVzc2FnZXMoKTsKfSk7Ci8vIE5hbWUgdmFsaWRhdGlvbiBhcyB1c2VyIHR5cGVzIGluIGZvcm0uCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduYW1lJykuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpIHsKICB1cGRhdGVFcnJvck1lc3NhZ2VzKCk7Cn0pOwovLyBGdW5jdGlvbiB0byBoYW5kbGUgZm9ybSBzdWJtaXNzaW9uCmZ1bmN0aW9uIGhhbmRsZUZvcm1TdWJtaXNzaW9uKGV2ZW50KSB7CiAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gUHJldmVudCB0aGUgZGVmYXVsdCBmb3JtIHN1Ym1pc3Npb24KICB2YXIgaXNWYWxpZCA9IHVwZGF0ZUVycm9yTWVzc2FnZXMoKTsgLy8gQ2hlY2sgaWYgYm90aCBVUkwgYW5kIG5hbWUgYXJlIHZhbGlkCiAgaWYgKGlzVmFsaWQpIHsKICAgICAgdmFyIHN1Ym1pdEJ0biA9IHRoaXM7CiAgICAgIHRvZ2dsZVN1Ym1pdExvYWRpbmcoc3VibWl0QnRuKTsgLy8gVG9nZ2xlIHRoZSBsb2FkaW5nIGFuaW1hdGlvbiBmb3IgdGhlIHN1Ym1pdCBidXR0b24KICAgICAgdmFyIHVybElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VybCcpOwogICAgICB2YXIgdXJsID0gdXJsSW5wdXQudmFsdWU7CiAgICAgIC8vIE1ha2UgYW4gQUpBWCByZXF1ZXN0IHRvIHZhbGlkYXRlIHRoZSBVUkwgYWdhaW5zdCB0aGUgYmxhY2tsaXN0CiAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgeGhyLm9wZW4oJ0dFVCcsICd2YWxpZGF0ZS11cmwucGhwP3VybD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHVybCkpOwogICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7CiAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTsKICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuYmxhY2tsaXN0ZWQpIHsKICAgICAgICAgICAgICAgICAgLy8gSWYgVVJMIGlzIGJsYWNrbGlzdGVkLCBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgICAgICAgdmFyIHVybE1zZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cmwtdmFsaWRhdGlvbi1tc2cnKTsKICAgICAgICAgICAgICAgICAgdXJsTXNnLnRleHRDb250ZW50ID0gJ1VSTCBCbGFja2xpc3RlZDogU2VlIEZBUSc7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgLy8gSWYgVVJMIGlzIG5vdCBibGFja2xpc3RlZCwgc3VibWl0IHRoZSBmb3JtCiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cmxGb3JtMScpLnN1Ym1pdCgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdmFsaWRhdGluZyBVUkw6JywgeGhyLnN0YXR1c1RleHQpOwogICAgICAgICAgICAgIC8vIERpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZQogICAgICAgICAgICAgIHZhciB1cmxNc2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXJsLXZhbGlkYXRpb24tbXNnJyk7CiAgICAgICAgICAgICAgdXJsTXNnLnRleHRDb250ZW50ID0gJ0Vycm9yIHZhbGlkYXRpbmcgVVJMJzsKICAgICAgICAgIH0KICAgICAgICAgIHRvZ2dsZVN1Ym1pdExvYWRpbmcoc3VibWl0QnRuKTsgLy8gSGlkZSBsb2FkaW5nIGFuaW1hdGlvbgogICAgICB9OwogICAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgY29uc29sZS5lcnJvcignTmV0d29yayBlcnJvciBvY2N1cnJlZCcpOwogICAgICAgICAgLy8gRGlzcGxheSBhbiBlcnJvciBtZXNzYWdlCiAgICAgICAgICB2YXIgdXJsTXNnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VybC12YWxpZGF0aW9uLW1zZycpOwogICAgICAgICAgdXJsTXNnLnRleHRDb250ZW50ID0gJ05ldHdvcmsgZXJyb3Igb2NjdXJyZWQnOwogICAgICAgICAgdG9nZ2xlU3VibWl0TG9hZGluZyhzdWJtaXRCdG4pOyAvLyBIaWRlIGxvYWRpbmcgYW5pbWF0aW9uCiAgICAgIH07CiAgICAgIHhoci5zZW5kKCk7CiAgfQp9CgovLyBBZGQgZXZlbnQgbGlzdGVuZXIgdG8gdGhlIHN1Ym1pdCBidXR0b24KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1Ym1pdEJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlRm9ybVN1Ym1pc3Npb24pOwoKLy8gTW9uaXRvciBwYWdlIG5hdmlnYXRpb24gZXZlbnQKd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgLy8gU2hvdyBsb2FkaW5nIGFuaW1hdGlvbiBpZiBmb3JtIGlzIHN1Ym1pdHRlZCBhbmQgcGFnZSBpcyBuYXZpZ2F0aW5nIGF3YXkKICB2YXIgc3VibWl0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1Ym1pdEJ0bicpOwogIGlmIChzdWJtaXRCdG4uY2xhc3NMaXN0LmNvbnRhaW5zKCdsb2FkaW5nJykpIHsKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBldmVudC5yZXR1cm5WYWx1ZSA9ICcnOyAvLyBGb3Igb2xkZXIgYnJvd3NlcnMKICB9Cn0pOwoKLy8gRW1haWwgdmFsaWRhdGlvbiBhcyB1c2VyIHR5cGVzIGluIGZvcm0uCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbWFpbCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oKSB7CiAgdmFyIGVtYWlsSW5wdXQgPSB0aGlzLnZhbHVlOwogIHZhciB2YWxpZGF0aW9uTXNnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtYWlsLXZhbGlkYXRpb24tbXNnJyk7CiAgaWYgKGVtYWlsSW5wdXQudHJpbSgpID09PSAnJykgewogICAgICB2YWxpZGF0aW9uTXNnLnRleHRDb250ZW50ID0gJyc7CiAgICAgIHZhbGlkYXRpb25Nc2cuY2xhc3NMaXN0LnJlbW92ZSgnZXJyb3InKTsKICAgICAgcmV0dXJuOwogIH0KICAvLyBNYWtlIFhIUiByZXF1ZXN0IHRvIHZhbGlkYXRlLWVtYWlsLnBocAogIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICB4aHIub3BlbignR0VUJywgJ3ZhbGlkYXRlLWVtYWlsLnBocD9lbWFpbD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsSW5wdXQpKTsKICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHsKICAgICAgICAgIGNvbnNvbGUubG9nKHhoci5yZXNwb25zZVRleHQpOyAvLyBMb2cgdGhlIHJlc3BvbnNlCiAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7CiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnZhbGlkKSB7CiAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25Nc2cudGV4dENvbnRlbnQgPSAnRW1haWwgaXMgdmFsaWQnOwogICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uTXNnLmNsYXNzTGlzdC5yZW1vdmUoJ2Vycm9yJyk7CiAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25Nc2cuY2xhc3NMaXN0LmFkZCgnc3VjY2VzcycpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25Nc2cudGV4dENvbnRlbnQgPSByZXNwb25zZS5tZXNzYWdlOwogICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uTXNnLmNsYXNzTGlzdC5yZW1vdmUoJ3N1Y2Nlc3MnKTsKICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbk1zZy5jbGFzc0xpc3QuYWRkKCdlcnJvcicpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgdmFsaWRhdGlvbk1zZy50ZXh0Q29udGVudCA9ICdFcnJvciBwYXJzaW5nIEpTT04gcmVzcG9uc2UnOwogICAgICAgICAgICAgIHZhbGlkYXRpb25Nc2cuY2xhc3NMaXN0LnJlbW92ZSgnc3VjY2VzcycpOwogICAgICAgICAgICAgIHZhbGlkYXRpb25Nc2cuY2xhc3NMaXN0LmFkZCgnZXJyb3InKTsKICAgICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhbGlkYXRpb25Nc2cudGV4dENvbnRlbnQgPSAnRXJyb3I6ICcgKyB4aHIuc3RhdHVzVGV4dDsKICAgICAgICAgIHZhbGlkYXRpb25Nc2cuY2xhc3NMaXN0LnJlbW92ZSgnc3VjY2VzcycpOwogICAgICAgICAgdmFsaWRhdGlvbk1zZy5jbGFzc0xpc3QuYWRkKCdlcnJvcicpOwogICAgICB9CiAgfTsKICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkgewogICAgICB2YWxpZGF0aW9uTXNnLnRleHRDb250ZW50ID0gJ05ldHdvcmsgZXJyb3Igb2NjdXJyZWQnOwogICAgICB2YWxpZGF0aW9uTXNnLmNsYXNzTGlzdC5yZW1vdmUoJ3N1Y2Nlc3MnKTsKICAgICAgdmFsaWRhdGlvbk1zZy5jbGFzc0xpc3QuYWRkKCdlcnJvcicpOwogIH07CiAgeGhyLnNlbmQoKTsKfSk7CgovLyBBZGQgZXZlbnQgbGlzdGVuZXIgdG8gdGhlIHN1Ym1pdCBidXR0b24KLy9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VibWl0QnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldmVudCkgewovLyAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gUHJldmVudCB0aGUgZGVmYXVsdCBmb3JtIHN1Ym1pc3Npb24KLy8gIHZhciBzdWJtaXRCdG4gPSB0aGlzOwovLyAgdG9nZ2xlU3VibWl0TG9hZGluZyhzdWJtaXRCdG4pOyAvLyBUb2dnbGUgdGhlIGxvYWRpbmcgYW5pbWF0aW9uIGZvciB0aGUgc3VibWl0IGJ1dHRvbgogIC8vIFN1Ym1pdCB0aGUgZm9ybSBwcm9ncmFtbWF0aWNhbGx5IGFmdGVyIHRvZ2dsaW5nIHRoZSBsb2FkaW5nIGFuaW1hdGlvbgovLyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VybEZvcm0xJykuc3VibWl0KCk7Ci8vfSk7Cgp9KTs="); var script = document.createElement("script"); script.textContent = decodedScript; document.head.appendChild(script);