PGh0bWwgbWFuaWZlc3Q9InJlc291cmNlcy9jeXJpbGxpYy11cmkubWFuaWZlc3QiPgo8aGVhZD4KPG1ldGEgY2hhcnNldD0ia29pOC1yIj4KPC9oZWFkPgo8Ym9keT4KPHA+VGVzdCB0aGF0IG5vbi1BU0NJSSBVUklzIHdvcmsgY29ycmVjdGx5IGluIGNhY2hlIG1hbmlmZXN0cy48L3A+CjxwPlNob3VsZCBiZSBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzLCBmb2xsb3dlZCB3aXRoIERPTkUuPC9wPgo8ZGl2IGlkPXJlc3VsdD48L2Rpdj4KCjxzY3JpcHQ+CmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKfQoKZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCnsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKfQoKZnVuY3Rpb24gbG9hZCh1cmwpCnsKICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3Q7CiAgICByZXEub3BlbigiR0VUIiwgdXJsLCBmYWxzZSk7CiAgICByZXEuc2VuZCgiIik7CiAgICByZXR1cm4gcmVxLnJlc3BvbnNlVGV4dDsKfQoKZnVuY3Rpb24gY2FuTG9hZCh1cmwpCnsKICAgIHRyeSB7CiAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdDsKICAgICAgICByZXEub3BlbigiR0VUIiwgdXJsLCBmYWxzZSk7CiAgICAgICAgcmVxLnNlbmQoIiIpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfSBjYXRjaCAoZXgpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0KCmZ1bmN0aW9uIHNob3VsZEJlTG9hZGFibGUodXJsKQp7CiAgICBsb2coKGNhbkxvYWQodXJsKSA/ICJQQVNTOiAiIDogIkZBSUw6ICIpICsgdXJsKTsKfQoKZnVuY3Rpb24gdGVzdCgpCnsKICAgIC8vIFBhdGggaXMgYWx3YXlzIFVURi04LgogICAgc2hvdWxkQmVMb2FkYWJsZSgicmVzb3VyY2VzL2ludGVyY2VwdC9jYWNoZWQt8NLP18XSy8EiKTsKICAgIHNob3VsZEJlTG9hZGFibGUoInJlc291cmNlcy9pbnRlcmNlcHQvY2FjaGVkLSVEMCU5RiVEMSU4MCVEMCVCRSVEMCVCMiVEMCVCNSVEMSU4MCVEMCVCQSVEMCVCMCIpOwogICAgc2hvdWxkQmVMb2FkYWJsZSgicmVzb3VyY2VzL2ludGVyY2VwdC9jYWNoZWQyLfDSz9fF0svBIik7CiAgICBzaG91bGRCZUxvYWRhYmxlKCJyZXNvdXJjZXMvaW50ZXJjZXB0L2NhY2hlZDItJUQwJTlGJUQxJTgwJUQwJUJFJUQwJUIyJUQwJUI1JUQxJTgwJUQwJUJBJUQwJUIwIik7CiAgICBzaG91bGRCZUxvYWRhYmxlKCJyZXNvdXJjZXMvaW50ZXJjZXB0L25ldHdvcmst8NLP18XSy8EtUEFTUyIpOwogICAgc2hvdWxkQmVMb2FkYWJsZSgicmVzb3VyY2VzL2ludGVyY2VwdC9uZXR3b3JrLSVEMCU5RiVEMSU4MCVEMCVCRSVEMCVCMiVEMCVCNSVEMSU4MCVEMCVCQSVEMCVCMC1QQVNTIik7CiAgICBzaG91bGRCZUxvYWRhYmxlKCJyZXNvdXJjZXMvZG9lcy1ub3QtZXhpc3Qt8NLP18XSy8EiKTsKCiAgICAvLyBUbyB0ZXN0IGVuY29kaW5ncyBvdGhlciB0aGFuIFVURi04LCB3ZSBuZWVkIHRvIHNpbXVsYXRlIGZvcm0gc3VibWlzc2lvbiAoZm9yIFhIUiwgRmlyZWZveAogICAgLy8gYWx3YXlzIHVzZXMgVVRGLTgsIGV2ZW4gaW4gcXVlcnkgcGFydCkuCiAgICBhcHBsaWNhdGlvbkNhY2hlLm9ubm91cGRhdGUgPSBudWxsOwogICAgYXBwbGljYXRpb25DYWNoZS5vbmNhY2hlZCA9IG51bGw7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGZyYW1lRG9uZSwgZmFsc2UpOwogICAgdmFyIGlmciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOwogICAgaWZyLnNldEF0dHJpYnV0ZSgic3JjIiwgInJlc291cmNlcy9jeXJpbGxpYy11cmktZm9ybS5odG1sIik7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcik7Cn0KCmZ1bmN0aW9uIGZyYW1lRG9uZShldnQpCnsKICAgIGxvZygiRE9ORSIpOwogICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cn0KCmFwcGxpY2F0aW9uQ2FjaGUub25ub3VwZGF0ZSA9IGZ1bmN0aW9uKCkgeyB0ZXN0KCkgfQphcHBsaWNhdGlvbkNhY2hlLm9uY2FjaGVkID0gZnVuY3Rpb24oKSB7IHRlc3QoKSB9CgphcHBsaWNhdGlvbkNhY2hlLm9udXBkYXRlcmVhZHkgPSBmdW5jdGlvbigpIHsgbG9nKCJGQUlMOiByZWNlaXZlZCB1bmV4cGVjdGVkIHVwZGF0ZXJlYWR5IGV2ZW50IikgfQphcHBsaWNhdGlvbkNhY2hlLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsgbG9nKCJGQUlMOiByZWNlaXZlZCB1bmV4cGVjdGVkIGVycm9yIGV2ZW50IikgfQoKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=