diff --git a/src/webUI.go b/src/webUI.go index e40a7654..94d2866f 100644 --- a/src/webUI.go +++ b/src/webUI.go @@ -4,48 +4,48 @@ var webUI = make(map[string]interface{}) func loadHTMLMap() { + webUI["html/js/authentication_ts.js"] = "ZnVuY3Rpb24gbG9naW4oKSB7CiAgICB2YXIgZXJyID0gZmFsc2U7CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpOwogICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXV0aGVudGljYXRpb24iKTsKICAgIHZhciBpbnB1dHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIik7CiAgICBjb25zb2xlLmxvZyhpbnB1dHMpOwogICAgZm9yICh2YXIgaSA9IGlucHV0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIHZhciBrZXkgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICB2YXIgdmFsdWUgPSBpbnB1dHNbaV0udmFsdWU7CiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgIGlucHV0c1tpXS5zdHlsZS5ib3JkZXJDb2xvciA9ICJyZWQiOwogICAgICAgICAgICBlcnIgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIGlmIChlcnIgPT0gdHJ1ZSkgewogICAgICAgIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoImNvbmZpcm0iKSkgewogICAgICAgIGlmIChkYXRhWyJjb25maXJtIl0gIT0gZGF0YVsicGFzc3dvcmQiXSkgewogICAgICAgICAgICBhbGVydCgic2RhZnNkIik7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXNzd29yZCcpLnN0eWxlLmJvcmRlckNvbG9yID0gInJlZCI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtJykuc3R5bGUuYm9yZGVyQ29sb3IgPSAicmVkIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVyciIpLmlubmVySFRNTCA9ICJ7ey5hY2NvdW50LmZhaWxlZH19IjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGNvbnNvbGUubG9nKGRhdGEpOwogICAgZm9ybS5zdWJtaXQoKTsKfQo=" + webUI["html/js/classes_ts.js"] = "dmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkgewogICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikgewogICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwKICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fAogICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTsKICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTsKICAgIH07CiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHsKICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpOwogICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfQogICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTsKICAgIH07Cn0pKCk7CnZhciBNYWluTWVudSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKICAgIGZ1bmN0aW9uIE1haW5NZW51KCkgewogICAgICAgIHRoaXMuRG9jdW1lbnRJRCA9ICJtYWluLW1lbnUiOwogICAgICAgIHRoaXMuSFRNTFRhZyA9ICJMSSI7CiAgICB9CiAgICBNYWluTWVudS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gKCkgewogICAgICAgIGNvbnNvbGUubG9nKHRoaXMuRG9jdW1lbnRJRCk7CiAgICB9OwogICAgcmV0dXJuIE1haW5NZW51Owp9KCkpOwp2YXIgTWFpbk1lbnVJdGVtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgewogICAgX19leHRlbmRzKE1haW5NZW51SXRlbSwgX3N1cGVyKTsKICAgIGZ1bmN0aW9uIE1haW5NZW51SXRlbSgpIHsKICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CiAgICB9CiAgICBNYWluTWVudUl0ZW0ucHJvdG90eXBlLmNyZWF0ZTIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuSFRNTFRhZyk7CiAgICAgICAgZWxlbWVudC5pbm5lclRleHQgPSB0aGlzLlZhbHVlOwogICAgICAgIGNvbnNvbGUubG9nKGVsZW1lbnQpOwogICAgfTsKICAgIHJldHVybiBNYWluTWVudUl0ZW07Cn0oTWFpbk1lbnUpKTsKZnVuY3Rpb24gcGFnZVJlYWR5KCkgewogICAgdmFyIGl0ZW0gPSBuZXcgTWFpbk1lbnVJdGVtKCk7CiAgICBpdGVtLlZhbHVlID0gIlRlc3QiOwogICAgaXRlbS5jcmVhdGUyKCk7Cn0K" + webUI["html/js/configuration_ts.js"] = "Y2xhc3MgV2l6YXJkQ2F0ZWdvcnkgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gImNvbnRlbnQiOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnlIZWFkbGluZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSDQiKTsKICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQp9CmNsYXNzIFdpemFyZEl0ZW0gZXh0ZW5kcyBXaXphcmRDYXRlZ29yeSB7CiAgICBjb25zdHJ1Y3RvcihrZXksIGhlYWRsaW5lKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICB0aGlzLmhlYWRsaW5lID0gaGVhZGxpbmU7CiAgICAgICAgdGhpcy5rZXkgPSBrZXk7CiAgICB9CiAgICBjcmVhdGVXaXphcmQoKSB7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gdGhpcy5jcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHRoaXMuaGVhZGxpbmUpOwogICAgICAgIHZhciBrZXkgPSB0aGlzLmtleTsKICAgICAgICB2YXIgY29udGVudCA9IG5ldyBQb3B1cENvbnRlbnQoKTsKICAgICAgICB2YXIgZGVzY3JpcHRpb247CiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICAgICAgZG9jLmlubmVySFRNTCA9ICIiOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChoZWFkbGluZSk7CiAgICAgICAgc3dpdGNoIChrZXkpIHsKICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGkpOwogICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIjEiLCBrZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAid2l6YXJkIik7CiAgICAgICAgICAgICAgICBzZWxlY3QuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInt7LndpemFyZC50dW5lci5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIlBNUyIsICJYRVBHIl07CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gWyJQTVMiLCAiWEVQRyJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIlhFUEciLCBrZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAid2l6YXJkIik7CiAgICAgICAgICAgICAgICBzZWxlY3QuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInt7LndpemFyZC5lcGdTb3VyY2UuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibTN1IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBrZXksICIiKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sud2l6YXJkLm0zdS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIndpemFyZCIpOwogICAgICAgICAgICAgICAgaW5wdXQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAie3sud2l6YXJkLm0zdS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4bWx0diI6CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0Iiwga2V5LCAiIik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LndpemFyZC54bWx0di5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIndpemFyZCIpOwogICAgICAgICAgICAgICAgaW5wdXQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAie3sud2l6YXJkLnhtbHR2LmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhrZXkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciBwcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQUkUiKTsKICAgICAgICBwcmUuaW5uZXJIVE1MID0gZGVzY3JpcHRpb247CiAgICAgICAgZG9jLmFwcGVuZENoaWxkKHByZSk7CiAgICAgICAgY29uc29sZS5sb2coaGVhZGxpbmUsIGtleSk7CiAgICB9Cn0KZnVuY3Rpb24gcmVhZHlGb3JDb25maWd1cmF0aW9uKHdpemFyZCkgewogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoImdldFNlcnZlckNvbmZpZyIpOwogICAgc2VydmVyLnJlcXVlc3QobmV3IE9iamVjdCgpKTsKICAgIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgZmFsc2UpOwogICAgY29uZmlndXJhdGlvbldpemFyZFt3aXphcmRdLmNyZWF0ZVdpemFyZCgpOwp9CmZ1bmN0aW9uIHNhdmVXaXphcmQoKSB7CiAgICB2YXIgY21kID0gInNhdmVXaXphcmQiOwogICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50Iik7CiAgICB2YXIgY29uZmlnID0gZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIndpemFyZCIpOwogICAgdmFyIHdpemFyZCA9IG5ldyBPYmplY3QoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlnLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgdmFyIHZhbHVlOwogICAgICAgIHN3aXRjaCAoY29uZmlnW2ldLnRhZ05hbWUpIHsKICAgICAgICAgICAgY2FzZSAiU0VMRUNUIjoKICAgICAgICAgICAgICAgIG5hbWUgPSBjb25maWdbaV0ubmFtZTsKICAgICAgICAgICAgICAgIHZhbHVlID0gY29uZmlnW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgLy8gV2VubiBkZXIgV2VydCBlaW5lIFphaGwgaXN0LCB3aXJkIGRpZXNlciBhbHMgWmFobCBnZXNwZWljaGVydAogICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIHdpemFyZFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgd2l6YXJkW25hbWVdID0gcGFyc2VJbnQodmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIklOUFVUIjoKICAgICAgICAgICAgICAgIHN3aXRjaCAoY29uZmlnW2ldLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGNvbmZpZ1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbmZpZ1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXNnID0gbmFtZS50b1VwcGVyQ2FzZSgpICsgIjogIiArICJ7ey5hbGVydC5taXNzaW5nSW5wdXR9fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChtc2cpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHdpemFyZFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgLy8gY29kZS4uLgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICBkYXRhWyJ3aXphcmQiXSA9IHdpemFyZDsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgIGNvbnNvbGUubG9nKGRhdGEpOwp9Ci8vIFdpemFyZAp2YXIgY29uZmlndXJhdGlvbldpemFyZCA9IG5ldyBBcnJheSgpOwpjb25maWd1cmF0aW9uV2l6YXJkLnB1c2gobmV3IFdpemFyZEl0ZW0oInR1bmVyIiwgInt7LndpemFyZC50dW5lci50aXRsZX19IikpOwpjb25maWd1cmF0aW9uV2l6YXJkLnB1c2gobmV3IFdpemFyZEl0ZW0oImVwZ1NvdXJjZSIsICJ7ey53aXphcmQuZXBnU291cmNlLnRpdGxlfX0iKSk7CmNvbmZpZ3VyYXRpb25XaXphcmQucHVzaChuZXcgV2l6YXJkSXRlbSgibTN1IiwgInt7LndpemFyZC5tM3UudGl0bGV9fSIpKTsKY29uZmlndXJhdGlvbldpemFyZC5wdXNoKG5ldyBXaXphcmRJdGVtKCJ4bWx0diIsICJ7ey53aXphcmQueG1sdHYudGl0bGV9fSIpKTsK" + webUI["html/js/users.js"] = "ZnVuY3Rpb24gb3BlblVzZXJzKGVsbSkgewogIGNvbG9tblNvcnQgPSAwOwoKICB2YXIgbmV3RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNldHRpbmdzIik7CgogIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJIUiI7CiAgbmV3RGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKCiAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdCgpOwogIG5ld0VudHJ5WyJfZWxlbWVudCJdID0gIklOUFVUIjsKICBuZXdFbnRyeVsidHlwZSJdID0gImJ1dHRvbiI7CiAgbmV3RW50cnlbImNsYXNzIl0gPSAiYnV0dG9uIjsKICBuZXdFbnRyeVsidmFsdWUiXSA9ICJOZXciOwogIG5ld0VudHJ5WyJvbmNsaWNrIl0gPSAidXNlckRldGFpbCgwKSI7CiAgbmV3RGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKCiAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZXR0aW5ncyIpOwoKICAvLyBCdWlsZCB0YWJsZQogIHZhciBuZXdUYWJsZSA9IG5ldyBPYmplY3QoKTsKICBuZXdUYWJsZVsiX2VsZW1lbnQiXSA9ICJUQUJMRSI7CiAgbmV3VGFibGVbImlkIl0gPSAiaWRfbWFwcGluZyI7CiAgbmV3VGFibGVbImNsYXNzIl0gPSAidGFibGUtbWFwcGluZyI7CiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3VGFibGUpKTsKCiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICBjcmVhdGVVc2Vyc1RhYmxlKCk7CiAgfSwgMTApOwp9CgpmdW5jdGlvbiBjcmVhdGVVc2Vyc1RhYmxlKCkgewogIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZF9tYXBwaW5nIik7CiAgdGFibGUuaW5uZXJIVE1MID0gIiI7CiAgdmFyIG5ld1RSID0gbmV3IE9iamVjdCgpOwogIG5ld1RSWyJfZWxlbWVudCJdID0gIlRSIjsKICBuZXdUUlsiY2xhc3MiXSA9ICJ0YWJsZS1tYXBwaW5nLWhlYWRlciI7CiAgdGFibGUuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdUUikpOwoKICB2YXIgdHIgPSB0YWJsZS5sYXN0Q2hpbGQ7CiAgdmFyIHRySGVhZGxpbmVzID0gbmV3IEFycmF5KCJVc2VybmFtZSIsICJQYXNzd29yZCIsICJXRUIiLCAiUE1TIiwgIk0zVSIsICJYTUwiLCAiQVBJIikKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ckhlYWRsaW5lcy5sZW5ndGg7IGkrKykgewogICAgdmFyIG5ld1REID0gbmV3IE9iamVjdCgpOwogICAgbmV3VERbIl9lbGVtZW50Il0gPSAiVEQiOwogICAgbmV3VERbIl90ZXh0Il0gPSB0ckhlYWRsaW5lc1tpXTsKICAgIHRyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3VEQpKTsKICB9CgoKICAvLyBTb3J0IHVzZXJzCiAgdmFyIHVzZXJJZHMgPSBnZXRPYmpLZXlzKHVzZXJzKTsKCiAgdmFyIHVzZXJPYmogPSBuZXcgT2JqZWN0KCk7CgogIGZvciAodmFyIGkgPSAwOyBpIDwgdXNlcklkcy5sZW5ndGg7IGkrKykgewogICAgdmFyIHVzZXJuYW1lID0gdXNlcnNbdXNlcklkc1tpXV1bImRhdGEiXVsidXNlcm5hbWUiXTsKICAgIHVzZXJPYmpbdXNlcm5hbWVdID0gdXNlcklkc1tpXTsKICB9CgogIHZhciBhbGxVc2VycyA9IGdldE9iaktleXModXNlck9iaik7CiAgYWxsVXNlcnMuc29ydCgpOwogIC8vIC0tCgogIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsVXNlcnMubGVuZ3RoOyBpKyspIHsKICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZF9tYXBwaW5nIik7CiAgICB2YXIgdXNlcklEID0gdXNlck9ialthbGxVc2Vyc1tpXV07CiAgICB2YXIgdXNlcm5hbWUgPSBhbGxVc2Vyc1tpXTsKICAgIHZhciBpdGVtID0gdXNlcnNbdXNlcklEXVsiZGF0YSJdOwoKICAgIC8vIENyZWF0ZSBUUgogICAgdmFyIG5ld1RSID0gbmV3IE9iamVjdCgpOwogICAgbmV3VFJbIl9lbGVtZW50Il0gPSAiVFIiOwogICAgbmV3VFJbImNsYXNzIl0gPSAiIjsKICAgIG5ld1RSWyJpZCJdID0gdXNlcklEOwogICAgbmV3VFJbIm9uY2xpY2siXSA9ICdqYXZhc2NyaXB0OiB1c2VyRGV0YWlsKCInICsgdXNlcklEICsgJyIpOyc7CiAgICB0YWJsZS5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld1RSKSk7CgogICAgdmFyIHRyID0gdGFibGUubGFzdENoaWxkOwoKICAgIC8vIENyZWF0ZSB1c2VybmFtZSBURAogICAgdmFyIG5ld1REID0gbmV3IE9iamVjdCgpOwogICAgbmV3VERbIl9lbGVtZW50Il0gPSAiUCI7CiAgICBuZXdURFsiX3RleHQiXSA9IHVzZXJuYW1lOwogICAgY3JlYXRlTmV3VEQobmV3VEQsIHRyKTsKCiAgICAvLyBDcmVhdGUgcGFzc3dvcmQgVEQKICAgIHZhciBuZXdURCA9IG5ldyBPYmplY3QoKTsKICAgIG5ld1REWyJfZWxlbWVudCJdID0gIlAiOwogICAgbmV3VERbIl90ZXh0Il0gPSAiLi4uLi4iOwogICAgY3JlYXRlTmV3VEQobmV3VEQsIHRyKTsKCiAgICAvLyBDcmVhdGUgd2ViIGFjY2VzcwogICAgdmFyIG5ld1REID0gbmV3IE9iamVjdCgpOwogICAgbmV3VERbIl9lbGVtZW50Il0gPSAiUCI7CiAgICBzd2l0Y2ggKGl0ZW1bImF1dGhlbnRpY2F0aW9uLndlYiJdKSB7CiAgICAgIGNhc2UgdHJ1ZTogbmV3VERbIl90ZXh0Il0gPSAi4pyTIjsgYnJlYWs7CiAgICAgIGRlZmF1bHQ6IG5ld1REWyJfdGV4dCJdID0gIi0iOyBicmVhazsKICAgIH0KICAgIGNyZWF0ZU5ld1REKG5ld1RELCB0cik7CgogICAgLy8gQ3JlYXRlIFBNUyBhY2Nlc3MKICAgIHZhciBuZXdURCA9IG5ldyBPYmplY3QoKTsKICAgIG5ld1REWyJfZWxlbWVudCJdID0gIlAiOwogICAgc3dpdGNoIChpdGVtWyJhdXRoZW50aWNhdGlvbi5wbXMiXSkgewogICAgICBjYXNlIHRydWU6IG5ld1REWyJfdGV4dCJdID0gIuKckyI7IGJyZWFrOwogICAgICBkZWZhdWx0OiBuZXdURFsiX3RleHQiXSA9ICItIjsgYnJlYWs7CiAgICB9CiAgICBjcmVhdGVOZXdURChuZXdURCwgdHIpOwoKICAgIC8vIENyZWF0ZSBNM1UgYWNjZXNzCiAgICB2YXIgbmV3VEQgPSBuZXcgT2JqZWN0KCk7CiAgICBuZXdURFsiX2VsZW1lbnQiXSA9ICJQIjsKICAgIHN3aXRjaCAoaXRlbVsiYXV0aGVudGljYXRpb24ubTN1Il0pIHsKICAgICAgY2FzZSB0cnVlOiBuZXdURFsiX3RleHQiXSA9ICLinJMiOyBicmVhazsKICAgICAgZGVmYXVsdDogbmV3VERbIl90ZXh0Il0gPSAiLSI7IGJyZWFrOwogICAgfQogICAgY3JlYXRlTmV3VEQobmV3VEQsIHRyKTsKCiAgICAvLyBDcmVhdGUgWE1MVFYgYWNjZXNzCiAgICB2YXIgbmV3VEQgPSBuZXcgT2JqZWN0KCk7CiAgICBuZXdURFsiX2VsZW1lbnQiXSA9ICJQIjsKICAgIHN3aXRjaCAoaXRlbVsiYXV0aGVudGljYXRpb24ueG1sIl0pIHsKICAgICAgY2FzZSB0cnVlOiBuZXdURFsiX3RleHQiXSA9ICLinJMiOyBicmVhazsKICAgICAgZGVmYXVsdDogbmV3VERbIl90ZXh0Il0gPSAiLSI7IGJyZWFrOwogICAgfQogICAgY3JlYXRlTmV3VEQobmV3VEQsIHRyKTsKCiAgICAvLyBDcmVhdGUgQVBJIGFjY2VzcwogICAgdmFyIG5ld1REID0gbmV3IE9iamVjdCgpOwogICAgbmV3VERbIl9lbGVtZW50Il0gPSAiUCI7CgogICAgc3dpdGNoIChpdGVtWyJhdXRoZW50aWNhdGlvbi5hcGkiXSkgewogICAgICBjYXNlIHRydWU6IG5ld1REWyJfdGV4dCJdID0gIuKckyI7IGJyZWFrOwogICAgICBkZWZhdWx0OiBuZXdURFsiX3RleHQiXSA9ICItIjsgYnJlYWs7CiAgICB9CiAgICBjcmVhdGVOZXdURChuZXdURCwgdHIpOwoKICB9CgogIC8vIHVzYWdlIEluZm8gIAogIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2V0dGluZ3MiKTsKICBzd2l0Y2ggKG1lbnVbYWN0aXZlTWVudS5pZF0uaGFzT3duUHJvcGVydHkoIl91c2FnZSIpKSB7CiAgICBjYXNlIHRydWU6CiAgICAgIHZhciB1c2FnZUl0ZW0gPSBuZXcgT2JqZWN0KCk7CiAgICAgIHVzYWdlSXRlbVsiX2VsZW1lbnQiXSA9ICJQUkUiCiAgICAgIHVzYWdlSXRlbVsiX3RleHQiXSA9IG1lbnVbYWN0aXZlTWVudS5pZF1bIl91c2FnZSJdOwoKICAgICAgdmFyIG5ld0hSID0gbmV3IE9iamVjdCgpOwogICAgICBuZXdIUlsiX2VsZW1lbnQiXSA9ICJIUiIKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3SFIpKTsKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQodXNhZ2VJdGVtKSk7CiAgfQoKICBzb3J0VGFibGUoMCk7Cn0KCmZ1bmN0aW9uIHVzZXJEZXRhaWwodXNlcklEKSB7CiAgc2hvd1BvcFVwRWxlbWVudCgndXNlci1kZXRhaWwnKTsKICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgIHNob3dFbGVtZW50KCJwb3B1cCIsIHRydWUpOwogIH0sIDEwKTsKICB2YXIgZGVmYXVsdFVzZXI7CgogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzYXZlVXNlckRldGFpbCIpLnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzYXZlVXNlckRldGFpbCgiJyArIHVzZXJJRCArICciLCBmYWxzZSknKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGVsZXRlVXNlckRldGFpbCIpLnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzYXZlVXNlckRldGFpbCgiJyArIHVzZXJJRCArICciLCB0cnVlKScpOwoKICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKCiAgc3dpdGNoICh1c2VySUQpIHsKICAgIGNhc2UgMDogICAvLyBOZXcgVXNlcgogICAgICBkYXRhWyJ1c2VybmFtZSJdID0gIiI7CiAgICAgIGRhdGFbImF1dGhlbnRpY2F0aW9uLndlYiJdID0gZmFsc2U7CiAgICAgIGRhdGFbImF1dGhlbnRpY2F0aW9uLnBtcyJdID0gdHJ1ZTsKICAgICAgZGF0YVsiYXV0aGVudGljYXRpb24ueG1sIl0gPSB0cnVlOwogICAgICBkYXRhWyJhdXRoZW50aWNhdGlvbi5tM3UiXSA9IGZhbHNlOwogICAgICBkYXRhWyJhdXRoZW50aWNhdGlvbi5hcGkiXSA9IGZhbHNlOwogICAgICBkYXRhWyJkZWZhdWx0VXNlciJdID0gZmFsc2U7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIHNob3dFbGVtZW50KCJkZWxldGVVc2VyRGV0YWlsIiwgZmFsc2UpCiAgICAgIH0sIDEpOwoKICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgZGF0YSA9IHVzZXJzW3VzZXJJRF1bImRhdGEiXTsKICAgICAgc2hvd0VsZW1lbnQoImRlbGV0ZVVzZXJEZXRhaWwiLCB0cnVlKQogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGVsZXRlVXNlckRldGFpbCIpLmNsYXNzTmFtZSA9ICJkZWxldGUiOwoKICAgICAgYnJlYWsKICB9CgoKICB2YXIgdXNlcm5hbWUgPSBkYXRhWyJ1c2VybmFtZSJdOwogIGRhdGFbInBhc3N3b3JkIl0gPSAiIjsKICBkYXRhWyJjb25maXJtIl0gPSAiIjsKCiAgdmFyIGtleXMgPSBnZXRPYmpLZXlzKGRhdGEpOwogIGRlZmF1bHRVc2VyID0gZGF0YVsiZGVmYXVsdFVzZXIiXTsKICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFVzZXIiKSkgewogICAgZGVmYXVsdFVzZXIgPSBKU09OLnBhcnNlKGRhdGFbImRlZmF1bHRVc2VyIl0pOwogIH0KCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CgogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGtleXNbaV0pKSB7CiAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGtleXNbaV0pCiAgICB9IGVsc2UgewogICAgICB2YXIgdGQgPSB1bmRlZmluZWQ7CiAgICB9CgogICAgdmFyIG5ld0l0ZW0gPSBuZXcgT2JqZWN0KCk7CgogICAgbmV3SXRlbVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CgogICAgbmV3SXRlbVsidmFsdWUiXSA9IGRhdGFba2V5c1tpXV07CiAgICBuZXdJdGVtWyJuYW1lIl0gPSBrZXlzW2ldOwoKCgoKCiAgICBzd2l0Y2ggKGtleXNbaV0uaW5kZXhPZigiYXV0aGVudGljYXRpb24iKSkgewogICAgICBjYXNlIC0xOgogICAgICAgIGlmIChrZXlzW2ldID09ICJwYXNzd29yZCIgfHwga2V5c1tpXSA9PSAiY29uZmlybSIpIHsKICAgICAgICAgIG5ld0l0ZW1bInR5cGUiXSA9ICJwYXNzd29yZCI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5ld0l0ZW1bInR5cGUiXSA9ICJ0ZXh0IjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CgogICAgICBkZWZhdWx0OgogICAgICAgIG5ld0l0ZW1bInR5cGUiXSA9ICJjaGVja2JveCI7CgogICAgICAgIGlmIChrZXlzW2ldID09ICJhdXRoZW50aWNhdGlvbi53ZWIiICYmIGRlZmF1bHRVc2VyID09IHRydWUpIHsKICAgICAgICAgIG5ld0l0ZW1bIm9uY2xpY2siXSA9ICJyZXR1cm4gZmFsc2UiOwogICAgICAgIH0KCiAgICAgICAgaWYgKGRhdGFba2V5c1tpXV0gPT0gdHJ1ZSkgewogICAgICAgICAgbmV3SXRlbVsiY2hlY2tlZCJdID0gZGF0YVtrZXlzW2ldXTsKICAgICAgICB9CgogICAgICAgIGJyZWFrOwogICAgfQoKICAgIHN3aXRjaCAoa2V5c1tpXSkgewogICAgICBjYXNlICJkZWZhdWx0VXNlciI6CiAgICAgICAgLy9pZiAoZGF0YVtrZXlzW2ldXSA9PSB0cnVlKSB7CiAgICAgICAgbmV3SXRlbVsidHlwZSJdID0gImhpZGRlbiI7CiAgICAgIC8vfQogICAgfQoKCiAgICBpZiAodGQgIT0gdW5kZWZpbmVkKSB7CiAgICAgIHRkLmlubmVySFRNTCA9ICIiOwogICAgICB2YXIgZWxlbWVudCA9IGNyZWF0ZU5ld0VsZW1lbnQobmV3SXRlbSkKICAgICAgLy9jb25zb2xlLmxvZyhlbGVtZW50KTsKICAgICAgdGQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CiAgICB9CgoKICB9CgoKICBpZiAoZGVmYXVsdFVzZXIgPT0gdHJ1ZSkgewogICAgc2hvd0VsZW1lbnQoImRlbGV0ZVVzZXJEZXRhaWwiLCBmYWxzZSkKICB9IGVsc2UgewogICAgc2hvd0VsZW1lbnQoImRlbGV0ZVVzZXJEZXRhaWwiLCB0cnVlKQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlbGV0ZVVzZXJEZXRhaWwiKS5jbGFzc05hbWUgPSAiZGVsZXRlIjsKICB9Cgp9CgpmdW5jdGlvbiBzYXZlVXNlckRldGFpbCh1c2VySUQsIGRlbGV0ZVVzZXIpIHsKCiAgdmFyIGlucHV0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1c2VyLWRldGFpbC10YWJsZSIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJTlBVVCIpOwoKICB2YXIgbmV3VXNlckRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgIHN3aXRjaCAoaW5wdXRzW2ldLnR5cGUpIHsKICAgICAgY2FzZSAiY2hlY2tib3giOiBuZXdVc2VyRGF0YVtpbnB1dHNbaV0ubmFtZV0gPSBpbnB1dHNbaV0uY2hlY2tlZDsgYnJlYWs7CiAgICAgIGRlZmF1bHQ6IG5ld1VzZXJEYXRhW2lucHV0c1tpXS5uYW1lXSA9IGlucHV0c1tpXS52YWx1ZTsgYnJlYWs7CiAgICB9CgogICAgaWYgKGlucHV0c1sidXNlcm5hbWUiXS52YWx1ZS5sZW5ndGggPT0gMCkgewogICAgICBpbnB1dHNbInVzZXJuYW1lIl0uc3R5bGUuYm9yZGVyID0gInNvbGlkIDFweCByZWQiOwogICAgICByZXR1cm47CiAgICB9CgogICAgc3dpdGNoICh1c2VySUQpIHsKICAgICAgY2FzZSAiMCI6CiAgICAgICAgaWYgKGlucHV0c1sicGFzc3dvcmQiXS52YWx1ZS5sZW5ndGggPT0gMCkgewogICAgICAgICAgY29uc29sZS5sb2coaW5wdXRzWyJwYXNzd29yZCJdLnZhbHVlLmxlbmd0aCk7CiAgICAgICAgICBpbnB1dHNbInBhc3N3b3JkIl0uc3R5bGUuYm9yZGVyID0gInNvbGlkIDFweCByZWQiOwogICAgICAgICAgcmV0dXJuCiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgfQoKICAgIGlmIChpbnB1dHNbInBhc3N3b3JkIl0udmFsdWUubGVuZ3RoID4gMCkgewogICAgICBpZiAoaW5wdXRzWyJwYXNzd29yZCJdLnZhbHVlICE9IGlucHV0c1siY29uZmlybSJdLnZhbHVlKSB7CiAgICAgICAgaW5wdXRzWyJwYXNzd29yZCJdLnN0eWxlLmJvcmRlciA9ICJzb2xpZCAxcHggcmVkIjsKICAgICAgICBpbnB1dHNbImNvbmZpcm0iXS5zdHlsZS5ib3JkZXIgPSAic29saWQgMXB4IHJlZCI7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CgogIH0KCiAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CgogIHN3aXRjaCAodXNlcklEKSB7CiAgICBjYXNlICIwIjoKICAgICAgLy9kYXRhID0gbmV3VXNlckRhdGEKICAgICAgZGF0YVsidXNlckRhdGEiXSA9IG5ld1VzZXJEYXRhCiAgICAgIGRhdGFbImNtZCJdID0gInNhdmVOZXdVc2VyIjsgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgdmFyIHRoaXNVc2VyID0gbmV3IE9iamVjdCgpOwoKICAgICAgaWYgKGRlbGV0ZVVzZXIgPT0gdHJ1ZSkgewogICAgICAgIGlmIChjb25maXJtKCdEZWxldGUgdGhlIHNlbGVjdGVkIHVzZXI/JykpIHsKICAgICAgICAgIGRhdGFbImRlbGV0ZVVzZXIiXSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsKICAgICAgICAgIHJldHVybgogICAgICAgIH0KICAgICAgfQoKICAgICAgdGhpc1VzZXJbdXNlcklEXSA9IG5ld1VzZXJEYXRhOwoKICAgICAgZGF0YVsidXNlckRhdGEiXSA9IHRoaXNVc2VyOwogICAgICBkYXRhWyJjbWQiXSA9ICJzYXZlVXNlckRhdGEiOyBicmVhazsKICB9CgogIFRocmVhZGZpbihkYXRhKTsKICAvL2NyZWF0ZVVzZXJzVGFibGUoKQogIHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsKfQoKCg==" + webUI["html/configuration.html"] = "PCFkb2N0eXBlIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPgogIDxsaW5rCiAgICByZWw9InN0eWxlc2hlZXQiCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyIKICAvPgogIDxsaW5rIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIGludGVncml0eT0ic2hhMzg0LWdIMnlJSnFLZE5IUEVxMG40TXFhL0hHS0loU2tJSGVMNUF5aGtZVjhpNTlVNUFSNmNzQnZBcEhITmwvdkkxQngiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9iYXNlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgo8L2hlYWQ+Cgo8Ym9keSBvbmxvYWQ9ImphdmFzY3JpcHQ6IHJlYWR5Rm9yQ29uZmlndXJhdGlvbigwKTsiPgoKICA8ZGl2IGlkPSJsb2FkaW5nIiBjbGFzcz0ibW9kYWwgZmFkZSI+CiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbG9hZGVyIj48L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBpZD0icG9wdXAiIGNsYXNzPSJtb2RhbCBmYWRlIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyBtb2RhbC14bCI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciIgaWQ9InBvcHVwX2hlYWRlciI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgICAgIDxkaXYgaWQ9InBvcHVwLWN1c3RvbSI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIiBpZD0icG9wdXBfZm9vdGVyIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iaW1nQ2VudGVyIj48L2Rpdj4KICA8ZGl2IGlkPSJib3giPgoKICAgIDxkaXYgaWQ9ImhlYWRsaW5lIj4KICAgICAgPGgxIGlkPSJoZWFkLXRleHQiIGNsYXNzPSJjZW50ZXIiPkNvbmZpZ3VyYXRpb248L2gxPgogICAgPC9kaXY+CiAgICA8cCBpZD0iZXJyIiBjbGFzcz0iZXJyb3JNc2cgY2VudGVyIj48L3A+CiAgICA8ZGl2IGlkPSJjb250ZW50Ij4KCiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJveC1mb290ZXIiPgogICAgICA8aW5wdXQgaWQ9Im5leHQiIGNsYXNzPSIiIHR5cGU9ImJ1dHRvbiIgbmFtZT0ibmV4dCIgdmFsdWU9Ik5leHQiIG9uY2xpY2s9ImphdmFzY3JpcHQ6IHNhdmVXaXphcmQoKTsiPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvanMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMiIGludGVncml0eT0ic2hhMzg0LUEzckpEODU2S293U2I3ZHdsWmRZRWtPMzlHYWdpN3ZJc0YwanJSQW9RbURLS3RRQkhVdUxaOUFzU3Y0akQ0WGEiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0PgogIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9jbGlwYm9hcmQuanMvMi4wLjEwL2NsaXBib2FyZC5taW4uanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9jb25maWd1cmF0aW9uX3RzLmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvbmV0d29ya190cy5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL21lbnVfdHMuanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9zZXR0aW5nc190cy5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL2Jhc2VfdHMuanMiPjwvc2NyaXB0Pgo8L2JvZHk+Cgo8L2h0bWw+" + webUI["html/img/log.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0xMC0xNFQxMToxMDo0MjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkP32mEAAANASURBVGgF7ZlPiE1RHMffw1AYhiL5k1HEijJiYaFZiHoyFspW2RFRkkSZGgtFWJIwi9FYmo0VOywkKTbKgjSlWcifRCPX51dv6s2d33md77vvXjfmV9859/7u93x/v98959x73p1KRbAkSargAhgDH0E/qIYkuHYEvAPGvwbmNOEerXM/0Q6BRSFuZj/ix0DaDnvCkGppIucDAe4OhzvkcUO+GaELAf8ux7/b8Zlrr+Pvc3zm6nX8NccXdKmFLHaUPJ/Ruhyu5zNap8Nd6PiCLrUQTyi0Rjy/5/M0Zd+smB7M32XwtgBr07aC6yfSTs7XO77OALfH4VbgHsD/HLytVquJx4nyIdQFBsHftscksK5Z0sGhpuN8Or4Aa5sJFHjtO7G2MjKvvZjN1sglOpSlCMt9LrDZ4S4Hd0Qg24vrK+gAZbPtjMqTdFKhEdkIsYxFWP720JlioUK6pzDL41jtpRIqxOOWxecuB3fhRGT8E85YBK8VygI6GSRTCxlH3TaJgyw4O2678aCxO94LbNPovYDdmOrUukIBN/MqwjJEOwGPOHR31W4VONVCLEBR9lAJpBbSrYhn5K5R+quFnGUOr1ICtMIlxjz6XVb6qot9JeKvCPSAdlQJJHDtd8hOIN0wtRDLxx6Ntr0ulalTq1TJNyYzXUjj3SjD8X87Iva7uR8s5+2bi6FtX1oOgi8g2tSn1g2yPx+t3gIR/c90s1+C1vuO/YkxdWrdjxFtE2dE0VELWaqIZ+QuUfqrhZxmyKUvgEoyE1xizOR4YOI8plXXyAZEbYsyTJvXFsUW+x6wGUSbWogJ237rZHSEgojq1CooLT3MdCH6Pcu3xz8zIq0s9lvc2+sgz6dWH/rnQPB/jlybZGoh99hCHJqk0P6TD0jaI/4b7dVYeXVq2bemokyKpRZiHwWKMimWWshxhryjoEpOKXHUNbIN8WcUc5s2r8Vue7l9oAaiTS3EhDeB6EUYnUlGojq1MobLr3uokB/5hcys7OYWKuRl5nD5Cbi5uYXw0ntPHoay2S8Seuol5RZSJ0r/n/DEc/BdrN9kTZrH7BkwDspgwyQxW6uggU3nHnAXvAG/QZE2SrARsL8hJffwDxM0mNDPvT8IAAAAAElFTkSuQmCC" + webUI["html/img/mapping.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wOC0wMlQxMjowODo5NzwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CpRxQsEAAAJLSURBVGgF7VoxTgMxEMwBHWlAaeABVCEtBcoD+EBewCdCyQsQtLyAPCBvCBSRIBUPCF1ogqBJjlkrezGr6HTrO98lhy1Z9trr2VmvnbMNjUadUhzHLeQB8hw5LS3QOUbubvIf7X3kKXIZibgS51bCZdWgMT6D8nECgArkngagQN0B8dhbkblalVmLIyheCGUthhjuLBq77MihA0xTjHHBEBBOorHLjjghbNOg4Mg2RYO4hIiEiHiaAV5aSwf8hRgjZdHtTTTc2ZFXpZkY+hMx5k3IZYlr7jgudJHp2JElLaF0K1mirYn8nAWgQB3ibM59ERNCA52d6Nghv9isQiUtn0kURe92I9eBcYA6YZxym8dyDuwRuMw82gjQYQbsPdLDdNCROO0US3uEfp3usTZpjf5J2CNtNFwjl7FHvmBnCB5PCQkQoJudJtGvE23sJEFuI39rQArS7dskXK6nlwkAKiB1VxAxLcyUePAH8cQmlbEul4+UM8LkVjPc2ZHcaFUDBEeqjoC0HyIiZ6RqOUSk6ghI+xyRD9mRQTYfIktPylaX16rhzo48KE29QH8kxjxC/hFtZYiGe70OjWVMW7Dx32bA3iO7//iAC8DOPweZFQhH6O+CmkRvW2f28oV8owEoUHdMPPg70rFJZajTkqT7uZ3ObaHEuuHOjnCpsb8vlKUsur2JhruLA94Y5QEOjuSZPR9jQ0R8zGoezNpFhN5RtUm+/bpgaG1u0jd2OSLDTRopbZ/okxcrLUYKvKprbRfHhXr8m5PK/y1V/gWRKLfiNSmxEAAAAABJRU5ErkJggg==" + webUI["html/img/threadfin.png"] = "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" + webUI["html/js/menu.js"] = "CmZ1bmN0aW9uIHNldE1lbnVJdGVtKCkgewoKICBtZW51ID0gbmV3IE9iamVjdCgpOwogIHN1Yk1lbnUgPSBuZXcgT2JqZWN0KCk7CgogIHZhciBtZW51X20zdSA9IG5ldyBPYmplY3QoKTsKICBtZW51X20zdVsiX21lbnVUeXBlIl0gPSAiaW5wdXRBcnJheSI7CiAgbWVudV9tM3VbIl9lbGVtZW50Il0gPSAiTEkiOwogIG1lbnVfbTN1WyJfY29uZmlnS2V5Il0gPSAiZmlsZXMubTN1IjsKICBtZW51X20zdVsiX3RleHQiXSA9ICJQbGF5bGlzdCI7CiAgbWVudV9tM3VbIl9pY29uIl0gPSAiaW1nL20zdS5wbmciOwogIG1lbnVfbTN1WyJfaGVhZGxpbmUiXSA9ICJQbGF5bGlzdHM6IExvY2FsIG9yIHJlbW90ZSI7CiAgbWVudV9tM3VbIl91c2FnZSJdID0gIjxiPkluZm88L2I+PGJyPkF2YWlsYWJpbGl0eTogRmlsZSBhdmFpbGFiaWxpdHkgaW4gcGVyY2VudDxicj5TdHJlYW1zOiAgICAgIE51bWJlciBvZiBzdHJlYW1zIGluIHRoZSBmaWxlLjxicj5ncm91cC10aXRsZTogIFN0cmVhbXMgdGhhdCBhcmUgYXNzaWduZWQgdG8gYSBncm91cC4gU2ltcGxpZmllcyBmaWx0ZXJpbmcgc3RyZWFtczxicj50dmctaWQ6ICAgICAgIFRoaXMgSUQgaXMgdXNlZCBmb3IgYXV0b21hdGljIG1hcHBpbmcsIG11c3QgbWF0Y2ggd2l0aCB0aGUgY2hhbm5lbCBJRCBpbiB0aGUgWE1MVFYgZmlsZS48YnI+VW5pcXVlIElEOiAgICBTdHJlYW1zIHdpdGggYSB1bmlxdWUgSUQgdG8gaWRlbnRpZnkgdGhlbS4gQWxsb3dzIGNoYW5uZWwgbmFtZSBjaGFuZ2VzIGluIHRoZSBNM1Ugd2l0aG91dCBsb3NpbmcgdGhlIFhNTFRWIG1hcHBpbmcgKFBQViAvIGxpdmUgZXZlbnRzKS48YnI+PGJyPjxiPlVzYWdlIE0zVTo8L2I+PGJyPlJlbW90ZSBwbGF5bGlzdDogaHR0cDovL3lvdXIuaXB0di5wcm92aWRlci5jb20vZmlsZS5tM3U8YnI+TG9jYWwgIHBsYXlsaXN0OiAvcGF0aC90by9maWxlLm0zdTxicj48YnI+PGI+VXNhZ2UgSERIb21lUnVuOjwvYj48YnI+SVA6IDE5Mi4xNjguMS4xMDo1MDA0PGJyPiIKICBtZW51X20zdVsibmFtZSJdID0gImZpbGUiOwogIG1lbnVfbTN1WyJpZCJdID0gImZpbGUiOwogIG1lbnVfbTN1WyJ2YWx1ZSJdID0gbWVudV9tM3VbIm5hbWUiXTsKICBtZW51X20zdVsicGxhY2Vob2xkZXIiXSA9ICJQbGF5bGlzdDogbG9jYWwgb3IgcmVtb3RlIjsKICBtZW51X20zdVsib25jbGljayJdID0gImphdmFzY3JpcHQ6IHRvZ2dsZU1lbnUodGhpcyk7IjsKICBtZW51X20zdVsiY2xhc3MiXSA9ICJtZW51LW5vdEFjdGl2ZSI7CgoKICB2YXIgbWVudV9maWx0ZXIgPSBuZXcgT2JqZWN0KCk7CiAgbWVudV9maWx0ZXJbIl9tZW51VHlwZSJdID0gImlucHV0QXJyYXkiOwogIG1lbnVfZmlsdGVyWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2ZpbHRlclsiX2NvbmZpZ0tleSJdID0gImZpbHRlciI7CiAgbWVudV9maWx0ZXJbIl90ZXh0Il0gPSAiRmlsdGVyIjsKICBtZW51X2ZpbHRlclsiX2ljb24iXSA9ICJpbWcvZmlsdGVyLnBuZyI7CiAgbWVudV9maWx0ZXJbIl9oZWFkbGluZSJdID0gIkZpbHRlciBieSBNM1UgcGFyYW1ldGVycywgZS5nLiBncm91cC10aXRsZSI7CiAgbWVudV9maWx0ZXJbIl91c2FnZSJdID0gIjxiPlVzYWdlOjwvYj48YnI+U3BvcnQgLSBBbGwgc3BvcnRzIGNoYW5uZWxzPGJyPlNwb3J0IHtIRH0gLSBBbGwgSEQgc3BvcnRzIGNoYW5uZWxzPGJyPlNwb3J0IHtIRH0gIXtFUyxERX0gLSBBbGwgSEQgc3BvcnRzIGNoYW5uZWxzLCBidXQgbm8gU3BhbmlzaCBhbmQgR2VybWFuPGJyPjxicj5UbyBmaWx0ZXIgdGhlIHN0cmVhbXMgb2YgYSBIREhvbWVSdW4sIHRoZSBwbGF5bGlzdCBuYW1lIGNhbiBiZSBlbnRlcmVkOjxicj5NeSB0dW5lciB7SER9IgogIC8vbWVudV9maWx0ZXJbIl91c2FnZSJdICAgICAgID0gIjxiPlVzYWdlOjwvYj48YnI+QWxsIHNwb3J0cyBjaGFubmVsczogU3BvcnQ8YnI+QWxsIEhEIHNwb3J0cyBjaGFubmVsczogU3BvcnQge0hEfTxicj5BbGwgSEQgc3BvcnRzIGNoYW5uZWxzLCBidXQgbm8gU3BhbmlzaCBhbmQgR2VybWFuOiBTcG9ydCB7SER9ICF7RVMsREV9IgogIG1lbnVfZmlsdGVyWyJuYW1lIl0gPSAiZmlsdGVyIjsKICBtZW51X2ZpbHRlclsiaWQiXSA9ICJNM1UiOwogIG1lbnVfZmlsdGVyWyJ2YWx1ZSJdID0gbWVudV9maWx0ZXJbIm5hbWUiXTsKICBtZW51X2ZpbHRlclsicGxhY2Vob2xkZXIiXSA9ICJGaWx0ZXIgc3RyZWFtczogU3BvcnQiOwogIG1lbnVfZmlsdGVyWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfZmlsdGVyWyJjbGFzcyJdID0gIm1lbnUtbm90QWN0aXZlIjsKCiAgdmFyIG1lbnVfaWQgPSBuZXcgT2JqZWN0KCk7CiAgbWVudV9pZFsiX21lbnVUeXBlIl0gPSAiaW5wdXRBcnJheSI7CiAgbWVudV9pZFsiX2VsZW1lbnQiXSA9ICJMSSI7CiAgbWVudV9pZFsiX2NvbmZpZ0tleSJdID0gImlkIjsKICBtZW51X2lkWyJfdGV4dCJdID0gIlBNUyBJRCI7CiAgbWVudV9pZFsiX2ljb24iXSA9ICJpbWcvbnVtYmVyLnBuZyI7CiAgbWVudV9pZFsiX2hlYWRsaW5lIl0gPSAiU2V0dXAgUE1TIGd1aWRlIG51bWJlciI7CiAgbWVudV9pZFsiX3VzYWdlIl0gPSAnU29tZSBwbGF5bGlzdHMgaGF2ZSB1bmlxdWUgY2hhbm5lbCBJRHMuPGJyPkVudGVyIHRoZSBrZXl3b3JkIG9mIHRoZSBJRC4gVGhlIGNoYW5uZWwgYXNzaWdubWVudCBpbiBQTVMgd2lsbCBjaGFuZ2UgYXMgYSByZXN1bHQuPGJyPjxicj5lLmcuIGNoYW5uZWxJRDxicj4jRVhUSU5GOjAgdHlwZT0ic3RyZWFtIiA8Yj5jaGFubmVsSWQ8L2I+PSI4MSIsIE15IFN0cmVhbWluZyBDaGFubmVsIEhEPGJyPjxicj5Pbmx5IGVudGVyIGhlcmUgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIScKICBtZW51X2lkWyJuYW1lIl0gPSAiaWQiOwogIG1lbnVfaWRbImlkIl0gPSAiaWQiOwogIG1lbnVfaWRbInZhbHVlIl0gPSBtZW51X2lkWyJuYW1lIl07CiAgbWVudV9pZFsicGxhY2Vob2xkZXIiXSA9ICJVbmlxdWUgSUQgZnJvbSB0aGUgTTNVIGZpbGUiOwogIG1lbnVfaWRbIm9uY2xpY2siXSA9ICJqYXZhc2NyaXB0OiB0b2dnbGVNZW51KHRoaXMpOyI7CiAgbWVudV9pZFsiY2xhc3MiXSA9ICJtZW51LW5vdEFjdGl2ZSI7CgoKICB2YXIgbWVudV94bWx0diA9IG5ldyBPYmplY3QoKTsKICBtZW51X3htbHR2WyJfbWVudVR5cGUiXSA9ICJpbnB1dEFycmF5IjsKICBtZW51X3htbHR2WyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X3htbHR2WyJfY29uZmlnS2V5Il0gPSAiZmlsZXMueG1sdHYiOwogIG1lbnVfeG1sdHZbIl90ZXh0Il0gPSAiWE1MVFYiOwogIG1lbnVfeG1sdHZbIl9pY29uIl0gPSAiaW1nL3htbHR2LnBuZyI7CiAgbWVudV94bWx0dlsiX2hlYWRsaW5lIl0gPSAiWE1MVFYgZmlsZXM6IExvY2FsIG9yIHJlbW90ZSI7CiAgbWVudV94bWx0dlsiX3VzYWdlIl0gPSAiPGI+SW5mbzo8L2I+PGJyPkF2YWlsYWJpbGl0eTogRmlsZSBhdmFpbGFiaWxpdHkgaW4gcGVyY2VudDxicj5DaGFubmVsczogICAgIE51bWJlciBvZiBjaGFubmVscyBpbiB0aGUgZmlsZTxicj5Qcm9ncmFtczogICAgIE51bWJlciBvZiBFUEcgZGF0YTxicj48YnI+PGI+VXNhZ2U6PC9iPjxicj5SZW1vdGUgWE1MVFYgZmlsZTogaHR0cDovL3lvdXIuZXBnLnByb3ZpZGVyLmNvbS9ndWlkZS54bWw8YnI+TG9jYWwgIFhNTFRWIGZpbGU6IC9wYXRoL3RvL2d1aWRlLnhtbCIKICBtZW51X3htbHR2WyJuYW1lIl0gPSAieG1sdHYiOwogIG1lbnVfeG1sdHZbImlkIl0gPSAieG1sdHYiOwogIG1lbnVfeG1sdHZbInZhbHVlIl0gPSBtZW51X3htbHR2WyJuYW1lIl07CiAgbWVudV94bWx0dlsicGxhY2Vob2xkZXIiXSA9ICJYTUxUViBGaWxlOiBsb2NhbCBvciByZW1vdGUiOwogIG1lbnVfeG1sdHZbIm9uY2xpY2siXSA9ICJqYXZhc2NyaXB0OiB0b2dnbGVNZW51KHRoaXMpOyI7CiAgbWVudV94bWx0dlsiY2xhc3MiXSA9ICJtZW51LW5vdEFjdGl2ZSI7CgogIG1lbnVfbWFwcGluZyA9IG5ldyBPYmplY3QoKTsKICBtZW51X21hcHBpbmdbIl9lbGVtZW50Il0gPSAiTEkiOwogIG1lbnVfbWFwcGluZ1siX3RleHQiXSA9ICJNYXBwaW5nIjsKICBtZW51X21hcHBpbmdbIl9pY29uIl0gPSAiaW1nL21hcHBpbmcucG5nIjsKICBtZW51X21hcHBpbmdbIl9jb25maWdLZXkiXSA9ICJtYXBwaW5nIjsKICBtZW51X21hcHBpbmdbIl9oZWFkbGluZSJdID0gIlhNTFRWIGFzc2lnbm1lbnQgYW5kIHNvcnRpbmcgb2YgY2hhbm5lbHMiOwogIG1lbnVfbWFwcGluZ1siaWQiXSA9ICJtYXBwaW5nIjsKICBtZW51X21hcHBpbmdbIm9uY2xpY2siXSA9ICJqYXZhc2NyaXB0OiB0b2dnbGVNZW51KHRoaXMpOyI7CiAgbWVudV9tYXBwaW5nWyJjbGFzcyJdID0gIm1lbnUtbm90QWN0aXZlIHBob25lIjsKCiAgbWVudV91c2VycyA9IG5ldyBPYmplY3QoKTsKICBtZW51X3VzZXJzWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X3VzZXJzWyJfdGV4dCJdID0gIlVzZXJzIjsKICBtZW51X3VzZXJzWyJfaWNvbiJdID0gImltZy91c2Vycy5wbmciOwogIG1lbnVfdXNlcnNbIl9jb25maWdLZXkiXSA9ICJ1c2VycyI7CiAgbWVudV91c2Vyc1siX2hlYWRsaW5lIl0gPSAiQWRtaW5pc3RyYXRpb24gb2YgdXNlcnMgYW5kIHBlcm1pc3Npb25zIjsKICBtZW51X3VzZXJzWyJpZCJdID0gInVzZXJzIjsKICBtZW51X3VzZXJzWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfdXNlcnNbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwogIG1lbnVfdXNlcnNbIl91c2FnZSJdID0gIjxiPkF1dGhvcml6YXRpb24gZ3JvdXBzOjwvYj48YnI+V0VCOiBVc2VycyBjYW4gbG9nIGluIHRvIHRoZSB3ZWIgaW50ZXJmYWNlPGJyPlBNUzogUHJvZ3JhbXMgbGlrZSBQbGV4IGNhbiBhY2Nlc3MgdGhlIGNoYW5uZWwgbGlzdC4gTG9naW4gdmlhIERWUiBJUDogdXNlcm5hbWU6cGFzc3dvcmRAdGhyZWFkZmluLmlwOnBvcnQ8YnI+TTNVOiBBbGxvd3MgY2xpZW50cyB0byBkb3dubG9hZCB0aGUgTTNVIHBsYXlsaXN0Ljxicj5YTUw6IEFsbG93cyBjbGllbnRzIHRvIGRvd25sb2FkIHRoZSBYTUxUViBmaWxlLjxicj5BUEk6IEFsbG93cyBjbGllbnRzIHRvIHVzZSB0aGUgQVBJIGludGVyZmFjZS48YnI+PGJyPiEhISBGb3IgUE1TIGF1dGhlbnRpY2F0aW9uLCBvbmx5IHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSB2YWxpZDogISQoKT0uLC06Ozxicj48YnI+VGhlIGluZGl2aWR1YWwgYXV0aGVudGljYXRpb24gZ3JvdXBzIGNhbiBiZSBhY3RpdmF0ZWQgLyBkZWFjdGl2YXRlZCBpbiB0aGUgc2V0dGluZ3MgbWVudS4iCgogIG1lbnVfc2V0dGluZ3MgPSBuZXcgT2JqZWN0KCk7CiAgbWVudV9zZXR0aW5nc1siX2VsZW1lbnQiXSA9ICJMSSI7CiAgbWVudV9zZXR0aW5nc1siX3RleHQiXSA9ICJTZXR0aW5ncyI7CiAgbWVudV9zZXR0aW5nc1siX2ljb24iXSA9ICJpbWcvc2V0dGluZ3MucG5nIjsKICBtZW51X3NldHRpbmdzWyJfY29uZmlnS2V5Il0gPSAic2V0dGluZ3MiOwogIG1lbnVfc2V0dGluZ3NbIl9oZWFkbGluZSJdID0gIlNldHRpbmdzIjsKICBtZW51X3NldHRpbmdzWyJfc3ViTWVudSJdID0gIjcwMSw3MDIsNzAzLDcwNCw3MDUsNzA2LDcwNyw3MDgsNzk5LDcxMCw3MTEsNzEyLDcxMyw3MTQiOwogIG1lbnVfc2V0dGluZ3NbImlkIl0gPSAic2V0dGluZ3MiOwogIG1lbnVfc2V0dGluZ3NbIm9uY2xpY2siXSA9ICJqYXZhc2NyaXB0OiB0b2dnbGVNZW51KHRoaXMpOyI7CiAgbWVudV9zZXR0aW5nc1siY2xhc3MiXSA9ICJtZW51LW5vdEFjdGl2ZSI7CgogIG1lbnVfbG9nID0gbmV3IE9iamVjdCgpOwogIG1lbnVfbG9nWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2xvZ1siX3RleHQiXSA9ICJMb2ciOwogIG1lbnVfbG9nWyJfaWNvbiJdID0gImltZy9sb2cucG5nIjsKICBtZW51X2xvZ1siX2hlYWRsaW5lIl0gPSAiTG9nIjsKICBtZW51X2xvZ1siX2NvbmZpZ0tleSJdID0gImxvZyI7CiAgbWVudV9sb2dbImlkIl0gPSAibG9nIjsKICBtZW51X2xvZ1sib25jbGljayJdID0gImphdmFzY3JpcHQ6IHRvZ2dsZU1lbnUodGhpcyk7IjsKICBtZW51X2xvZ1siY2xhc3MiXSA9ICJtZW51LW5vdEFjdGl2ZSI7CgogIG1lbnVfbG9nb3V0ID0gbmV3IE9iamVjdCgpOwogIG1lbnVfbG9nb3V0WyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2xvZ291dFsiX3RleHQiXSA9ICJMb2dvdXQiOwogIG1lbnVfbG9nb3V0WyJfaWNvbiJdID0gImltZy9sb2dvdXQucG5nIjsKICBtZW51X2xvZ291dFsiaWQiXSA9ICJsb2dvdXQiOwogIG1lbnVfbG9nb3V0WyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogbG9nb3V0KCk7IjsKICBtZW51X2xvZ291dFsiY2xhc3MiXSA9ICJtZW51LW5vdEFjdGl2ZSI7CgogIHZhciBtZW51X3NjaGVkdWxlID0gbmV3IE9iamVjdCgpOwogIG1lbnVfc2NoZWR1bGVbIl9tZW51VHlwZSJdID0gImlucHV0QXJyYXkiOwogIG1lbnVfc2NoZWR1bGVbIl9lbGVtZW50Il0gPSAiTEkiOwogIG1lbnVfc2NoZWR1bGVbIl9jb25maWdLZXkiXSA9ICJ1cGRhdGUiOwogIG1lbnVfc2NoZWR1bGVbIl90ZXh0Il0gPSAiU2NoZWR1bGUiOwogIG1lbnVfc2NoZWR1bGVbIl9pY29uIl0gPSAiaW1nL3NjaGVkdWxlLnBuZyI7CiAgbWVudV9zY2hlZHVsZVsiX2hlYWRsaW5lIl0gPSAiU2NoZWR1bGUgZm9yIHVwZGF0aW5nIE0zVSwgWE1MVFYgZmlsZXMgYW5kIGNyZWF0aW5nIGEgbG9jYWwgYmFja3VwIjsKICBtZW51X3NjaGVkdWxlWyJfdXNhZ2UiXSA9ICI8Yj5Vc2FnZTo8L2I+PGJyPjA4MTUgPSA4OjE1IGFtPGJyPjE5MzAgPSA3OjMwIHBtIgogIG1lbnVfc2NoZWR1bGVbIm5hbWUiXSA9ICJ1cGRhdGUiOwogIG1lbnVfc2NoZWR1bGVbImlkIl0gPSAidXBkYXRlIjsKICBtZW51X3NjaGVkdWxlWyJ2YWx1ZSJdID0gbWVudV9pZFsibmFtZSJdOwogIG1lbnVfc2NoZWR1bGVbInBsYWNlaG9sZGVyIl0gPSAidGltZSBvZiBkYXkgKDI0LWhvdXIgY2xvY2spIjsKICBtZW51X3NjaGVkdWxlWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfc2NoZWR1bGVbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwoKICB2YXIgbWVudV9maWxlc1VwZGF0ZSA9IG5ldyBPYmplY3QoKTsKICBtZW51X2ZpbGVzVXBkYXRlWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2ZpbGVzVXBkYXRlWyJfbWVudVR5cGUiXSA9ICJjaGVja2JveCI7CiAgbWVudV9maWxlc1VwZGF0ZVsiX2NvbmZpZ0tleSJdID0gImZpbGVzLnVwZGF0ZSI7CiAgbWVudV9maWxlc1VwZGF0ZVsiX2xhYmVsIl0gPSAiVXBkYXRlIHRoZSBwcm92aWRlciBmaWxlcyBhdCBzeXN0ZW0gc3RhcnR1cCI7CiAgbWVudV9maWxlc1VwZGF0ZVsiX2hlYWRsaW5lIl0gPSAiVXBkYXRlIHRoZSBwcm92aWRlciBmaWxlcyBhdCBzeXN0ZW0gc3RhcnR1cCI7CiAgbWVudV9maWxlc1VwZGF0ZVsiX3VzYWdlIl0gPSAiUGxheWxpc3RzIGFuZCBYTUxUViBmaWxlcyBhcmUgdXBkYXRlZCBieSBUaHJlYWRmaW4gYXQgc3lzdGVtIHN0YXJ0dXAuIgogIG1lbnVfZmlsZXNVcGRhdGVbIm5hbWUiXSA9ICJmaWxlcy51cGRhdGUiOwogIG1lbnVfZmlsZXNVcGRhdGVbImlkIl0gPSAiZmlsZXMudXBkYXRlIjsKICBtZW51X2ZpbGVzVXBkYXRlWyJ2YWx1ZSJdID0gbWVudV9maWxlc1VwZGF0ZVsibmFtZSJdOwogIG1lbnVfZmlsZXNVcGRhdGVbIm9uY2xpY2siXSA9ICJqYXZhc2NyaXB0OiB0b2dnbGVNZW51KHRoaXMpOyI7CiAgbWVudV9maWxlc1VwZGF0ZVsiY2xhc3MiXSA9ICJtZW51LW5vdEFjdGl2ZSI7CgogIHZhciBtZW51X3R1bmVyID0gbmV3IE9iamVjdCgpOwogIG1lbnVfdHVuZXJbIl9lbGVtZW50Il0gPSAiTEkiOwogIG1lbnVfdHVuZXJbIl9tZW51VHlwZSJdID0gInNlbGVjdCI7CiAgbWVudV90dW5lclsiX2NvbmZpZ0tleSJdID0gInR1bmVyIjsKICBtZW51X3R1bmVyWyJfbGFiZWwiXSA9ICJBdmFpbGFibGUgdHVuZXJzIjsKICBtZW51X3R1bmVyWyJfdGV4dCJdID0gIlR1bmVyIjsKICBtZW51X3R1bmVyWyJfaWNvbiJdID0gImltZy90dW5lci5wbmciOwogIG1lbnVfdHVuZXJbIl9oZWFkbGluZSJdID0gIk51bWJlciBvZiB0dW5lcnMiOwogIG1lbnVfdHVuZXJbIl91c2FnZSJdID0gIlRoaXMgc2V0dGluZyBpcyBvbmx5IHVzZWQgYnkgUGxleCBhbmQgRW1ieS48YnI+VGhlIG51bWJlciBvZiBjb25jdXJyZW50IHN0cmVhbXMgYWxsb3dlZCBieSB0aGUgSVBUViBwcm92aWRlci48YnI+QWZ0ZXIgYSBjaGFuZ2UsIFRocmVhZGZpbiBtdXN0IGJlIGRlbGV0ZSBpbiB0aGUgUE1TIERWUiBzZXR0aW5ncyBhbmQgc2V0IHVwIGFnYWluLiIKICBtZW51X3R1bmVyWyJuYW1lIl0gPSAidHVuZXIiOwogIG1lbnVfdHVuZXJbImlkIl0gPSAidHVuZXIiOwogIG1lbnVfdHVuZXJbInZhbHVlIl0gPSBtZW51X3R1bmVyWyJuYW1lIl07CiAgbWVudV90dW5lclsicGxhY2Vob2xkZXIiXSA9ICJOdW1iZXIgb2YgdHVuZXJzIjsKICBtZW51X3R1bmVyWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfdHVuZXJbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwoKICB2YXIgb3B0aW9uVmFsdWVzID0gbmV3IEFycmF5KCk7CiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMTAwOyBpKyspIHsKICAgIG9wdGlvblZhbHVlcy5wdXNoKGkpCiAgfQogIG1lbnVfdHVuZXJbIl9vcHRpb25WYWx1ZXMiXSA9IG9wdGlvblZhbHVlczsKCiAgdmFyIG1lbnVfZXBnID0gbmV3IE9iamVjdCgpOwogIG1lbnVfZXBnWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2VwZ1siX21lbnVUeXBlIl0gPSAic2VsZWN0IjsKICBtZW51X2VwZ1siX2NvbmZpZ0tleSJdID0gImVwZ1NvdXJjZSI7CiAgbWVudV9lcGdbIl9sYWJlbCJdID0gIlNlbGVjdGlvbiBvZiB0aGUgRVBHIHNvdXJjZSI7CiAgbWVudV9lcGdbIl90ZXh0Il0gPSAiRVBHIHNvdXJjZSI7CiAgbWVudV9lcGdbIl9oZWFkbGluZSJdID0gIlNlbGVjdGlvbiBvZiB0aGUgRVBHIHNvdXJjZSI7CiAgbWVudV9lcGdbIl91c2FnZSJdID0gIlBNUzogICBVc2UgRVBHIGRhdGEgZnJvbSBQbGV4IG9yIEVtYnkuPGJyPlhFUEc6ICBVc2Ugb2YgZXh0ZXJuYWwgRVBHIGRhdGEgKFhNTFRWKS48YnI+ICAgICAgIFNldmVyYWwgWE1MVFYgc291cmNlcyBwb3NzaWJsZS48YnI+ICAgICAgIEFsbG93cyBlZGl0aW5nIGFuZCBvcmRlciBjaGFubmVscy48YnI+ICAgICAgIE0zVSAvIFhNTFRWIGV4cG9ydCAoSFRUUCBsaW5rIGZvciBJUFRWIGFwcHMpLiIKICBtZW51X2VwZ1sibmFtZSJdID0gImVwZ1NvdXJjZSI7CiAgbWVudV9lcGdbImlkIl0gPSAiZXBnU291cmNlIjsKICBtZW51X2VwZ1sidmFsdWUiXSA9IG1lbnVfZXBnWyJuYW1lIl07CiAgbWVudV9lcGdbInBsYWNlaG9sZGVyIl0gPSAiRVBHIHNvdXJjZSI7CiAgbWVudV9lcGdbIm9uY2xpY2siXSA9ICJqYXZhc2NyaXB0OiB0b2dnbGVNZW51KHRoaXMpOyI7CiAgbWVudV9lcGdbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwogIG1lbnVfZXBnWyJfb3B0aW9uVmFsdWVzIl0gPSBuZXcgQXJyYXkoIlBNUyIsICJYRVBHIik7CgogIHZhciBtZW51X3hlcGcgPSBuZXcgT2JqZWN0KCk7CiAgbWVudV94ZXBnWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X3hlcGdbIl9tZW51VHlwZSJdID0gImNoZWNrYm94IjsKICBtZW51X3hlcGdbIl9jb25maWdLZXkiXSA9ICJUaHJlYWRmaW5BdXRvVXBkYXRlIjsKICBtZW51X3hlcGdbIl9sYWJlbCJdID0gIkF1dG9tYXRpYyB1cGRhdGUgb2YgVGhyZWFkZmluIjsKICBtZW51X3hlcGdbIl9oZWFkbGluZSJdID0gIkF1dG9tYXRpYyB1cGRhdGUgb2YgVGhyZWFkZmluIjsKICBtZW51X3hlcGdbIl91c2FnZSJdID0gIklmIGEgbmV3IHZlcnNpb24gb2YgVGhyZWFkZmluIGlzIGF2YWlsYWJsZSwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZC4iCiAgbWVudV94ZXBnWyJuYW1lIl0gPSAiVGhyZWFkZmluQXV0b1VwZGF0ZSI7CiAgbWVudV94ZXBnWyJpZCJdID0gIlRocmVhZGZpbkF1dG9VcGRhdGUiOwogIG1lbnVfeGVwZ1sidmFsdWUiXSA9IG1lbnVfeGVwZ1sibmFtZSJdOwogIG1lbnVfeGVwZ1sib25jbGljayJdID0gImphdmFzY3JpcHQ6IHRvZ2dsZU1lbnUodGhpcyk7IjsKICBtZW51X3hlcGdbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwoKICB2YXIgbWVudV9hdXRvQmFja3VwUGF0aCA9IG5ldyBPYmplY3QoKTsKICBtZW51X2F1dG9CYWNrdXBQYXRoWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2F1dG9CYWNrdXBQYXRoWyJfbWVudVR5cGUiXSA9ICJzaW5nbGVJbnB1dCI7CiAgbWVudV9hdXRvQmFja3VwUGF0aFsiX2NvbmZpZ0tleSJdID0gImJhY2t1cC5wYXRoIjsKICBtZW51X2F1dG9CYWNrdXBQYXRoWyJfbGFiZWwiXSA9ICJMb2NhdGlvbiBmb3IgYXV0b21hdGljIGJhY2t1cHMiOwogIG1lbnVfYXV0b0JhY2t1cFBhdGhbIl9oZWFkbGluZSJdID0gIkxvY2F0aW9uIGZvciBhdXRvbWF0aWMgYmFja3VwcyI7CiAgbWVudV9hdXRvQmFja3VwUGF0aFsiX3VzYWdlIl0gPSAiQmVmb3JlIGFueSB1cGRhdGUgb2YgdGhlIHByb3ZpZGVyIGRhdGEgYnkgdGhlIHNjaGVkdWxlLCBUaHJlYWRmaW4gY3JlYXRlcyBhIGJhY2t1cC4gVGhlIHBhdGggZm9yIHRoZSBhdXRvbWF0aWMgYmFja3VwcyBjYW4gYmUgY2hhbmdlZC4gVGhyZWFkZmluIHJlcXVpcmVzIHdyaXRlIHBlcm1pc3Npb24gZm9yIHRoaXMgZm9sZGVyLiIKICBtZW51X2F1dG9CYWNrdXBQYXRoWyJuYW1lIl0gPSAiYmFja3VwLnBhdGgiOwogIG1lbnVfYXV0b0JhY2t1cFBhdGhbImlkIl0gPSAiYmFja3VwLnBhdGgiOwogIG1lbnVfYXV0b0JhY2t1cFBhdGhbInZhbHVlIl0gPSBtZW51X2F1dG9CYWNrdXBQYXRoWyJuYW1lIl07CiAgbWVudV9hdXRvQmFja3VwUGF0aFsib25jbGljayJdID0gImphdmFzY3JpcHQ6IHRvZ2dsZU1lbnUodGhpcyk7IjsKICBtZW51X2F1dG9CYWNrdXBQYXRoWyJjbGFzcyJdID0gIm1lbnUtbm90QWN0aXZlIjsKCiAgdmFyIG1lbnVfYXV0b0JhY2t1cEtlZXAgPSBuZXcgT2JqZWN0KCk7CiAgbWVudV9hdXRvQmFja3VwS2VlcFsiX2VsZW1lbnQiXSA9ICJMSSI7CiAgbWVudV9hdXRvQmFja3VwS2VlcFsiX21lbnVUeXBlIl0gPSAic2VsZWN0IjsKICBtZW51X2F1dG9CYWNrdXBLZWVwWyJfY29uZmlnS2V5Il0gPSAiYmFja3VwLmtlZXAiOwogIG1lbnVfYXV0b0JhY2t1cEtlZXBbIl90ZXh0Il0gPSAiS2VlcCI7CiAgbWVudV9hdXRvQmFja3VwS2VlcFsiX2xhYmVsIl0gPSAiTnVtYmVyIG9mIGJhY2t1cHMgdG8ga2VlcCI7CiAgbWVudV9hdXRvQmFja3VwS2VlcFsiX2hlYWRsaW5lIl0gPSAiTnVtYmVyIG9mIGJhY2t1cHMgdG8ga2VlcCI7CiAgbWVudV9hdXRvQmFja3VwS2VlcFsiX3VzYWdlIl0gPSAiIgogIG1lbnVfYXV0b0JhY2t1cEtlZXBbIm5hbWUiXSA9ICJiYWNrdXAua2VlcCI7CiAgbWVudV9hdXRvQmFja3VwS2VlcFsiaWQiXSA9ICJiYWNrdXAua2VlcCI7CiAgbWVudV9hdXRvQmFja3VwS2VlcFsidmFsdWUiXSA9IG1lbnVfYXV0b0JhY2t1cEtlZXBbIm5hbWUiXTsKICBtZW51X2F1dG9CYWNrdXBLZWVwWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfYXV0b0JhY2t1cEtlZXBbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwoKICB2YXIgb3B0aW9uVmFsdWVzID0gbmV3IEFycmF5KDUsIDEwLCAyMCwgMzAsIDQwLCA1MCk7CiAgbWVudV9hdXRvQmFja3VwS2VlcFsiX29wdGlvblZhbHVlcyJdID0gb3B0aW9uVmFsdWVzOwoKCiAgdmFyIG1lbnVfYnVmZmVyID0gbmV3IE9iamVjdCgpOwogIG1lbnVfYnVmZmVyWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2J1ZmZlclsiX21lbnVUeXBlIl0gPSAiY2hlY2tib3giOwogIG1lbnVfYnVmZmVyWyJfY29uZmlnS2V5Il0gPSAiYnVmZmVyIjsKICBtZW51X2J1ZmZlclsiX2xhYmVsIl0gPSAiU3RyZWFtIGJ1ZmZlcmluZyBbRXhwZXJpbWVudGFsXSI7CiAgbWVudV9idWZmZXJbIl9oZWFkbGluZSJdID0gIlN0cmVhbSBidWZmZXJpbmcgW0V4cGVyaW1lbnRhbF0iOwogIG1lbnVfYnVmZmVyWyJfdXNhZ2UiXSA9ICJXaXRoIGFjdGl2YXRlZCBidWZmZXIsIHN0cmVhbXMgY2FuIGJlIHBsYXllZCBhbmQgcmVjb3JkZWQgbW9yZSBmbHVlbnRseS48YnI+VGhlIHN0cmVhbSBpcyBwYXNzZWQgZnJvbSBUaHJlYWRmaW4gdG8gUGxleCAvIEVtYnkiCiAgbWVudV9idWZmZXJbIm5hbWUiXSA9ICJidWZmZXIiOwogIG1lbnVfYnVmZmVyWyJpZCJdID0gImJ1ZmZlciI7CiAgbWVudV9idWZmZXJbInZhbHVlIl0gPSBtZW51X2J1ZmZlclsibmFtZSJdOwogIG1lbnVfYnVmZmVyWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfYnVmZmVyWyJjbGFzcyJdID0gIm1lbnUtbm90QWN0aXZlIjsKCiAgdmFyIG1lbnVfYXBpID0gbmV3IE9iamVjdCgpOwogIG1lbnVfYXBpWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2FwaVsiX21lbnVUeXBlIl0gPSAiY2hlY2tib3giOwogIG1lbnVfYXBpWyJfY29uZmlnS2V5Il0gPSAiYXBpIjsKICBtZW51X2FwaVsiX2xhYmVsIl0gPSAiQVBJIGludGVyZmFjZSI7CiAgbWVudV9hcGlbIl9oZWFkbGluZSJdID0gIkFQSSBpbnRlcmZhY2UiOwogIG1lbnVfYXBpWyJfdXNhZ2UiXSA9ICdWaWEgQVBJIGludGVyZmFjZSBpdCBpcyBwb3NzaWJsZSB0byBzZW5kIGNvbW1hbmRzIHRvIFRocmVhZGZpbi4gQVBJIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIDxhIGhyZWY9Imh0dHBzOi8vdGhyZWFkZmluLmRlP3Njcm9sbD1hcGkiPmhlcmU8L2E+ICcKICAvL21lbnVfYXBpWyJfdXNhZ2UiXSAgICAgICAgPSAnVmlhIEFQSSBpbnRlcmZhY2UgaXQgaXMgcG9zc2libGUgdG8gc2VuZCBjb21tYW5kcyB0byBUaHJlYWRmaW4uIEFQSSBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSA8YSBocmVmPSJodHRwOi8vbG9jYWxob3N0OjEzMTM/c2Nyb2xsPWFwaSI+aGVyZTwvYT4gJwogIG1lbnVfYXBpWyJuYW1lIl0gPSAiYXBpIjsKICBtZW51X2FwaVsiaWQiXSA9ICJhcGkiOwogIG1lbnVfYXBpWyJ2YWx1ZSJdID0gbWVudV9hcGlbIm5hbWUiXTsKICBtZW51X2FwaVsib25jbGljayJdID0gImphdmFzY3JpcHQ6IHRvZ2dsZU1lbnUodGhpcyk7IjsKICBtZW51X2FwaVsiY2xhc3MiXSA9ICJtZW51LW5vdEFjdGl2ZSI7CgogIHZhciBtZW51X2F1dGhlbnRpY2F0aW9uV2ViID0gbmV3IE9iamVjdCgpOwogIG1lbnVfYXV0aGVudGljYXRpb25XZWJbIl9lbGVtZW50Il0gPSAiTEkiOwogIG1lbnVfYXV0aGVudGljYXRpb25XZWJbIl9tZW51VHlwZSJdID0gImNoZWNrYm94IjsKICBtZW51X2F1dGhlbnRpY2F0aW9uV2ViWyJfY29uZmlnS2V5Il0gPSAiYXV0aGVudGljYXRpb24ud2ViIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uV2ViWyJfbGFiZWwiXSA9ICJVc2VyIGF1dGhlbnRpY2F0aW9uIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uV2ViWyJfaGVhZGxpbmUiXSA9ICJVc2VyIGF1dGhlbnRpY2F0aW9uIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uV2ViWyJfdXNhZ2UiXSA9ICJBY2Nlc3MgdG8gVGhyZWFkZmluIHJlcXVpcmVzIGF1dGhlbnRpY2F0aW9uLiIKICBtZW51X2F1dGhlbnRpY2F0aW9uV2ViWyJuYW1lIl0gPSAiYXV0aGVudGljYXRpb24ud2ViIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uV2ViWyJpZCJdID0gImF1dGhlbnRpY2F0aW9uLndlYiI7CiAgbWVudV9hdXRoZW50aWNhdGlvbldlYlsidmFsdWUiXSA9IG1lbnVfYXV0aGVudGljYXRpb25XZWJbIm5hbWUiXTsKICBtZW51X2F1dGhlbnRpY2F0aW9uV2ViWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfYXV0aGVudGljYXRpb25XZWJbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwoKICB2YXIgbWVudV9hdXRoZW50aWNhdGlvblBtcyA9IG5ldyBPYmplY3QoKTsKICBtZW51X2F1dGhlbnRpY2F0aW9uUG1zWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uUG1zWyJfbWVudVR5cGUiXSA9ICJjaGVja2JveCI7CiAgbWVudV9hdXRoZW50aWNhdGlvblBtc1siX2NvbmZpZ0tleSJdID0gImF1dGhlbnRpY2F0aW9uLnBtcyI7CiAgbWVudV9hdXRoZW50aWNhdGlvblBtc1siX2xhYmVsIl0gPSAiUGxleCBhdXRoZW50aWNhdGlvbi4iOwogIG1lbnVfYXV0aGVudGljYXRpb25QbXNbIl9oZWFkbGluZSJdID0gIlBsZXggYXV0aGVudGljYXRpb24uIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uUG1zWyJfdXNhZ2UiXSA9ICJQbGV4IHJlcXVlc3RzIGFyZSBvbmx5IHBvc3NpYmxlIHdpdGggYXV0aGVudGljYXRpb24uPGJyPldhcm5pbmchISEgQWZ0ZXIgYWN0aXZhdGluZyB0aGlzIGZ1bmN0aW9uIFRocmVhZGZpbiBtdXN0IGJlIGRlbGV0ZSBpbiB0aGUgUE1TIERWUiBzZXR0aW5ncyBhbmQgc2V0IHVwIGFnYWluLiIKICBtZW51X2F1dGhlbnRpY2F0aW9uUG1zWyJuYW1lIl0gPSAiYXV0aGVudGljYXRpb24ucG1zIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uUG1zWyJpZCJdID0gImF1dGhlbnRpY2F0aW9uLnBtcyI7CiAgbWVudV9hdXRoZW50aWNhdGlvblBtc1sidmFsdWUiXSA9IG1lbnVfYXV0aGVudGljYXRpb25QbXNbIm5hbWUiXTsKICBtZW51X2F1dGhlbnRpY2F0aW9uUG1zWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfYXV0aGVudGljYXRpb25QbXNbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwoKICB2YXIgbWVudV9hdXRoZW50aWNhdGlvbk0zdSA9IG5ldyBPYmplY3QoKTsKICBtZW51X2F1dGhlbnRpY2F0aW9uTTN1WyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uTTN1WyJfbWVudVR5cGUiXSA9ICJjaGVja2JveCI7CiAgbWVudV9hdXRoZW50aWNhdGlvbk0zdVsiX2NvbmZpZ0tleSJdID0gImF1dGhlbnRpY2F0aW9uLm0zdSI7CiAgbWVudV9hdXRoZW50aWNhdGlvbk0zdVsiX2xhYmVsIl0gPSAiTTNVIGF1dGhlbnRpY2F0aW9uLiI7CiAgbWVudV9hdXRoZW50aWNhdGlvbk0zdVsiX2hlYWRsaW5lIl0gPSAiTTNVIGF1dGhlbnRpY2F0aW9uLiI7CiAgbWVudV9hdXRoZW50aWNhdGlvbk0zdVsiX3VzYWdlIl0gPSAiRG93bmxvYWRpbmcgdGhlIE0zVSBmaWxlIHZpYSBhbiBIVFRQIHJlcXVlc3QgaXMgb25seSBwb3NzaWJsZSB3aXRoIGF1dGhlbnRpY2F0aW9uLiIKICBtZW51X2F1dGhlbnRpY2F0aW9uTTN1WyJuYW1lIl0gPSAiYXV0aGVudGljYXRpb24ubTN1IjsKICBtZW51X2F1dGhlbnRpY2F0aW9uTTN1WyJpZCJdID0gImF1dGhlbnRpY2F0aW9uLm0zdSI7CiAgbWVudV9hdXRoZW50aWNhdGlvbk0zdVsidmFsdWUiXSA9IG1lbnVfYXV0aGVudGljYXRpb25NM3VbIm5hbWUiXTsKICBtZW51X2F1dGhlbnRpY2F0aW9uTTN1WyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfYXV0aGVudGljYXRpb25NM3VbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwoKCiAgdmFyIG1lbnVfYXV0aGVudGljYXRpb25YbWwgPSBuZXcgT2JqZWN0KCk7CiAgbWVudV9hdXRoZW50aWNhdGlvblhtbFsiX2VsZW1lbnQiXSA9ICJMSSI7CiAgbWVudV9hdXRoZW50aWNhdGlvblhtbFsiX21lbnVUeXBlIl0gPSAiY2hlY2tib3giOwogIG1lbnVfYXV0aGVudGljYXRpb25YbWxbIl9jb25maWdLZXkiXSA9ICJhdXRoZW50aWNhdGlvbi54bWwiOwogIG1lbnVfYXV0aGVudGljYXRpb25YbWxbIl9sYWJlbCJdID0gIlhFUEcgYXV0aGVudGljYXRpb24iOwogIG1lbnVfYXV0aGVudGljYXRpb25YbWxbIl9oZWFkbGluZSJdID0gIlhFUEcgYXV0aGVudGljYXRpb24iOwogIG1lbnVfYXV0aGVudGljYXRpb25YbWxbIl91c2FnZSJdID0gIkRvd25sb2FkaW5nIHRoZSBYRVBHIChYTUxUVikgZmlsZSB2aWEgYW4gSFRUUCByZXF1ZXN0IGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbi4iCiAgbWVudV9hdXRoZW50aWNhdGlvblhtbFsibmFtZSJdID0gImF1dGhlbnRpY2F0aW9uLnhtbCI7CiAgbWVudV9hdXRoZW50aWNhdGlvblhtbFsiaWQiXSA9ICJhdXRoZW50aWNhdGlvbi54bWwiOwogIG1lbnVfYXV0aGVudGljYXRpb25YbWxbInZhbHVlIl0gPSBtZW51X2F1dGhlbnRpY2F0aW9uWG1sWyJuYW1lIl07CiAgbWVudV9hdXRoZW50aWNhdGlvblhtbFsib25jbGljayJdID0gImphdmFzY3JpcHQ6IHRvZ2dsZU1lbnUodGhpcyk7IjsKICBtZW51X2F1dGhlbnRpY2F0aW9uWG1sWyJjbGFzcyJdID0gIm1lbnUtbm90QWN0aXZlIjsKCiAgdmFyIG1lbnVfYXV0aGVudGljYXRpb25BcGkgPSBuZXcgT2JqZWN0KCk7CiAgbWVudV9hdXRoZW50aWNhdGlvbkFwaVsiX2VsZW1lbnQiXSA9ICJMSSI7CiAgbWVudV9hdXRoZW50aWNhdGlvbkFwaVsiX21lbnVUeXBlIl0gPSAiY2hlY2tib3giOwogIG1lbnVfYXV0aGVudGljYXRpb25BcGlbIl9jb25maWdLZXkiXSA9ICJhdXRoZW50aWNhdGlvbi5hcGkiOwogIG1lbnVfYXV0aGVudGljYXRpb25BcGlbIl9sYWJlbCJdID0gIkFQSSBhdXRoZW50aWNhdGlvbiI7CiAgbWVudV9hdXRoZW50aWNhdGlvbkFwaVsiX2hlYWRsaW5lIl0gPSAiQVBJIGF1dGhlbnRpY2F0aW9uIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uQXBpWyJfdXNhZ2UiXSA9ICJBY2Nlc3MgdG8gdGhlIEFQSSBpbnRlcmZhY2UgaXMgb25seSBwb3NzaWJsZSB3aXRoIGF1dGhlbnRpY2F0aW9uLiIKICBtZW51X2F1dGhlbnRpY2F0aW9uQXBpWyJuYW1lIl0gPSAiYXV0aGVudGljYXRpb24uYXBpIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uQXBpWyJpZCJdID0gImF1dGhlbnRpY2F0aW9uLmFwaSI7CiAgbWVudV9hdXRoZW50aWNhdGlvbkFwaVsidmFsdWUiXSA9IG1lbnVfYXV0aGVudGljYXRpb25BcGlbIm5hbWUiXTsKICBtZW51X2F1dGhlbnRpY2F0aW9uQXBpWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfYXV0aGVudGljYXRpb25BcGlbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwoKCiAgLy8gTWFpbiBtZW51CiAgbWVudVsxMF0gPSBtZW51X20zdTsKCiAgc3dpdGNoIChjb25maWdbImVwZ1NvdXJjZSJdKSB7CiAgICBjYXNlICJQTVMiOgogICAgICBtZW51WzIwXSA9IG1lbnVfaWQ7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgIlhNTFRWIjoKICAgICAgbWVudVs0MF0gPSBtZW51X3htbHR2OwogICAgICBicmVhazsKCiAgICBjYXNlICJYRVBHIjoKICAgICAgbWVudVs0MF0gPSBtZW51X3htbHR2OwogICAgICBtZW51WzUwXSA9IG1lbnVfbWFwcGluZzsKICAgICAgYnJlYWs7CiAgfQoKICBtZW51WzMwXSA9IG1lbnVfZmlsdGVyOwoKICBpZiAoY29uZmlnWyJhdXRoZW50aWNhdGlvbi53ZWIiXSA9PSB0cnVlKSB7CiAgICBtZW51WzYwXSA9IG1lbnVfdXNlcnM7CiAgfQoKICBtZW51WzcwXSA9IG1lbnVfc2V0dGluZ3M7CiAgbWVudVs4MF0gPSBtZW51X2xvZzsKICBpZiAoY29uZmlnWyJhdXRoZW50aWNhdGlvbi53ZWIiXSA9PSB0cnVlKSB7CiAgICBtZW51WzEwMF0gPSBtZW51X2xvZ291dDsKICB9CgoKICAvLyBTdWItTWVudQoKICBzdWJNZW51WzcwMV0gPSBtZW51X3NjaGVkdWxlOwogIHN1Yk1lbnVbNzAyXSA9IG1lbnVfZmlsZXNVcGRhdGU7CiAgc3ViTWVudVs3MDNdID0gbWVudV90dW5lcjsKICBzdWJNZW51WzcwNF0gPSBtZW51X2VwZzsKICBzdWJNZW51WzcwNV0gPSBtZW51X3hlcGc7CiAgc3ViTWVudVs3MDZdID0gbWVudV9hdXRvQmFja3VwUGF0aDsKICBzdWJNZW51WzcwN10gPSBtZW51X2F1dG9CYWNrdXBLZWVwOwogIHN1Yk1lbnVbNzA4XSA9IG1lbnVfYnVmZmVyOwoKICBzdWJNZW51WzcxMF0gPSBtZW51X2F1dGhlbnRpY2F0aW9uV2ViOwoKICBpZiAoY29uZmlnWyJhdXRoZW50aWNhdGlvbi53ZWIiXSA9PSB0cnVlKSB7CiAgICBzdWJNZW51WzcxMV0gPSBtZW51X2F1dGhlbnRpY2F0aW9uUG1zOwogICAgc3ViTWVudVs3MTJdID0gbWVudV9hdXRoZW50aWNhdGlvbk0zdTsKICAgIHN1Yk1lbnVbNzEzXSA9IG1lbnVfYXV0aGVudGljYXRpb25YbWw7CiAgICBzdWJNZW51WzcxNF0gPSBtZW51X2F1dGhlbnRpY2F0aW9uQXBpOwogIH0KCiAgc3ViTWVudVs3OTldID0gbWVudV9hcGk7CgoKCiAgcmV0dXJuCn0KCmZ1bmN0aW9uIGNyZWF0ZU1lbnUoKSB7CgogIHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsKCiAgLy9jb25zb2xlLmxvZyhjb25maWcpOwogIHNldE1lbnVJdGVtKCk7CiAgdmFyIG1lbnVJdGVtcyA9IGdldE9iaktleXMobWVudSkKICB2YXIgbmF2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIk5BViIpWzBdOwogIG5hdi5pbm5lckhUTUwgPSAiIjsKICB2YXIgbmV3SXRlbSA9IG5ldyBPYmplY3QoKTsKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZW51SXRlbXMubGVuZ3RoOyBpKyspIHsKCgogICAgdmFyIG5ld0l0ZW0gPSBtZW51W21lbnVJdGVtc1tpXV07CiAgICBuZXdJdGVtWyJpZCJdID0gbWVudUl0ZW1zW2ldOwoKCiAgICBzd2l0Y2ggKG5ld0l0ZW0uaGFzT3duUHJvcGVydHkoIl9pY29uIikpIHsKICAgICAgY2FzZSB0cnVlOgogICAgICAgIHZhciBpdGVtVGV4dCA9IG5ld0l0ZW1bIl90ZXh0Il07CiAgICAgICAgZGVsZXRlIG5ld0l0ZW1bIl90ZXh0Il0KICAgICAgICBuYXYuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdJdGVtKSk7CiAgICAgICAgbmV3SXRlbVsiX3RleHQiXSA9IGl0ZW1UZXh0OwogICAgICAgIHZhciBuZXdJY29uID0gbmV3IE9iamVjdCgpOwogICAgICAgIG5ld0ljb25bIl9lbGVtZW50Il0gPSAiSU1HIjsKICAgICAgICBuZXdJY29uWyJzcmMiXSA9IG5ld0l0ZW1bIl9pY29uIl07CgogICAgICAgIHZhciBjdXJyZW50RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1lbnVJdGVtc1tpXSk7CiAgICAgICAgY3VycmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdJY29uKSk7CgoKICAgICAgICB2YXIgdGV4dCA9IG5ldyBPYmplY3QoKTsKICAgICAgICB0ZXh0WyJfZWxlbWVudCJdID0gIlAiCiAgICAgICAgdGV4dFsiX3RleHQiXSA9IGl0ZW1UZXh0OwogICAgICAgIHRleHRbImNsYXNzIl0gPSAibmF2LXRleHQiCiAgICAgICAgY3VycmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCh0ZXh0KSk7CiAgICAgICAgYnJlYWs7CgogICAgICBkZWZhdWx0OgogICAgICAgIG5hdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0ljb24pKTsKICAgICAgICBicmVhazsKICAgIH0KCiAgfQogIGlmIChhY3RpdmVNZW51ICE9IHVuZGVmaW5lZCkgewogICAgLy9jb25zb2xlLmxvZyhhY3RpdmVNZW51KTsKICAgIHRvZ2dsZU1lbnUoYWN0aXZlTWVudSk7CiAgfQoKICByZXR1cm4KfQoKZnVuY3Rpb24gdG9nZ2xlTWVudShlbG0pIHsKICAvL3Nob3dTdHJlYW1zKGZhbHNlKTsKICBjbGVhckludGVydmFsKGxvZ0ludGVydmFsKQogIGFjdGl2ZU1lbnUgPSBlbG07CiAgdmFyIGl0ZW0gPSBtZW51W2VsbS5pZF0KICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNldHRpbmdzIik7CiAgZGl2LmlubmVySFRNTCA9ICIiOwoKICAvLyBTZXQgSGVhZGxpbmUKICB2YXIgaGVhZGxpbmUgPSBuZXcgT2JqZWN0KCk7CiAgaGVhZGxpbmVbIl9lbGVtZW50Il0gPSAiSDQiOwogIGhlYWRsaW5lWyJfdGV4dCJdID0gaXRlbVsiX2hlYWRsaW5lIl07CiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoaGVhZGxpbmUpKTsKCiAgLy8gU3ViLU1lbnUKICBpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgiX3N1Yk1lbnUiKSA9PSB0cnVlKSB7CiAgICBvcGVuU3ViTWVudShpdGVtKTsKICAgIHJldHVybgogIH0KCiAgLy8gTWFwcGluZywgVXNlcnMsIExvZywgRmlsZXMKICBzd2l0Y2ggKGl0ZW1bIl9jb25maWdLZXkiXSkgewogICAgY2FzZSAibWFwcGluZyI6IG9wZW5NYXBwaW5nRWRpdG9yKGl0ZW0pOyByZXR1cm47IGJyZWFrOwogICAgY2FzZSAidXNlcnMiOiBvcGVuVXNlcnMoaXRlbSk7IHJldHVybjsgYnJlYWs7CiAgICBjYXNlICJsb2ciOiBzaG93TG9nKGl0ZW0pOyByZXR1cm47IGJyZWFrOwogICAgY2FzZSAiZmlsZXMubTN1Ijogb3BlbkZpbGVzKGl0ZW0sICJtM3UiKTsgcmV0dXJuOyBicmVhazsKICAgIGNhc2UgImZpbGVzLnhtbHR2Ijogb3BlbkZpbGVzKGl0ZW0sICJ4bWx0diIpOyByZXR1cm47IGJyZWFrOwoKICAgIGNhc2UgImZpbHRlciI6IHNob3dTdHJlYW1zKHRydWUpOyBicmVhazsKICB9CgoKCiAgdmFyIG5ld0hSID0gbmV3IE9iamVjdCgpOwogIG5ld0hSWyJfZWxlbWVudCJdID0gIkhSIgogIGRpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0hSKSk7CgogIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CiAgbmV3RW50cnlbInR5cGUiXSA9ICJidXR0b24iOwogIC8vbmV3RW50cnlbImNsYXNzIl0gPSAic2F2ZSI7CiAgbmV3RW50cnlbInZhbHVlIl0gPSAiU2F2ZSI7CiAgbmV3RW50cnlbIm9uY2xpY2siXSA9ICJzYXZlRGF0YTIoJ3NldHRpbmdzJykiCiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKCgogIHZhciBuZXdXcmFwcGVyID0gbmV3IE9iamVjdCgpOwogIG5ld1dyYXBwZXJbIl9lbGVtZW50Il0gPSAiRElWIjsKICBuZXdXcmFwcGVyWyJpZCJdID0gImJveC13cmFwcGVyIjsKICBkaXYuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdXcmFwcGVyKSk7CgogIGRpdiA9IGRpdi5sYXN0Q2hpbGQ7CgogIGRpdi5hcHBlbmRDaGlsZChjcmVhdGVNZW51SXRlbShpdGVtKSkKCiAgLy8gdXNhZ2UgSW5mbyAgCiAgc3dpdGNoIChtZW51W2FjdGl2ZU1lbnUuaWRdLmhhc093blByb3BlcnR5KCJfdXNhZ2UiKSkgewogICAgY2FzZSB0cnVlOgogICAgICB2YXIgdXNhZ2VJdGVtID0gbmV3IE9iamVjdCgpOwogICAgICB1c2FnZUl0ZW1bIl9lbGVtZW50Il0gPSAiUFJFIgogICAgICB1c2FnZUl0ZW1bIl90ZXh0Il0gPSBtZW51W2FjdGl2ZU1lbnUuaWRdWyJfdXNhZ2UiXTsKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQodXNhZ2VJdGVtKSk7CiAgfQoKICBjYWxjdWxhdGVXcmFwcGVySGVpZ2h0KCk7Cgp9CgpmdW5jdGlvbiBjcmVhdGVNZW51SXRlbShpdGVtKSB7CiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTsKICBzd2l0Y2ggKGl0ZW1bIl9tZW51VHlwZSJdKSB7CiAgICBjYXNlICJpbnB1dEFycmF5IjoKICAgICAgaWYgKGNvbmZpZy5oYXNPd25Qcm9wZXJ0eShpdGVtWyJfY29uZmlnS2V5Il0pID09IHRydWUpIHsKICAgICAgICB2YXIgdmFsdWUgPSBjb25maWdbaXRlbVsiX2NvbmZpZ0tleSJdXTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgdmFsdWUgPSBuZXcgQXJyYXkoKTsKICAgICAgfQoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICAgICAgICBuZXdFbnRyeSA9IGl0ZW0KICAgICAgICBkZWxldGUgbmV3RW50cnlbIm9uY2xpY2siXTsKICAgICAgICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CiAgICAgICAgbmV3RW50cnlbInZhbHVlIl0gPSB2YWx1ZVtpXTsKICAgICAgICBuZXdFbnRyeVsidHlwZSJdID0gInNlYXJjaCI7CiAgICAgICAgbmV3RW50cnlbImRhdGEtbWVudXR5cGUiXSA9IGl0ZW1bIl9tZW51VHlwZSJdOwogICAgICAgIG5ld0VudHJ5WyJkYXRhLW1lbnVrZXkiXSA9IGl0ZW1bIl9jb25maWdLZXkiXTsKICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKCiAgICAgIH0KICAgICAgLy8gTmV3IGVudHJ5IGZvciBhcnJheQogICAgICB2YXIgbmV3RW50cnkgPSBuZXcgT2JqZWN0KCk7CiAgICAgIG5ld0VudHJ5WyJfZWxlbWVudCJdID0gIklOUFVUIjsKICAgICAgbmV3RW50cnlbInR5cGUiXSA9ICJzZWFyY2giOwogICAgICBuZXdFbnRyeVsibmFtZSJdID0gaXRlbVsibmFtZSJdOwogICAgICBuZXdFbnRyeVsicGxhY2Vob2xkZXIiXSA9IGl0ZW1bInBsYWNlaG9sZGVyIl07CiAgICAgIG5ld0VudHJ5WyJ2YWx1ZSJdID0gIiI7CiAgICAgIG5ld0VudHJ5WyJkYXRhLW1lbnV0eXBlIl0gPSBpdGVtWyJfbWVudVR5cGUiXTsKICAgICAgbmV3RW50cnlbImRhdGEtbWVudWtleSJdID0gaXRlbVsiX2NvbmZpZ0tleSJdOwogICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKICAgICAgYnJlYWs7CgogICAgY2FzZSAic2luZ2xlSW5wdXQiOgogICAgICB2YXIgdmFsdWUgPSBjb25maWdbaXRlbVsiX2NvbmZpZ0tleSJdXTsKICAgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgewogICAgICAgIHZhbHVlID0gIiI7CiAgICAgIH0KICAgICAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdCgpOwogICAgICBuZXdFbnRyeSA9IGl0ZW07CiAgICAgIGRlbGV0ZSBuZXdFbnRyeVsib25jbGljayJdOwogICAgICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CiAgICAgIG5ld0VudHJ5WyJ2YWx1ZSJdID0gdmFsdWU7CiAgICAgIG5ld0VudHJ5WyJ0eXBlIl0gPSAic2VhcmNoIjsKICAgICAgbmV3RW50cnlbImRhdGEtbWVudXR5cGUiXSA9IGl0ZW1bIl9tZW51VHlwZSJdOwogICAgICBuZXdFbnRyeVsiZGF0YS1tZW51a2V5Il0gPSBpdGVtWyJfY29uZmlnS2V5Il07CiAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdFbnRyeSkpOwogICAgICBicmVhazsKCiAgICBjYXNlICJjaGVja2JveCI6CiAgICAgIHZhciB2YWx1ZSA9IGNvbmZpZ1tpdGVtWyJfY29uZmlnS2V5Il1dOwogICAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgdmFsdWUgPSBmYWxzZTsKICAgICAgfQogICAgICB2YXIgbmV3RW50cnkgPSBuZXcgT2JqZWN0KCk7CiAgICAgIG5ld0VudHJ5ID0gaXRlbTsKICAgICAgZGVsZXRlIG5ld0VudHJ5WyJvbmNsaWNrIl07CiAgICAgIG5ld0VudHJ5WyJfZWxlbWVudCJdID0gIklOUFVUIjsKICAgICAgbmV3RW50cnlbInZhbHVlIl0gPSB2YWx1ZTsKICAgICAgbmV3RW50cnlbInR5cGUiXSA9ICJjaGVja2JveCI7CiAgICAgIG5ld0VudHJ5WyJkYXRhLW1lbnV0eXBlIl0gPSBpdGVtWyJfbWVudVR5cGUiXTsKICAgICAgbmV3RW50cnlbImRhdGEtbWVudWtleSJdID0gaXRlbVsiX2NvbmZpZ0tleSJdOwogICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKICAgICAgZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiSU5QVVQiKVswXS5jaGVja2VkID0gdmFsdWU7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgInNlbGVjdCI6CiAgICAgIHZhciB2YWx1ZSA9IGNvbmZpZ1tpdGVtWyJfY29uZmlnS2V5Il1dOwogICAgICB2YXIgbmV3RW50cnkgPSBuZXcgT2JqZWN0KCk7CiAgICAgIG5ld0VudHJ5ID0gaXRlbTsKICAgICAgZGVsZXRlIG5ld0VudHJ5WyJvbmNsaWNrIl0KICAgICAgbmV3RW50cnlbIl9lbGVtZW50Il0gPSAiU0VMRUNUIjsKICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CiAgICAgIHZhciBzZWxlY3RFbGVtZW50ID0gZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiU0VMRUNUIilbMF07CiAgICAgIHZhciB2YWx1ZXMgPSBpdGVtWyJfb3B0aW9uVmFsdWVzIl07CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdDsKICAgICAgICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJPUFRJT04iOwogICAgICAgIG5ld0VudHJ5WyJfdGV4dCJdID0gaXRlbVsiX3RleHQiXSArICI6ICIgKyB2YWx1ZXNbaV07CiAgICAgICAgbmV3RW50cnlbInZhbHVlIl0gPSB2YWx1ZXNbaV07CiAgICAgICAgc2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CiAgICAgIH0KICAgICAgc2VsZWN0RWxlbWVudC52YWx1ZSA9IHZhbHVlOwogICAgICBicmVhazsKCiAgfQogIHJldHVybiBlbGVtZW50Owp9CgpmdW5jdGlvbiBvcGVuU3ViTWVudShpdGVtKSB7CiAgdmFyIGVudHJ5cyA9IGl0ZW1bIl9zdWJNZW51Il0uc3BsaXQoIiwiKTsKICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNldHRpbmdzIik7CgogIHZhciBuZXdIUiA9IG5ldyBPYmplY3QoKTsKICBuZXdIUlsiX2VsZW1lbnQiXSA9ICJIUiIKICBkaXYuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdIUikpOwoKICB2YXIgbmV3RW50cnkgPSBuZXcgT2JqZWN0KCk7CiAgbmV3RW50cnlbIl9lbGVtZW50Il0gPSAiSU5QVVQiOwogIG5ld0VudHJ5WyJ0eXBlIl0gPSAiYnV0dG9uIjsKICAvL25ld0VudHJ5WyJjbGFzcyJdID0gInNhdmUiOwogIG5ld0VudHJ5WyJ2YWx1ZSJdID0gIlNhdmUiOwogIG5ld0VudHJ5WyJvbmNsaWNrIl0gPSAic2F2ZURhdGEyKCdzZXR0aW5ncycpIgogIGRpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CgogIGlmIChpdGVtWyJfY29uZmlnS2V5Il0gPT0gInNldHRpbmdzIikgewogICAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdCgpOwogICAgbmV3RW50cnlbIl9lbGVtZW50Il0gPSAiSU5QVVQiOwogICAgbmV3RW50cnlbInR5cGUiXSA9ICJidXR0b24iOwogICAgLy9uZXdFbnRyeVsiY2xhc3MiXSA9ICJzYXZlIjsKICAgIG5ld0VudHJ5WyJ2YWx1ZSJdID0gIkJhY2t1cCI7CiAgICBuZXdFbnRyeVsib25jbGljayJdID0gIlRocmVhZGZpbkJhY2t1cCgpIgogICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKICB9CgogIGlmIChpdGVtWyJfY29uZmlnS2V5Il0gPT0gInNldHRpbmdzIikgewogICAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdCgpOwogICAgbmV3RW50cnlbIl9lbGVtZW50Il0gPSAiSU5QVVQiOwogICAgbmV3RW50cnlbInR5cGUiXSA9ICJidXR0b24iOwogICAgLy9uZXdFbnRyeVsiY2xhc3MiXSA9ICJzYXZlIjsKICAgIG5ld0VudHJ5WyJ2YWx1ZSJdID0gIlJlc3RvcmUiOwogICAgbmV3RW50cnlbIm9uY2xpY2siXSA9ICJUaHJlYWRmaW5SZXN0b3JlKHRoaXMpIgogICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKICB9CgoKICB2YXIgbmV3V3JhcHBlciA9IG5ldyBPYmplY3QoKTsKICBuZXdXcmFwcGVyWyJfZWxlbWVudCJdID0gIkRJViI7CiAgbmV3V3JhcHBlclsiaWQiXSA9ICJib3gtd3JhcHBlciI7CiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3V3JhcHBlcikpOwoKICBkaXYgPSBkaXYubGFzdENoaWxkOwoKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRyeXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBpdGVtID0gc3ViTWVudVtlbnRyeXNbaV1dOwogICAgaWYgKGl0ZW0gPT0gdW5kZWZpbmVkKSB7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIHZhciBjb250YWluZXIgPSBuZXcgT2JqZWN0KCk7CiAgICBjb250YWluZXJbIl9lbGVtZW50Il0gPSAiRElWIjsKICAgIGRpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KGNvbnRhaW5lcikpOwoKICAgIHZhciBkaXZDb250YWluZXIgPSBkaXYubGFzdENoaWxkOwoKICAgIHZhciBoZWFkbGluZSA9IG5ldyBPYmplY3QoKTsKICAgIGhlYWRsaW5lWyJfZWxlbWVudCJdID0gIkg1IjsKICAgIGhlYWRsaW5lWyJfdGV4dCJdID0gaXRlbVsiX2hlYWRsaW5lIl07CiAgICBkaXZDb250YWluZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChoZWFkbGluZSkpOwoKICAgIGRpdkNvbnRhaW5lci5hcHBlbmRDaGlsZChjcmVhdGVNZW51SXRlbShpdGVtKSkKCiAgICBzd2l0Y2ggKGl0ZW0uaGFzT3duUHJvcGVydHkoIl91c2FnZSIpKSB7CiAgICAgIGNhc2UgdHJ1ZToKICAgICAgICB2YXIgdXNhZ2VJdGVtID0gbmV3IE9iamVjdCgpOwogICAgICAgIHVzYWdlSXRlbVsiX2VsZW1lbnQiXSA9ICJQUkUiCiAgICAgICAgdXNhZ2VJdGVtWyJfdGV4dCJdID0gaXRlbVsiX3VzYWdlIl07CiAgICAgICAgZGl2Q29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQodXNhZ2VJdGVtKSk7CiAgICB9CgogICAgdmFyIGhyID0gbmV3IE9iamVjdCgpOwogICAgaHJbIl9lbGVtZW50Il0gPSAiSFIiOwogICAgZGl2Q29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoaHIpKTsKCiAgfQoKICBjYWxjdWxhdGVXcmFwcGVySGVpZ2h0KCk7CiAgcmV0dXJuCn0KCmZ1bmN0aW9uIHNhdmVEYXRhMihlbG0pIHsKICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxtKTsKICB2YXIgaW5wdXRzID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJTlBVVCIpOwogIHZhciBzZWxlY3RzID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJTRUxFQ1QiKTsKICB2YXIgdmFsdWUsIGNvbmZpZ0tleTsKICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICB2YXIgdmFsdWVBcnIgPSBuZXcgQXJyYXkoKTsKICB2YXIgbmV3RGF0YSA9IGZhbHNlOwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgaWYgKGlucHV0c1tpXS50eXBlICE9ICJidXR0b24iKSB7CiAgICAgIHZhciBtZW51VHlwZSA9IGlucHV0c1tpXS5nZXRBdHRyaWJ1dGUoImRhdGEtbWVudXR5cGUiKTsKCiAgICAgIC8vY29uc29sZS5sb2cobWVudVR5cGUpOwogICAgICBzd2l0Y2ggKG1lbnVUeXBlKSB7CiAgICAgICAgY2FzZSAic2luZ2xlSW5wdXQiOgogICAgICAgICAgdmFsdWUgPSBpbnB1dHNbaV0udmFsdWU7CiAgICAgICAgICBpZiAodmFsdWUgPT0gIiIgfHwgdmFsdWUgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgICAgIGRhdGFbImRlbGV0ZSJdID0gaW5wdXRzW2ldLm5hbWUKICAgICAgICAgICAgbmV3RGF0YSA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBuZXdEYXRhID0gdHJ1ZTsKICAgICAgICAgICAgZGF0YVtpbnB1dHNbaV0ubmFtZV0gPSB2YWx1ZTsKICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJpbnB1dEFycmF5IjoKICAgICAgICAgIHZhbHVlID0gaW5wdXRzW2ldLnZhbHVlOwogICAgICAgICAgaWYgKHZhbHVlICE9ICIiICYmIHZhbHVlICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICBuZXdEYXRhID0gdHJ1ZTsKICAgICAgICAgICAgdmFsdWVBcnIucHVzaCh2YWx1ZSkKICAgICAgICAgICAgZGF0YVtpbnB1dHNbaV0ubmFtZV0gPSB2YWx1ZUFycjsKICAgICAgICAgICAgY29uZmlnS2V5ID0gaW5wdXRzW2ldLm5hbWU7CiAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgImNoZWNrYm94IjoKICAgICAgICAgIHZhbHVlID0gaW5wdXRzW2ldLmNoZWNrZWQKICAgICAgICAgIGRhdGFbaW5wdXRzW2ldLm5hbWVdID0gdmFsdWU7CiAgICAgIH0KCiAgICB9CgogIH0KCgogIC8vIERlbGV0ZSBjb25maWcga2V5CiAgaWYgKHZhbHVlQXJyLmxlbmd0aCA9PSAwICYmIG5ld0RhdGEgPT0gZmFsc2UpIHsKICAgIG5ld0RhdGEgPSB0cnVlOwogICAgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIGRhdGFbImRlbGV0ZSJdID0gY29uZmlnS2V5OwogIH0KCgogIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0cy5sZW5ndGg7IGkrKykgewogICAgdmFyIHZhbHVlID0gc2VsZWN0c1tpXS5vcHRpb25zW3NlbGVjdHNbaV0uc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgICBzd2l0Y2ggKGlzTmFOKHZhbHVlKSkgewogICAgICBjYXNlIGZhbHNlOiB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTsgYnJlYWs7CiAgICB9CgogICAgZGF0YVtzZWxlY3RzW2ldLm5hbWVdID0gdmFsdWU7CiAgICBuZXdEYXRhID0gdHJ1ZTsKICB9CgogIC8vY29uc29sZS5sb2coZGF0YSwgbmV3RGF0YSk7CgogIGlmIChuZXdEYXRhID09IHRydWUpIHsKICAgIGRhdGFbImNtZCJdID0gInNhdmVDb25maWciOwogICAgaWYgKCFkYXRhLmhhc093blByb3BlcnR5KCdmaWx0ZXInKSkgewogICAgICBkYXRhWyJmaWx0ZXIiXSA9IGNvbmZpZ1siZmlsdGVyIl0KICAgIH0KICAgIHZhciBzZXR0aW5ncyA9IG5ldyBPYmplY3QoKTsKICAgIHNldHRpbmdzWyJjbWQiXSA9IGRhdGFbImNtZCJdOwogICAgc2V0dGluZ3NbInNldHRpbmdzIl0gPSBkYXRhOwogICAgY29uc29sZS5sb2coc2V0dGluZ3MpOwogICAgVGhyZWFkZmluKHNldHRpbmdzKTsKICB9Cn0K" + webUI["html/css/base.css"] = "KiB7CiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogIC1tb3otYXBwZWFyYW5jZTogbm9uZTsKICAtbXMtYXBwZWFyYW5jZTogbm9uZTsKICBmb250LWZhbWlseTogIkFyaWFsIiwgc2Fucy1zZXJpZjsKICBsZXR0ZXItc3BhY2luZzogMnB4Owp9CgovKgo6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgCiAgICBkaXNwbGF5OiBub25lOyAKfQoqLwoKOjotd2Via2l0LXNjcm9sbGJhciB7CiAgd2lkdGg6IDEycHg7CiAgaGVpZ2h0OiAxMnB4Owp9CgoKOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgNnB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICBib3JkZXItcmFkaXVzOiA1cHg7Cgp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICBib3JkZXItcmFkaXVzOiA1cHg7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgNnB4IHJnYmEoMCwgMCwgMCwgMC42KTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICBiYWNrZ3JvdW5kOiAjMzMzOwp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCmEgewogIGNvbG9yOiAjMDBFNkZGOwp9CgpodG1sLApib2R5IHsKICBjb2xvcjogI2ZmZjsKICBtYXJnaW46IDBweCBhdXRvOwogIGhlaWdodDogMTAwJTsKICBmb250LXNpemU6IDE0cHg7Cn0KCmgyIHsKICBmb250LXNpemU6IDI0cHg7CiAgbGV0dGVyLXNwYWNpbmc6IDJweDsKfQoKaDMgewogIGZvbnQtc2l6ZTogMjJweDsKICBsZXR0ZXItc3BhY2luZzogMXB4Owp9CgpoNCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGxldHRlci1zcGFjaW5nOiAxcHg7CiAgbGluZS1oZWlnaHQ6IDEuNWVtOwoKfQoKaDUgewogIGZvbnQtc2l6ZTogMTZweDsKICBsZXR0ZXItc3BhY2luZzogMXB4OwogIGxpbmUtaGVpZ2h0OiAxLjJlbTsKICBtYXJnaW46IDI1cHggMHB4IDEwcHggMHB4Owp9CgpociB7CiAgYm9yZGVyOiAwOwogIGhlaWdodDogMXB4OwogIGJhY2tncm91bmQ6ICMzMzM7CiAgbWFyZ2luOiAxMHB4IDBweDsKfQoKcCB7CiAgbWFyZ2luOiAycHg7CiAgcGFkZGluZzogMnB4IDVweDsKfQoKcHJlIHsKICBtYXJnaW46IDBweCAwcHggNXB4IDBweDsKICBmb250LXNpemU6IDEycHg7CiAgY29sb3I6ICNkZGQ7CiAgbGV0dGVyLXNwYWNpbmc6IDFweDsKICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtdmFyaWFudDogbm9ybWFsOwogIGxpbmUtaGVpZ2h0OiAxLjZlbTsKfQoKbGFiZWwgewogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgZGlzcGxheTogYmxvY2s7Cn0KCmxpIHsKICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgY3Vyc29yOiBwb2ludGVyOwogIHRyYW5zaXRpb246IGFsbCAwLjM7Cn0KCmxpOmhvdmVyIHsKICBib3JkZXItY29sb3I6ICMwMEU2RkYKfQoKc2VsZWN0IHsKICBjdXJzb3I6IHBvaW50ZXI7CiAgd2lkdGg6IGNhbGMoMTAwJSArIDJweCk7CiAgYm9yZGVyOiBzb2xpZCAwcHggIzAwRTZGRjsKICBib3JkZXItcmFkaXVzOiAwcHg7CiAgb3V0bGluZTogbm9uZTsKICBjb2xvcjogI2ZmZjsKICBwYWRkaW5nOiA5cHggMTBweDsKICBkaXNwbGF5OiBibG9jazsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOwogIGZvbnQtc2l6ZTogMTRweDsKICBtYXJnaW46IDVweCAwcHggNXB4IDBweDsKfQoKc2VsZWN0OmZvY3VzIHsKICBvdXRsaW5lOiBub25lOwp9CgppbnB1dCB7CiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogIG1hcmdpbjogMHB4OwogIHBhZGRpbmc6IDIuNXB4IDEwcHg7CiAgb3V0bGluZTogbm9uZTsKICBmb250LXNpemU6IDE0cHg7Cn0KCmlucHV0W3R5cGU9YnV0dG9uXSwKaW5wdXRbdHlwZT1zdWJtaXRdIHsKICBjdXJzb3I6IHBvaW50ZXI7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKICBtYXJnaW46IDEwcHggMTBweDsKICBwYWRkaW5nOiAxMHB4IDI1cHg7CiAgYm9yZGVyOiBzb2xpZCAwcHg7CiAgYm9yZGVyLWNvbG9yOiAjMDAwOwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBvdXRsaW5lOiBub25lOwogIGNvbG9yOiAjZmZmOwp9CgppbnB1dFt0eXBlPWJ1dHRvbl06Zm9jdXMgewogIG91dGxpbmU6IG5vbmU7Cn0KCmlucHV0W3R5cGU9YnV0dG9uXTpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwRTZGRjsKICBjb2xvcjogIzAwMDsKfQoKaW5wdXRbdHlwZT1idXR0b25dOmhvdmVyLmRlbGV0ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmVkOwogIGNvbG9yOiAjZmZmOwp9CgppbnB1dFt0eXBlPXRleHRdLAppbnB1dFt0eXBlPXNlYXJjaF0sCmlucHV0W3R5cGU9cGFzc3dvcmRdIHsKICBjb2xvcjogI2ZmZjsKICB3aWR0aDogLXdlYmtpdC1jYWxjKDEwMCUgLSAwcHgpOwogIHdpZHRoOiAtbW96LWNhbGMoMTAwJSAtIDBweCk7CiAgd2lkdGg6IGNhbGMoMTAwJSAtIDBweCk7CiAgb3V0bGluZTogbm9uZTsKICBib3JkZXI6IHNvbGlkIDFweCB0cmFuc3BhcmVudDsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBib3JkZXItYm90dG9tLWNvbG9yOiAjNTU1OwogIGJvcmRlci1yYWRpdXM6IDBweDsKICBwYWRkaW5nOiA4cHggMTBweDsKfQoKaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CiAgYm9yZGVyOiBzb2xpZCAxcHggIzAwRTZGRjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOwogIGhlaWdodDogMjVweDsKICB3aWR0aDogMjVweDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgLyoKICAtd2Via2l0LWFwcGVhcmFuY2U6IGNoZWNrYm94OwogICovCn0KCmlucHV0W3R5cGU9ImNoZWNrYm94Il06Y2hlY2tlZCB7CiAgY29sb3I6ICNmZmY7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwRTZGRjsKICAvKmRpc3BsYXk6IGlubGluZS1ibG9jazsqLwp9CgppbnB1dFt0eXBlPSJjaGVja2JveCJdOmJlZm9yZSB7CiAgcG9zaXRpb246IGluaXRpYWw7CiAgbGVmdDogMHB4OwogIG1hcmdpbi1sZWZ0OiAtNHB4OwogIGNvbnRlbnQ6ICIgIjsKfQoKaW5wdXRbdHlwZT0iY2hlY2tib3giXTpjaGVja2VkOmJlZm9yZSB7CiAgcG9zaXRpb246IGluaXRpYWw7CiAgbGVmdDogMHB4OwogIG1hcmdpbi1sZWZ0OiAtM3B4OwogIGNvbnRlbnQ6ICLinJMiOwogIGNvbG9yOiAjMDAwOwp9CgppbnB1dFt0eXBlPSJjaGVja2JveCJdLmJ1bGs6Y2hlY2tlZDpiZWZvcmUgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBsZWZ0OiAwcHg7CiAgdG9wOiAtMTFweDsKICBtYXJnaW4tbGVmdDogLTNweDsKICBjb250ZW50OiAi4pyTIjsKICBmb250LXNpemU6IDEuNWVtOwogIGNvbG9yOiAjMDAwOwp9CgoKaW5wdXRbdHlwZT1idXR0b25dLmNhbmNlbCB7CgogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIGJvcmRlci1jb2xvcjogcmVkOwp9CgppbnB1dFt0eXBlPWJ1dHRvbl0uc2F2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsKICBmbG9hdDogcmlnaHQ7Cn0KCgppbnB1dFt0eXBlPWJ1dHRvbl0uYmxhY2ssCmlucHV0W3R5cGU9c3VibWl0XS5ibGFjayB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKICBib3JkZXItY29sb3I6ICMwMDA7Cn0KCmlucHV0W3R5cGU9YnV0dG9uXS5jZW50ZXIgewogIG1hcmdpbi1yaWdodDogYXV0bzsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOwogIGJvcmRlci1jb2xvcjogIzAwMDsKfQoKLnBvaW50ZXIgewogIGN1cnNvcjogcG9pbnRlcjsKfQoKLnBvaW50ZXI6aG92ZXIgewogIGNvbG9yOiAjMDBFNkZGOwogIGN1cnNvcjogcG9pbnRlcjsKfQoKLnNvcnRUaGlzIHsKICBjb2xvcjogIzAwRTZGRjsKfQoKLnc0MHB4IHsKICBtYXgtd2lkdGg6IDQwcHg7Cn0KCi53NTBweCB7CiAgbWF4LXdpZHRoOiA1MHB4Owp9CgoudzgwcHggewogIG1heC13aWR0aDogODBweDsKfQoKLncxNTBweCB7CiAgbWF4LXdpZHRoOiAxNTBweDsKfQoKLncyMDBweCB7CiAgbWF4LXdpZHRoOiAyMDBweDsKICBtaW4td2lkdGg6IDEwMHB4OwogIHdpZHRoOiAyMDBweDsKICBvdmVyZmxvdy14OiBoaWRkZW47CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9CgoudzMwMHB4IHsKICBtYXgtd2lkdGg6IDMwMHB4Owp9CgoudzIyMHB4IHsKICBtYXgtd2lkdGg6IDIyMHB4OwogIGN1cnNvcjogYWxpYXM7Cn0KCi5mb290ZXIgewogIGZvbnQtc2l6ZTogMTBweDsKfQoKLmNlbnRlciB7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Cgouc2NyZWVuTG9nSGlkZGVuIHsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIC0xMTBweCk7Cn0KCi5ib3JkZXJTcGFjZSB7CiAgbWFyZ2luLWJvdHRvbTogMzBweDsKfQoKLmJsb2NrIHt9Cgoubm9uZSB7CiAgZGlzcGxheTogbm9uZTsKfQoKCi5ub3RWaXNpYmxlIHsKICBoZWlnaHQ6IDBweDsKICBkaXNwbGF5OiBub25lOwogIG9wYWNpdHk6IDA7CiAgYm9yZGVyLWJvdHRvbTogIzAwMCBzb2xpZCAwcHg7Cgp9CgoudmlzaWJsZSB7CiAgb3BhY2l0eTogMTsKICBkaXNwbGF5OiBibG9jazsKICBib3JkZXItYm90dG9tOiAjNDQ0IHNvbGlkIDFweDsKICBwYWRkaW5nOiAxMHB4Owp9CgouZmxvYXRSaWdodCB7CiAgZmxvYXQ6IHJpZ2h0Owp9CgouZmxvYXRMZWZ0IHsKICBmbG9hdDogbGVmdDsKfQoKLm1lbnUtYWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBFNkZGOwp9Cgp0YWJsZSB7CiAgd2lkdGg6IDEwMCUKfQoKLm1lbnUtbm90QWN0aXZlIHt9CgojYnJhbmNoIHsKICBjb2xvcjogcmVkOwp9CgojaW50ZXJhY3Rpb24gewogIG1hcmdpbi1ib3R0b206IDEwMHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBib3JkZXItYm90dG9tOiBzb2xpZCAwcHggIzc3NzsKfQoKCi5oYWxmIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogNDUlOwp9CgoubWVudSB7CiAgYm9yZGVyOiBzb2xpZCAxcHggIzAwRTZGRjsKfQoKLmluZm9Nc2cgewogIGNvbG9yOiAjYWFhOwp9CgouZXJyb3JNc2cgewogIGNvbG9yOiByZWQ7Cn0KCi53YXJuaW5nTXNnIHsKICBjb2xvcjogeWVsbG93Owp9CgouZGVidWdNc2cgewogIGNvbG9yOiBtYWdlbnRhOwp9CgoKLmNhdGVnb3J5IHsKICBib3JkZXItbGVmdDogc29saWQgMnB4Cn0KCi5uZXdzIHsKICBib3JkZXItY29sb3I6IHRvbWF0bwp9CgoubW92aWUgewogIGJvcmRlci1jb2xvcjogcm95YWxibHVlOwp9Cgouc2VyaWVzIHsKICBib3JkZXItY29sb3I6IGdvbGQ7Cn0KCi5zcG9ydHMgewogIGJvcmRlci1jb2xvcjogeWVsbG93Z3JlZW47Cn0KCi5raWRzIHsKICBib3JkZXItY29sb3I6IG1lZGl1bXB1cnBsZTsKfQoKLyogTG9hZGluZyAqLwojbG9hZGluZyB7CiAgbGVmdDogMHB4OwogIHRvcDogMHB4OwogIHotaW5kZXg6IDEwMDAwOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgbWFyZ2luOiBhdXRvOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKCi5sb2FkZXIgewogIGJvcmRlcjogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogIGJvcmRlci1yYWRpdXM6IDUwJTsKICBib3JkZXItdG9wOiA1cHggc29saWQgIzAwRTZGRjsKICBib3JkZXItYm90dG9tOiA1cHggc29saWQgIzAwRTZGRjsKICB3aWR0aDogNTBweDsKICBoZWlnaHQ6IDUwcHg7CiAgLXdlYmtpdC1hbmltYXRpb246IHNwaW4gMS4ycyBsaW5lYXIgaW5maW5pdGU7CiAgYW5pbWF0aW9uOiBzcGluIDEuMnMgbGluZWFyIGluZmluaXRlOwoKICBwb3NpdGlvbjogZml4ZWQ7CiAgbWFyZ2luOiBhdXRvOwoKICB0b3A6IDA7CiAgcmlnaHQ6IDA7CiAgYm90dG9tOiAwOwogIGxlZnQ6IDA7Cgp9CgpALXdlYmtpdC1rZXlmcmFtZXMgc3BpbiB7CiAgMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CgogIDEwMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQoKQGtleWZyYW1lcyBzcGluIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CgogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICB9Cn0=" + webUI["html/css/screen.css"] = "bmF2IGltZyB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWF4LWhlaWdodDogMjBweDsKICBtYXgtd2lkdGg6IDIwcHg7CiAgZmxvYXQ6IGxlZnQ7Cn0KCm5hdiBwIHsKICB0ZXh0LWFsaWduOiBsZWZ0OwogIHBhZGRpbmc6IDBweCAzMHB4Owp9CgojbGF5b3V0IHsKICBkaXNwbGF5OiBibG9jazsKICBoZWlnaHQ6IDEwMCU7Cn0KCi5mb3JtLWNvbnRyb2w6ZGlzYWJsZWQgewogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Owp9CgoubGF5b3V0LWxlZnQgewogIGRpc3BsYXk6IGJsb2NrOwogIG1pbi13aWR0aDogMTUwcHg7CiAgbWF4LXdpZHRoOiAyMCU7CiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsKICBoZWlnaHQ6IGluaGVyaXQ7CiAgZmxvYXQ6IGxlZnQ7Cn0KCi5sYXlvdXQtcmlnaHQgewogIGRpc3BsYXk6IGJsb2NrOwogIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7Cn0KCiNtZW51LXdyYXBwZXIgewogIGhlaWdodDogMTAwJTsKfQoKCiNsb2dvIHsKICBkaXNwbGF5OiBibG9jazsKICBtaW4td2lkdGg6IDE4MHB4OwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwcHg7CiAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvdGhyZWFkZmluLnBuZyIpOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOwogIGJhY2tncm91bmQtc2l6ZTogMTAwJTsKfQoKCiNwYWdlIHsKICBtYXgtd2lkdGg6IDk1MHB4OwogIG1hcmdpbjogYXV0bzsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0OwoKICAvKgogIGhlaWdodDogLXdlYmtpdC1jYWxjKDEwMCUgLSAxMzBweCk7CiAgaGVpZ2h0OiAtbW96LWNhbGMoMTAwJSAtIDEzMHB4KTsKICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDEzMHB4KTsKICAqLwoKICBtaW4taGVpZ2h0OiAtd2Via2l0LWNhbGMoMTAwJSAtIDEyMHB4KTsKICBtaW4taGVpZ2h0OiAtbW96LWNhbGMoMTAwJSAtIDEyMHB4KTsKICBtaW4taGVpZ2h0OiBjYWxjKDEwMCUgLSAxMjBweCk7CgoKICBib3gtc2hhZG93OiAwcHggNXB4IDVweCAjMjIyOwoKfQoKI3VpU2V0dGluZyB7CiAgZmxvYXQ6IHJpZ2h0OwogIG1hcmdpbi1yaWdodDogMjVweDsKfQoKI2JveCBpbnB1dFt0eXBlPXRleHRdLAojYm94IGlucHV0W3R5cGU9cGFzc3dvcmRdIHsKICB3aWR0aDogLXdlYmtpdC1jYWxjKDEwMCUgLSAyMHB4KTsKICB3aWR0aDogLW1vei1jYWxjKDEwMCUgLSAyMHB4KTsKICB3aWR0aDogY2FsYygxMDAlIC0gMjBweCk7Cn0KCiNib3ggaW5wdXRbdHlwZT1zdWJtaXRdIHsKICBtYXJnaW46IDUwcHggYXV0bzsKfQoKI3NldHRpbmdzIHsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nOiAxMHB4IDEwcHg7Cn0KCiNzZXR0aW5ncyBoNSB7CiAgbWFyZ2luOiA1MHB4IDBweCAxMHB4IDBweDsKfQoKI2NvbnRlbnQtaW50ZXJhY3Rpb24gLnNlYXJjaCB7CiAgd2lkdGg6IDIwMHB4OwogIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7CiAgcGFkZGluZzogOXB4OwogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7CiAgbWFyZ2luOiAxMHB4OwogIGZsb2F0OiByaWdodDsKICBib3JkZXItcmFkaXVzOiAzcHg7Cgp9CgojbXlTdHJlYW1zIHsKICBwb3NpdGlvbjogZml4ZWQ7CiAgYm90dG9tOiAwcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsKICB3aWR0aDogMTAwJTsKICBtYXgtd2lkdGg6IDk1MHB4OwoKICAvKgogIG1heC1oZWlnaHQ6IDEwMHB4OwogICovCiAgbWFyZ2luLWJvdHRvbTogMHB4Owp9CgojbXlTdHJlYW1zIGltZyB7CiAgd2lkdGg6IDQlOwogIHBhZGRpbmc6IDJweCA1cHg7CiAgY3Vyc29yOiBwb2ludGVyOwogIGZsb2F0OiByaWdodDsKfQoKI3NldHRpbmdzLWZvb3RlciB7fQoKLnByb2JlRGV0YWlscyB7CiAgCn0KCgovKiBXaXphcmQqLwojYm94IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0OwogIG1pbi1oZWlnaHQ6IDQwMHB4OwoKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwp9CgojYm94IHAgewogIHBhZGRpbmc6IDEwcHggMHB4Owp9CgojYm94LWZvb3RlciB7CiAgbWFyZ2luLXRvcDogYXV0bzsKfQoKI2JveC1mb290ZXIgewogIG1hcmdpbjogYXV0bzsKICBwYWRkaW5nOiAxMHB4Owp9CgojaGVhZGxpbmUgewogIGJhY2tncm91bmQtY29sb3I6ICMyMjI7CiAgYm9yZGVyLWJvdHRvbTogc29saWQgMnB4ICMyMjI7CiAgdHJhbnNpdGlvbjogYWxsIDAuNXM7CiAgcGFkZGluZzogMTBweCAwcHg7CiAgZGlzcGxheTogYmxvY2s7Cn0KCiNjb250ZW50IHsKICBkaXNwbGF5OiBibG9jazsKICBvdmVyZmxvdzogYXV0bzsKICBwYWRkaW5nOiAxMHB4Owp9CgovKiAtLS0gKi8KCgojY2xpZW50SW5mbywKI2FjdGl2ZVN0cmVhbXMsCiNpbmFjdGl2ZVN0cmVhbXMgewogIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAxMnB4OwogIGNvbG9yOiAjMDBFNkZGOwogIHBhZGRpbmc6IDBweDsKfQoKI2FjdGl2ZVN0cmVhbXMgdGhlYWQsCiNpbmFjdGl2ZVN0cmVhbXMgdGhlYWQgewogIGZvbnQtc2l6ZTogMmVtOwp9Cgojb3BlblN0cmVhbXMgewogIHdpZHRoOiAyMHB4OwogIGhlaWdodDogMjAwcHg7CiAgY3Vyc29yOiBwb2ludGVyOwogIGZsb2F0OiByaWdodDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgcmlnaHQ6IDBweDsKICBib3R0b206IDBweDsKICBiYWNrZ3JvdW5kOiB1cmwoIi4uL2ltZy90b3VjaC5wbmciKTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTExOwoKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBib3R0b20gcmlnaHQ7Cn0KCiNhbGxTdHJlYW1zIHsKICBwYWRkaW5nOiAycHg7Cn0KCiNhY3RpdmVTdHJlYW1zLAojaW5hY3RpdmVTdHJlYW1zIHsKICAvKiB3aWR0aDogNTAlOyAqLwogIC8qIGZsb2F0OiBsZWZ0OyAqLwp9CgojYWN0aXZlU3RyZWFtcyAudGRLZXksCiNpbmFjdGl2ZVN0cmVhbXMgLnRkS2V5IHsKICB3aWR0aDogMTE1cHg7CiAgbGV0dGVyLXNwYWNpbmc6IDBweDsKfQoKY2FwdGlvbiB7CiAgY29sb3I6ICNGRkY7CiAgZm9udC1zaXplOiAyZW07Cn0KCi50ZEtleSB7CiAgdGV4dC1hbGlnbjogbGVmdDsKfQoKLnRkVmFsIHsKICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgoubW9kYWwtaGVhZGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyNTI5Owp9Ci5tb2RhbC1ib2R5IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Owp9CgojaW5hY3RpdmVTdHJlYW1zIC50ZEtleSB7CiAgY29sb3I6IHJlZDsKfQoKI2NsaWVudEluZm8gLnRkVmFsLAojbG9nSW5mbyAudGRWYWwsCiNhY3RpdmVTdHJlYW1zIC50ZFZhbCwKI2luYWN0aXZlU3RyZWFtcyAudGRWYWwsCiNtYXBwaW5nSW5mbyAudGRWYWwgewogIGNvbG9yOiAjYWFhOwogIHdoaXRlLXNwYWNlOiBpbmhlcml0Owp9CgojYm94LXdyYXBwZXIgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICB3aWR0aDogMTAwJTsKCiAgb3ZlcmZsb3cteTogc2Nyb2xsOwp9CgojY29udGVudF90YWJsZSwKI2luYWN0aXZlX2NvbnRlbnRfdGFibGUsCiNtYXBwaW5nLWRldGFpbC10YWJsZSwKI2NvbnRlbnRfdGFibGUgewogIGRpc3BsYXk6IHRhYmxlOwogIC0tYnMtdGFibGUtY29sb3I6IG5vbmU7CiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICBvdmVyZmxvdy15OiBzY3JvbGw7Cn0KCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIHsKICBtYXJnaW4tdG9wOiAyJTsKfQoKCiNjb250ZW50X3RhYmxlIC5jb250ZW50X3RhYmxlX2hlYWRlciwKI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgLmluYWN0aXZlX2NvbnRlbnRfdGFibGVfaGVhZGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOwogIGhlaWdodDogNTBweDsKICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggIzExMTsKICBib3JkZXItbGVmdDogc29saWQgM3B4ICMzMzM7CiAgY3Vyc29yOiBhdXRvOwoKfQoKCnRib2R5IHsKICB3aWR0aDogMTAwJTsKfQoKCi50YWJsZUVsbGlwc2lzIHsKICB3aWR0aDogMTUwcHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgojY29udGVudF90YWJsZSBpbWcsCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIGltZyB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwogIG1heC13aWR0aDogNjBweDsKfQoKI2NvbnRlbnRfdGFibGUgdHIsCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIHRyIHsKICBib3JkZXItbGVmdDogc29saWQgM3B4IDQ0NDsKICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggIzMzMzsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCiNjb250ZW50X3RhYmxlIHRyOmhvdmVyLAojaW5hY3RpdmVfY29udGVudF90YWJsZSB0cjpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsKfQoKI2NvbnRlbnRfdGFibGUgdGQsCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIHRkIHsKCiAgcGFkZGluZzogMHB4IDJweDsKfQoKI2NvbnRlbnRfdGFibGUgaW5wdXRbdHlwZT10ZXh0XSwKI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgaW5wdXRbdHlwZT10ZXh0XSB7CiAgd2lkdGg6IDgwJTsKICBtaW4td2lkdGg6IDM1cHg7CiAgbWF4LXdpZHRoOiA2MHB4OwogIGJvcmRlcjogMHB4OwogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7CiAgbWFyZ2luLWxlZnQ6IDVweDsKICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgojY29udGVudF90YWJsZSBpbnB1dFt0eXBlPWNoZWNrYm94XSwKI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgaW5wdXRbdHlwZT1jaGVja2JveF0gewogIG1heC13aWR0aDogMjVweDsKICBtYXJnaW46IGF1dG87Cn0KCgouc2hvd0J1bGsgewogIGRpc3BsYXk6IGJsb2NrOwp9CgouaGlkZUJ1bGsgewogIGRpc3BsYXk6IG5vbmU7Cn0KCi5ub0J1bGsge30KCiNjb250ZW50X3RhYmxlIHRyLmFjdGl2ZUVQRywKI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgdHIuYWN0aXZlRVBHIHsKICBib3JkZXItbGVmdDogc29saWQgM3B4IGxhd25ncmVlbjsKfQoKI2NvbnRlbnRfdGFibGUgdHIubm90QWN0aXZlRVBHLAojaW5hY3RpdmVfY29udGVudF90YWJsZSB0ci5ub3RBY3RpdmVFUEcgewogIGJvcmRlci1sZWZ0OiBzb2xpZCAzcHggcmVkOwp9CgoKI2xvZ1NjcmVlbiBwIHsKICB3aGl0ZS1zcGFjZTogcHJlOwogIGZvbnQtc2l6ZTogMTBweDsKICAvKgogIGxpbmUtaGVpZ2h0OiAxLjZlbTsKICBmb250LWZhbWlseTogIkFyaWFsIiwgc2Fucy1zZXJpZjsKICAqLwogIGxldHRlci1zcGFjaW5nOiAxcHg7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtdmFyaWFudDogbm9ybWFsOwogIGxpbmUtaGVpZ2h0OiAxLjZlbTsKfQoKI21hcHBpbmctZGV0YWlsLAojdXNlci1kZXRhaWwsCiNmaWxlLWRldGFpbCB7CiAgYm94LXNoYWRvdzogMHB4IDVweCA0MHB4ICMwMDA7CiAgbWFyZ2luLXRvcDogMjBweDsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBtYXJnaW4tcmlnaHQ6IGF1dG87CgogIG1heC13aWR0aDogNjAwcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsKICBwYWRkaW5nOiAxMHB4OwogIG92ZXJmbG93OiBhdXRvOwp9CgojZmlsZS1kZXRhaWwgaW5wdXRbdHlwZT10ZXh0XSB7CiAgd2lkdGg6IC13ZWJraXQtY2FsYygxMDAlIC0gMjBweCk7CiAgd2lkdGg6IC1tb3otY2FsYygxMDAlIC0gMjBweCk7CiAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOwp9CgojbWFwcGluZy1kZXRhaWwgaW1nIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXgtaGVpZ2h0OiAzMHB4OwogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9CgojbWFwcGluZy1kZXRhaWwgaW5wdXRbdHlwZT10ZXh0XSwKI2NvbnRlbnRfc2V0dGluZ3MgaW5wdXRbdHlwZT10ZXh0XSwKI2NvbnRlbnRfc2V0dGluZ3MgaW5wdXRbdHlwZT1wYXNzd29yZF0gewogIGJvcmRlcjogc29saWQgMXB4OwogIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsKICB0ZXh0LWFsaWduOiBsZWZ0OwogIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDIwcHgpOwogIHdpZHRoOiAtbW96LWNhbGMoMTAwJSAtIDIwcHgpOwogIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKfQoKI21hcHBpbmctZGV0YWlsLXRhYmxlLAojdXNlci1kZXRhaWwtdGFibGUgewogIGRpc3BsYXk6IGlubGluZS10YWJsZTsKICB3aWR0aDogMTAwJTsKfQoKI2NvbnRlbnRfc2V0dGluZ3MgdGFibGUgewogIGRpc3BsYXk6IGlubGluZS10YWJsZTsKICB0YWJsZS1sYXlvdXQ6IGZpeGVkOwogIHdpZHRoOiAxMDAlOwp9CgoKI21hcHBpbmctZGV0YWlsLXRhYmxlIHRkLAojdXNlci1kZXRhaWwtdGFibGUgdGQgewogIHBhZGRpbmc6IDEwcHggMHB4OwoKfQoKI21hcHBpbmctZGV0YWlsLXRhYmxlIHRkLmxlZnQsCiN1c2VyLWRldGFpbC10YWJsZSB0ZC5sZWZ0IHsKICB3aWR0aDogMzglOwp9CgouaW50ZXJhY3Rpb24sCiNpbnRlcmFjdGlvbiB7CiAgbWFyZ2luLXRvcDogMjBweDsKICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICBmbG9hdDogcmlnaHQ7Cn0KCi5pbnRlcmFjdGlvbiBpbnB1dFt0eXBlPWJ1dHRvbl0sCi5pbnRlcmFjdGlvbiBpbnB1dFt0eXBlPXN1Ym1pdF0gewogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7CiAgbWluLXdpZHRoOiAxMDBweDsKICBtYXJnaW46IDBweCAxMHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKI25vdGlmaWNhdGlvbiB7CiAgZGlzcGxheTogYmxvY2s7CiAgcG9zaXRpb246IGZpeGVkOwogIHJpZ2h0OiAwcHg7CiAgaGVpZ2h0OiAxMDAlOwogIHdpZHRoOiAyNTBweDsKCiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsKICBib3gtc2hhZG93OiAwcHggMHB4IDIwcHggIzAwMDsKfQoKI25vdGlmaWNhdGlvbiBoNSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzEyMTIxMjsKICBwYWRkaW5nOiA1cHggMTBweCA1cHggMTBweDsKfQoKI25vdGlmaWNhdGlvbiBwcmUgewogIHBhZGRpbmc6IDBweCAxMHB4IDBweCAxMHB4Owp9Cgojbm90aWZpY2F0aW9uIHAgewogIGZvbnQtc2l6ZTogMTAgcHg7CiAgbWFyZ2luOiAwcHg7CiAgcGFkZGluZzogMHB4IDEwcHggNXB4IDEwcHg7Cn0KCiNub3RpZmljYXRpb24gLmVsZW1lbnQgewogIC8qcGFkZGluZzogMHB4IDVweDsqLwogIG1hcmdpbjogNXB4IDVweDsKICBib3JkZXItcmFkaXVzOiA1cHg7CiAgYmFja2dyb3VuZC1jb2xvcjogIzE4MTgxODsKICBib3JkZXItbGVmdDogMTBweCBzb2xpZCBncmVlbjsKfQoKCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjIwcHgpIHsKICBib2R5IHsKICAgIHdpZHRoOiAxMDAlOwogICAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsKICB9CgogIGgxIHsKICAgIGZvbnQtc2l6ZTogMjZweDsKICAgIGxldHRlci1zcGFjaW5nOiAzcHg7CiAgfQoKICBuYXYgcCB7CiAgICBkaXNwbGF5OiBibG9jazsKICB9CgoKCiAgI2hlYWRlcl9jb25maWcgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBoZWlnaHQ6IDEwMHB4OwogICAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvbG9nb193XzYwMHgyMDAucG5nIik7CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwoKICAgIGJhY2tncm91bmQtc2l6ZTogMzAwcHggMTAwcHg7CiAgfQoKICAjc2NyZWVuTG9nIHsKICAgIG1hcmdpbi1sZWZ0OiAzMDBweDsKCiAgICB0cmFuc2l0aW9uOiBub25lOwogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggdHJhbnNwYXJlbnQ7CiAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCAjMjIyOwogIH0KCiAgI3NldHRpbmdzIHsKICAgIC8qCiAgICBoZWlnaHQ6IC13ZWJraXQtY2FsYygxMDAlIC0gMTAwcHgpOwogICAgaGVpZ2h0OiAtbW96LWNhbGMoMTAwJSAtIDEwMHB4KTsKICAgIGhlaWdodDogY2FsYygxMDAlIC0gMTAwcHgpOwogICAgKi8KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBhdXRvOwogIH0KCgogIC5zY3JlZW5Mb2dIaWRkZW4gewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAwcHgpOwogIH0KCgogICNib3ggewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtaW4taGVpZ2h0OiA1MDBweDsKICAgIG1heC13aWR0aDogNTAwcHg7CiAgICBtYXJnaW46IDEwcHggYXV0bzsKICAgIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7CiAgICBib3gtc2hhZG93OiAwcHggNXB4IDVweCAjMjIyOwoKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogIH0KCiAgI3NldHRpbmdzLAogICNzZXR0aW5ncy1mb290ZXIge30KfQoKLyoKPT09PT09PT09PT09PT09IApTaWRlYmFyCj09PT09PT09PT09PT09PQoqLwo6cm9vdCB7CiAgLyogZGFyayBzaGFkZXMgb2YgcHJpbWFyeSBjb2xvciovCiAgLS1jbHItcHJpbWFyeS0xOiBoc2woMjA1LCA4NiUsIDE3JSk7CiAgLS1jbHItcHJpbWFyeS0yOiBoc2woMjA1LCA3NyUsIDI3JSk7CiAgLS1jbHItcHJpbWFyeS0zOiBoc2woMjA1LCA3MiUsIDM3JSk7CiAgLS1jbHItcHJpbWFyeS00OiBoc2woMjA1LCA2MyUsIDQ4JSk7CiAgLyogcHJpbWFyeS9tYWluIGNvbG9yICovCiAgLS1jbHItcHJpbWFyeS01OiBoc2woMjA1LCA3OCUsIDYwJSk7CiAgLyogbGlnaHRlciBzaGFkZXMgb2YgcHJpbWFyeSBjb2xvciAqLwogIC0tY2xyLXByaW1hcnktNjogaHNsKDIwNSwgODklLCA3MCUpOwogIC0tY2xyLXByaW1hcnktNzogaHNsKDIwNSwgOTAlLCA3NiUpOwogIC0tY2xyLXByaW1hcnktODogaHNsKDIwNSwgODYlLCA4MSUpOwogIC0tY2xyLXByaW1hcnktOTogaHNsKDIwNSwgOTAlLCA4OCUpOwogIC0tY2xyLXByaW1hcnktMTA6IGhzbCgyMDUsIDEwMCUsIDk2JSk7CiAgLyogZGFya2VzdCBncmV5IC0gdXNlZCBmb3IgaGVhZGluZ3MgKi8KICAtLWNsci1ncmV5LTE6IGhzbCgyMDksIDYxJSwgMTYlKTsKICAtLWNsci1ncmV5LTI6IGhzbCgyMTEsIDM5JSwgMjMlKTsKICAtLWNsci1ncmV5LTM6IGhzbCgyMDksIDM0JSwgMzAlKTsKICAtLWNsci1ncmV5LTQ6IGhzbCgyMDksIDI4JSwgMzklKTsKICAvKiBncmV5IHVzZWQgZm9yIHBhcmFncmFwaHMgKi8KICAtLWNsci1ncmV5LTU6IGhzbCgyMTAsIDIyJSwgNDklKTsKICAtLWNsci1ncmV5LTY6IGhzbCgyMDksIDIzJSwgNjAlKTsKICAtLWNsci1ncmV5LTc6IGhzbCgyMTEsIDI3JSwgNzAlKTsKICAtLWNsci1ncmV5LTg6IGhzbCgyMTAsIDMxJSwgODAlKTsKICAtLWNsci1ncmV5LTk6IGhzbCgyMTIsIDMzJSwgODklKTsKICAtLWNsci1ncmV5LTEwOiBoc2woMjEwLCAzNiUsIDk2JSk7CiAgLS1jbHItd2hpdGU6ICNmZmY7CiAgLS1jbHItcmVkLWRhcms6IGhzbCgzNjAsIDY3JSwgNDQlKTsKICAtLWNsci1yZWQtbGlnaHQ6IGhzbCgzNjAsIDcxJSwgNjYlKTsKICAtLWNsci1ncmVlbi1kYXJrOiBoc2woMTI1LCA2NyUsIDQ0JSk7CiAgLS1jbHItZ3JlZW4tbGlnaHQ6IGhzbCgxMjUsIDcxJSwgNjYlKTsKICAtLWNsci1vcmFuZ2U6IGhzbCgxNCw5MyUsNTMlKTsKICAtLWNsci1ibGFjazogIzIyMjsKICAtLWZmLXByaW1hcnk6ICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogIC0tZmYtc2Vjb25kYXJ5OiAnT3BlbiBTYW5zJywgc2Fucy1zZXJpZjsKICAtLXRyYW5zaXRpb246IGFsbCAwLjNzIGxpbmVhcjsKICAtLXNwYWNpbmc6IDAuMXJlbTsKICAtLXJhZGl1czogMC4yNXJlbTsKICAtLWxpZ2h0LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgLS1kYXJrLXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgLS1tYXgtd2lkdGg6IDExNzBweDsKICAtLWZpeGVkLXdpZHRoOiA2MjBweDsKfQoKLnNpZGViYXItdG9nZ2xlIHsKICBwb3NpdGlvbjogZml4ZWQ7CiAgdG9wOiA0NHJlbTsKICBsZWZ0OiAxMXJlbTsKICBmb250LXNpemU6IDJyZW07CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7CiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7CiAgY3Vyc29yOiBwb2ludGVyOwogIC8qIGFuaW1hdGlvbjogYm91bmNlIDEwcyBlYXNlLWluLW91dCBpbmZpbml0ZTsgKi8KfQouc2lkZWJhci10b2dnbGU6aG92ZXIgewogIGNvbG9yOiB2YXIoLS1jbHItb3JhbmdlKTsKICBhbmltYXRpb246IGV4cGFuZCAuNXMgZWFzZS1pbiBmb3J3YXJkczsKfQouc2lkZWJhci10b2dnbGU6bm90KDpob3ZlcikgewogIGNvbG9yOiB2YXIoLS1jbHItb3JhbmdlKTsKICBhbmltYXRpb246IGNvbGxhcHNlIC41cyBlYXNlLW91dCBmb3J3YXJkczsKfQpAa2V5ZnJhbWVzIGV4cGFuZCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS41KTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMjUpOwogIH0KfQpAa2V5ZnJhbWVzIGNvbGxhcHNlIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMjUpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQp9Cgouc2lkZWJhci1oZWFkZXIgewogIGRpc3BsYXk6IGZsZXg7CiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgcGFkZGluZzogMXJlbSAxLjVyZW07Cn0KLmNsb3NlLWJ0biB7CiAgcG9zaXRpb246IGZpeGVkOwogIHRvcDogNDRyZW07CiAgbGVmdDogNzByZW07CiAgZm9udC1zaXplOiAycmVtOwogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOwogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pOwogIGN1cnNvcjogcG9pbnRlcjsKICBkaXNwbGF5OiBub25lOwp9Ci5jbG9zZS1idG46aG92ZXIgewogIGNvbG9yOiB2YXIoLS1jbHItb3JhbmdlKTsKICBhbmltYXRpb246IGV4cGFuZCAuNXMgZWFzZS1pbiBmb3J3YXJkczsKfQouY2xvc2UtYnRuOm5vdCg6aG92ZXIpIHsKICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7CiAgYW5pbWF0aW9uOiBjb2xsYXBzZSAuNXMgZWFzZS1vdXQgZm9yd2FyZHM7Cn0KLmxvZ28gewogIGp1c3RpZnktc2VsZjogY2VudGVyOwogIGhlaWdodDogNDBweDsKfQoKLmxpbmtzIGEgewogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMS41cmVtOwogIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOwogIHBhZGRpbmc6IDFyZW0gMS41cmVtOwogIGNvbG9yOiB2YXIoLS1jbHItZ3JleS01KTsKICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uKTsKfQoubGlua3MgYTpob3ZlciB7CiAgYmFja2dyb3VuZDogdmFyKC0tY2xyLXByaW1hcnktOCk7CiAgY29sb3I6IHZhcigtLWNsci1wcmltYXJ5LTUpOwogIHBhZGRpbmctbGVmdDogMS43NXJlbTsKfQouc29jaWFsLWljb25zIHsKICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjsKICBkaXNwbGF5OiBmbGV4OwogIHBhZGRpbmctYm90dG9tOiAycmVtOwp9Ci5zb2NpYWwtaWNvbnMgYSB7CiAgZm9udC1zaXplOiAxLjVyZW07CiAgbWFyZ2luOiAwIDAuNXJlbTsKICBjb2xvcjogdmFyKC0tY2xyLXByaW1hcnktNSk7CiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7Cn0KLnNvY2lhbC1pY29ucyBhOmhvdmVyIHsKICBjb2xvcjogdmFyKC0tY2xyLXByaW1hcnktMSk7Cn0KCi5zaWRlYmFyIHsKICBwb3NpdGlvbjogZml4ZWQ7CiAgdG9wOiAwOwogIGxlZnQ6IDA7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwogIGJhY2tncm91bmQ6IHZhcigtLWNsci1ibGFjayk7CiAgZGlzcGxheTogZ3JpZDsKICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gMWZyIGF1dG87CiAgcm93LWdhcDogMXJlbTsKICBib3gtc2hhZG93OiB2YXIoLS1jbHItcmVkLWRhcmspOwogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDAlKTsKfQouc2hvdy1zaWRlYmFyIHsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwKTsKfQouc2hvdy1zaWRlYmFyIC5jbG9zZS1idG4gewogIGRpc3BsYXk6IGJsb2NrOwp9CkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY3NnB4KSB7CiAgLnNpZGViYXIgewogICAgd2lkdGg6IDEwMDBweDsKICB9Cn0KCi5zaWRlYmFyIC5jYXJkIHsKICB3aWR0aDogNDRlbTsKICBtYXJnaW46IDNlbTsKfQouY2FyZCB7CiAgLyogY29sb3I6IHZhcigtLWNsci1ibGFjayk7ICovCiAgYm9yZGVyOiA1cHggc29saWQgdmFyKC0tY2xyLW9yYW5nZSk7Cn0KLyogLmNhcmQgaW5wdXRbdHlwZT10ZXh0XSB7CiAgY29sb3I6IHZhcigtLWNsci1ibGFjayk7CiAgb3V0bGluZTogdmFyKC0tY2xyLWJsYWNrKTsKICBib3JkZXI6IHNvbGlkIDFweCB2YXIoLS1jbHItYmxhY2spOwp9ICovCi5jYXJkIGxhYmVsIHsKICBtYXJnaW4tdG9wOiAyZW07Cn0KLmNhcmQgbGFiZWw6Zmlyc3Qtb2YtdHlwZSB7CiAgbWFyZ2luLXRvcDogMWVtOwp9" + webUI["html/js/authentication.js"] = "ZnVuY3Rpb24gY3JlYXRlRmlyc3RBY2NvdW50KGVsbSkgewogIHZhciBlcnIgPSBmYWxzZTsKICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxtKTsKICBjb25zb2xlLmxvZyhkaXYpOwoKICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoZW50aWNhdGlvbicpOwogIAogIGNvbnN0IHVzZXJuYW1lICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2VybmFtZScpOwogIGNvbnN0IHBhc3N3b3JkICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXNzd29yZCcpOwogIGNvbnN0IGNvbmZpcm0gICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtJyk7CgogIHZhciBpbnB1dHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ0lOUFVUJykKICBjb25zb2xlLmxvZyhjb25maXJtKTsKCiAgc3dpdGNoKGNvbmZpcm0pIHsKICAgIGNhc2UgbnVsbDogYnJlYWs7CiAgICAKICAgIGRlZmF1bHQ6IAogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChpbnB1dHNbaV0udmFsdWUubGVuZ3RoID09IDApIHsKICAgICAgICAgIGlucHV0c1tpXS5zdHlsZS5ib3JkZXJDb2xvciA9ICdyZWQnOwogICAgICAgICAgZXJyID0gdHJ1ZQogICAgICAgIH0KICAgICAgfQoKICAgICAgc3dpdGNoKGVycikgewogICAgICAgIGNhc2UgdHJ1ZTogcmV0dXJuOyBicmVhazsKICAgICAgICBjYXNlIGZhbHNlOiAKICAgICAgICAgIGlmIChwYXNzd29yZC52YWx1ZSAhPSBjb25maXJtLnZhbHVlKSB7CiAgICAgICAgICAgIGNvbmZpcm0uc3R5bGUuYm9yZGVyQ29sb3IgPSAncmVkJzsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICB9CgoKICAKCiAgZm9ybS5zdWJtaXQoKTsKICByZXR1cm47Cn0=" + webUI["html/js/logs_ts.js"] = "Y2xhc3MgTG9nIHsKICAgIGNyZWF0ZUxvZyhlbnRyeSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUFJFIik7CiAgICAgICAgaWYgKGVudHJ5LmluZGV4T2YoIldBUk5JTkciKSAhPSAtMSkgewogICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJ3YXJuaW5nTXNnIjsKICAgICAgICB9CiAgICAgICAgaWYgKGVudHJ5LmluZGV4T2YoIkVSUk9SIikgIT0gLTEpIHsKICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAiZXJyb3JNc2ciOwogICAgICAgIH0KICAgICAgICBpZiAoZW50cnkuaW5kZXhPZigiREVCVUciKSAhPSAtMSkgewogICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJkZWJ1Z01zZyI7CiAgICAgICAgfQogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gZW50cnk7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9Cn0KZnVuY3Rpb24gc2hvd0xvZ3MoYm90dG9tKSB7CiAgICB2YXIgbG9nID0gbmV3IExvZygpOwogICAgdmFyIGxvZ3MgPSBTRVJWRVJbImxvZyJdWyJsb2ciXTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudF9sb2ciKTsKICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhsb2dzKTsKICAgIGtleXMuZm9yRWFjaChsb2dJRCA9PiB7CiAgICAgICAgdmFyIGVudHJ5ID0gbG9nLmNyZWF0ZUxvZyhsb2dzW2xvZ0lEXSk7CiAgICAgICAgZGl2LmFwcGVuZChlbnRyeSk7CiAgICB9KTsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIGlmIChib3R0b20gPT0gdHJ1ZSkgewogICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3gtd3JhcHBlciIpOwogICAgICAgICAgICB3cmFwcGVyLnNjcm9sbFRvcCA9IHdyYXBwZXIuc2Nyb2xsSGVpZ2h0OwogICAgICAgIH0KICAgIH0sIDEwKTsKfQpmdW5jdGlvbiByZXNldExvZ3MoKSB7CiAgICB2YXIgY21kID0gInJlc2V0TG9ncyI7CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKfQo=" + webUI["html/login.html"] = "PCFkb2N0eXBlIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPgogIDxsaW5rCiAgICByZWw9InN0eWxlc2hlZXQiCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyIKICAvPgogIDxsaW5rIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIGludGVncml0eT0ic2hhMzg0LWdIMnlJSnFLZE5IUEVxMG40TXFhL0hHS0loU2tJSGVMNUF5aGtZVjhpNTlVNUFSNmNzQnZBcEhITmwvdkkxQngiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9iYXNlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgo8L2hlYWQ+Cgo8Ym9keT4KICA8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWV4cGFuZC1sZyBzdGlja3ktdG9wIG5hdmJhci1kYXJrIGJnLWJsYWNrIj4KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CiAgICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii93ZWIiPgogICAgICAgIDxzcGFuIGlkPSJsb2dvIj48L3NwYW4+CiAgICAgIDwvYT4KICAgIDwvZGl2PgogIDwvbmF2PgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgogICAgICAgIDxkaXYgY2xhc3M9InRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIGNhcmQgdGV4dC1iZy1kYXJrIG1iLTMiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1oZWFkZXIiPgogICAgICAgICAgICA8aDM+e3subG9naW4uaGVhZGxpbmV9fTwvaDM+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+CiAgICAgICAgICAgIDxwIGlkPSJlcnIiIGNsYXNzPSJlcnJvck1zZyBjZW50ZXIiPnt7LmF1dGhlbnRpY2F0aW9uRXJyfX08L3A+CiAgICAgICAgICAgIDxmb3JtIGlkPSJhdXRoZW50aWNhdGlvbiIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICA8aDU+e3subG9naW4udXNlcm5hbWUudGl0bGV9fTo8L2g1PgogICAgICAgICAgICAgIDxpbnB1dCBpZD0idXNlcm5hbWUiIHR5cGU9InRleHQiIG5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0iVXNlcm5hbWUiIHZhbHVlPSIiPgogICAgICAgICAgICAgIDxoNT57ey5sb2dpbi5wYXNzd29yZC50aXRsZX19OjwvaDU+CiAgICAgICAgICAgICAgPGlucHV0IGlkPSJwYXNzd29yZCIgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0iUGFzc3dvcmQiIHZhbHVlPSIiPgogICAgICAgICAgICAgIDxpbnB1dCBpZD0ic3VibWl0IiBjbGFzcz0iIiB0eXBlPSJzdWJtaXQiIG9uc3VibWl0PSJqYXZhc2NyaXB0OmxvZ2luKCk7IiB2YWx1ZT0ie3suYnV0dG9uLmxvZ2lufX0iPgogICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvanMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMiIGludGVncml0eT0ic2hhMzg0LUEzckpEODU2S293U2I3ZHdsWmRZRWtPMzlHYWdpN3ZJc0YwanJSQW9RbURLS3RRQkhVdUxaOUFzU3Y0akQ0WGEiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0PgogIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9jbGlwYm9hcmQuanMvMi4wLjEwL2NsaXBib2FyZC5taW4uanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9uZXR3b3JrX3RzLmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvYXV0aGVudGljYXRpb25fdHMuanMiPjwvc2NyaXB0Pgo8L2JvZHk+Cgo8L2h0bWw+" + webUI["html/js/files.js"] = "ZnVuY3Rpb24gb3BlbkZpbGVzKGVsbSwgZmlsZVR5cGUpIHsKICAvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZXR0aW5ncyIpLmlubmVySFRNTCA9ICJUZXN0IjsKCiAgY29sdW1uVG9Tb3J0ID0gMDsKICB2YXIgbmV3RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNldHRpbmdzIik7CgogIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJIUiI7CiAgbmV3RGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKCiAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdCgpOwogIG5ld0VudHJ5WyJfZWxlbWVudCJdID0gIklOUFVUIjsKICBuZXdFbnRyeVsidHlwZSJdID0gImJ1dHRvbiI7CiAgbmV3RW50cnlbImNsYXNzIl0gPSAiYnV0dG9uIjsKICBuZXdFbnRyeVsidmFsdWUiXSA9ICJOZXciOwogIG5ld0VudHJ5WyJvbmNsaWNrIl0gPSAnZmlsZURldGFpbCgiLSIsICInICsgZmlsZVR5cGUgKyAnIiknOwogIG5ld0Rpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CgogIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CiAgbmV3RW50cnlbInR5cGUiXSA9ICJidXR0b24iOwogIG5ld0VudHJ5WyJjbGFzcyJdID0gImJ1dHRvbiI7CiAgbmV3RW50cnlbInZhbHVlIl0gPSAiVXBkYXRlIjsKICBuZXdFbnRyeVsib25jbGljayJdID0gImZpbGVEZXRhaWwoMCkiOwogIC8vbmV3RGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKCiAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZXR0aW5ncyIpOwoKICAvLyBCdWlsZCB0YWJsZQogIHZhciBuZXdUYWJsZSA9IG5ldyBPYmplY3QoKTsKICBuZXdUYWJsZVsiX2VsZW1lbnQiXSA9ICJUQUJMRSI7CiAgbmV3VGFibGVbImlkIl0gPSAiaWRfbWFwcGluZyI7CiAgbmV3VGFibGVbImNsYXNzIl0gPSAidGFibGUtbWFwcGluZyI7CiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3VGFibGUpKTsKCiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICBjcmVhdGVGaWxlc1RhYmxlKGZpbGVUeXBlKTsKICB9LCAxMCk7Cgp9CgpmdW5jdGlvbiBjcmVhdGVGaWxlc1RhYmxlKGZpbGVUeXBlKSB7CiAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkX21hcHBpbmciKTsKICB2YXIgYXZhaWxhYmxlRmlsZVR5cGVzID0gbmV3IEFycmF5KCk7CgogIHRhYmxlLmlubmVySFRNTCA9ICIiOwogIHZhciBuZXdUUiA9IG5ldyBPYmplY3QoKTsKICBuZXdUUlsiX2VsZW1lbnQiXSA9ICJUUiI7CiAgbmV3VFJbImNsYXNzIl0gPSAidGFibGUtbWFwcGluZy1oZWFkZXIiOwogIHRhYmxlLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3VFIpKTsKCiAgdmFyIHRyID0gdGFibGUubGFzdENoaWxkOwoKICBzd2l0Y2ggKGZpbGVUeXBlKSB7CiAgICBjYXNlICJ4bWx0diI6CiAgICAgIGF2YWlsYWJsZUZpbGVUeXBlcyA9IG5ldyBBcnJheSgieG1sdHYiKTsKICAgICAgdmFyIHRySGVhZGxpbmVzID0gbmV3IEFycmF5KCJHdWlkZSIsICJMYXN0IFVwZGF0ZSIsICJBdmFpbGFiaWxpdHkgJSIsICJDaGFubmVscyIsICJQcm9ncmFtcyIpCiAgICAgIHZhciBjb21wYXRpYmlsaXR5S2V5cyA9IG5ldyBBcnJheSgieG1sdHYuY2hhbm5lbHMiLCAieG1sdHYucHJvZ3JhbXMiKQogICAgICBicmVhazsKCiAgICBjYXNlICJtM3UiOgogICAgICBhdmFpbGFibGVGaWxlVHlwZXMgPSBuZXcgQXJyYXkoIm0zdSIsICJoZGhyIik7CiAgICAgIHZhciB0ckhlYWRsaW5lcyA9IG5ldyBBcnJheSgiUGxheWxpc3QiLCAiTGFzdCBVcGRhdGUiLCAiQXZhaWxhYmlsaXR5ICUiLCAiVHlwZSIsICJTdHJlYW1zIiwgImdyb3VwLXRpdGxlICUiLCAidHZnLWlkICUiLCAiVW5pcXVlIElEICUiKTsKICAgICAgdmFyIGNvbXBhdGliaWxpdHlLZXlzID0gbmV3IEFycmF5KCJzdHJlYW1zIiwgImdyb3VwLnRpdGxlIiwgInR2Zy5pZCIsICJzdHJlYW0uaWQiKTsKICAgICAgYnJlYWs7CiAgfQoKICBmb3IgKHZhciBpID0gMDsgaSA8IHRySGVhZGxpbmVzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgbmV3VEQgPSBuZXcgT2JqZWN0KCk7CiAgICBuZXdURFsiX2VsZW1lbnQiXSA9ICJURCI7CiAgICBuZXdURFsiX3RleHQiXSA9IHRySGVhZGxpbmVzW2ldOwogICAgdHIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdURCkpOwogIH0KCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdmFpbGFibGVGaWxlVHlwZXMubGVuZ3RoOyBpKyspIHsKCiAgICB2YXIgZmlsZVR5cGUgPSBhdmFpbGFibGVGaWxlVHlwZXNbaV0KCiAgICB2YXIgZGF0YSA9IGNvbmZpZ1siZmlsZXMiXVtmaWxlVHlwZV07CgogICAgdmFyIGFsbEZpbGVzID0gZ2V0T2JqS2V5cyhkYXRhKQoKICAgIGZvciAodmFyIGYgPSAwOyBmIDwgYWxsRmlsZXMubGVuZ3RoOyBmKyspIHsKICAgICAgdmFyIGVsbSA9IGRhdGFbYWxsRmlsZXNbZl1dOwogICAgICB2YXIgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRfbWFwcGluZyIpOwogICAgICB2YXIgZmlsZUlEID0gZWxtWyJpZC5wcm92aWRlciJdOwogICAgICB2YXIgbmFtZSA9IGVsbVsibmFtZSJdOwogICAgICB2YXIgbGFzdFVwZGF0ZSA9IGVsbVsibGFzdC51cGRhdGUiXTsKICAgICAgdmFyIGF2YWlsYWJpbGl0eSA9IGVsbVsicHJvdmlkZXIuYXZhaWxhYmlsaXR5Il07CiAgICAgIHZhciB0eXBlID0gZWxtWyJ0eXBlIl0udG9VcHBlckNhc2UoKTsKICAgICAgdmFyIGNvbXBhdGliaWxpdHkgPSBlbG1bImNvbXBhdGliaWxpdHkiXTsKCiAgICAgIC8vIENyZWF0ZSBUUgogICAgICB2YXIgbmV3VFIgPSBuZXcgT2JqZWN0KCk7CiAgICAgIG5ld1RSWyJfZWxlbWVudCJdID0gIlRSIjsKICAgICAgbmV3VFJbImNsYXNzIl0gPSAiIjsKICAgICAgbmV3VFJbImlkIl0gPSBmaWxlSUQ7CiAgICAgIG5ld1RSWyJvbmNsaWNrIl0gPSAnamF2YXNjcmlwdDogZmlsZURldGFpbCgiJyArIGZpbGVJRCArICciLCInICsgZmlsZVR5cGUgKyAnIik7JzsKICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdUUikpOwoKICAgICAgdmFyIHRyID0gdGFibGUubGFzdENoaWxkOwoKICAgICAgLy8gQ3JlYXRlIGZpbGUgbmFtZSBURAogICAgICB2YXIgbmV3VEQgPSBuZXcgT2JqZWN0KCk7CiAgICAgIG5ld1REWyJfZWxlbWVudCJdID0gIlAiOwogICAgICBuZXdURFsiX3RleHQiXSA9IG5hbWU7CiAgICAgIGNyZWF0ZU5ld1REKG5ld1RELCB0cik7CgogICAgICAvLyBDcmVhdGUgbGFzdCB1cGRhdGUgVEQKICAgICAgdmFyIG5ld1REID0gbmV3IE9iamVjdCgpOwogICAgICBuZXdURFsiX2VsZW1lbnQiXSA9ICJQIjsKICAgICAgbmV3VERbIl90ZXh0Il0gPSBsYXN0VXBkYXRlOwogICAgICBjcmVhdGVOZXdURChuZXdURCwgdHIpOwoKICAgICAgLy8gQ3JlYXRlIGF2YWlsYWJpbGl0eSBURAogICAgICB2YXIgbmV3VEQgPSBuZXcgT2JqZWN0KCk7CiAgICAgIG5ld1REWyJfZWxlbWVudCJdID0gIlAiOwogICAgICBuZXdURFsiX3RleHQiXSA9IGF2YWlsYWJpbGl0eTsKICAgICAgY3JlYXRlTmV3VEQobmV3VEQsIHRyKTsKCiAgICAgIGlmIChmaWxlVHlwZSA9PSAibTN1IiB8fCBmaWxlVHlwZSA9PSAiaGRociIpIHsKCiAgICAgICAgLy8gQ3JlYXRlIFR5cGUgVEQKICAgICAgICB2YXIgbmV3VEQgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgbmV3VERbIl9lbGVtZW50Il0gPSAiUCI7CiAgICAgICAgbmV3VERbIl90ZXh0Il0gPSB0eXBlOwogICAgICAgIGNyZWF0ZU5ld1REKG5ld1RELCB0cik7CgogICAgICB9CgogICAgICAvLyBDcmVhdGUgYWxsIGNvbXBhdGliaWxpdHkgVERzCgogICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbXBhdGliaWxpdHlLZXlzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgdmFyIG5ld1REID0gbmV3IE9iamVjdCgpOwogICAgICAgIG5ld1REWyJfZWxlbWVudCJdID0gIlAiOwogICAgICAgIG5ld1REWyJfdGV4dCJdID0gY29tcGF0aWJpbGl0eVtjb21wYXRpYmlsaXR5S2V5c1tqXV07CiAgICAgICAgY3JlYXRlTmV3VEQobmV3VEQsIHRyKTsKICAgICAgfQoKICAgIH0KCiAgfQoKCiAgc29ydFRhYmxlKDApCgogIC8vIHVzYWdlIEluZm8gIAogIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2V0dGluZ3MiKTsKICBzd2l0Y2ggKG1lbnVbYWN0aXZlTWVudS5pZF0uaGFzT3duUHJvcGVydHkoIl91c2FnZSIpKSB7CiAgICBjYXNlIHRydWU6CiAgICAgIHZhciB1c2FnZUl0ZW0gPSBuZXcgT2JqZWN0KCk7CiAgICAgIHVzYWdlSXRlbVsiX2VsZW1lbnQiXSA9ICJQUkUiCiAgICAgIHVzYWdlSXRlbVsiX3RleHQiXSA9IG1lbnVbYWN0aXZlTWVudS5pZF1bIl91c2FnZSJdOwoKICAgICAgdmFyIG5ld0hSID0gbmV3IE9iamVjdCgpOwogICAgICBuZXdIUlsiX2VsZW1lbnQiXSA9ICJIUiIKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3SFIpKTsKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQodXNhZ2VJdGVtKSk7CiAgICAgIGJyZWFrOwogIH0KCiAgY2FsY3VsYXRlV3JhcHBlckhlaWdodCgpOwogIHJldHVybjsKfQoKCmZ1bmN0aW9uIGZpbGVEZXRhaWwoZmlsZUlELCBmaWxlVHlwZSkgewoKICBvcHRpb25zVGV4dCA9IG5ldyBBcnJheSgiTTNVIiwgIkhESG9tZVJ1biAtIFtFeHBlcmltZW50YWxdIikKICBvcHRpb25zVmFsdWUgPSBuZXcgQXJyYXkoIm0zdSIsICJoZGhyIikKCiAgc3dpdGNoIChmaWxlVHlwZSkgewoKICAgIGNhc2UgIm0zdSI6CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYW1lIikuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJQbGF5bGlzdCBuYW1lIik7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZXNjcmlwdGlvbiIpLnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAiRGVzY3JpcHRpb24gb2YgdGhpcyBwbGF5bGlzdCIpOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZS1kZXRhaWwtaGVhZGxpbmUiKS5pbm5lckhUTUwgPSAiTTNVIFBsYXlsaXN0IjsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUtcGF0aCIpLmlubmVySFRNTCA9ICJNM1UgRmlsZToiOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZS5zb3VyY2UiKS5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgIkxvY2FsIG9yIHJlbW90ZSIpOwogICAgICBicmVhazsKCiAgICBjYXNlICJoZGhyIjoKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5hbWUiKS5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgIkhESG9tZVJ1biBuYW1lIik7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZXNjcmlwdGlvbiIpLnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAiRGVzY3JpcHRpb24gb2YgdGhpcyBIREhvbWVSdW4gdHVuZXIiKTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUtZGV0YWlsLWhlYWRsaW5lIikuaW5uZXJIVE1MID0gIkhESG9tZVJ1biI7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlLXBhdGgiKS5pbm5lckhUTUwgPSAiSERIb21lUnVuIElQOiI7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlLnNvdXJjZSIpLnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAiSVAgYWRkcmVzcyBhbmQgcG9ydCBvZiB0aGUgdHVuZXIgKDE5Mi4xNjguMS4xMDo1MDA0KSIpOwogICAgICBicmVhazsKCiAgICBjYXNlICJ4bWx0diI6CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYW1lIikuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJYTUxUViBuYW1lIik7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZXNjcmlwdGlvbiIpLnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAiRGVzY3JpcHRpb24gb2YgdGhpcyBYTUxUViBmaWxlIik7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlLWRldGFpbC1oZWFkbGluZSIpLmlubmVySFRNTCA9ICJYTUxUViBGaWxlIjsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUtcGF0aCIpLmlubmVySFRNTCA9ICJYTUxUViBGaWxlOiI7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlLnNvdXJjZSIpLnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAiTG9jYWwgb3IgcmVtb3RlIik7CgogICAgICBvcHRpb25zVGV4dCA9IG5ldyBBcnJheSgiWE1MVFYiKQogICAgICBvcHRpb25zVmFsdWUgPSBuZXcgQXJyYXkoInhtbHR2IikKICAgICAgYnJlYWs7CiAgfQoKICBtb2RpZnlPcHRpb24oInR5cGUiLCBvcHRpb25zVGV4dCwgb3B0aW9uc1ZhbHVlKQoKICBzaG93UG9wVXBFbGVtZW50KCdmaWxlLWRldGFpbCcpOwoKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2F2ZUZpbGVEZXRhaWwiKS5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2F2ZUZpbGVEZXRhaWwoIicgKyBmaWxlSUQgKyAnIiwiJyArIGZpbGVUeXBlICsgJyIsIGZhbHNlKScpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cGRhdGVGaWxlRGV0YWlsIikuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHVwZGF0ZUZpbGUoIicgKyBmaWxlSUQgKyAnIiwiJyArIGZpbGVUeXBlICsgJyIsIGZhbHNlKScpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZWxldGVGaWxlRGV0YWlsIikuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNhdmVGaWxlRGV0YWlsKCInICsgZmlsZUlEICsgJyIsIicgKyBmaWxlVHlwZSArICciLCB0cnVlKScpOwoKICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKCiAgc3dpdGNoIChmaWxlSUQpIHsKCiAgICBjYXNlICItIjogLy8gTmV3IGZpbGUKICAgICAgZGF0YVsibmFtZSJdID0gIiI7CiAgICAgIGRhdGFbImRlc2NyaXB0aW9uIl0gPSAiIjsKICAgICAgZGF0YVsiZmlsZS5zb3VyY2UiXSA9ICIiOwogICAgICBkYXRhWyJ0eXBlIl0gPSBmaWxlVHlwZTsKCiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZWxldGVGaWxlRGV0YWlsIikuY2xhc3NOYW1lID0gImRlbGV0ZSI7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0eXBlIikuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJjaGFuZ2VGaWxlVHlwZSh0aGlzKTsiKQogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidHlwZSIpLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsIGZpbGVJRCkKCiAgICAgIHNob3dFbGVtZW50KCJkZWxldGVGaWxlRGV0YWlsIiwgZmFsc2UpOwogICAgICBzaG93RWxlbWVudCgidXBkYXRlRmlsZURldGFpbCIsIGZhbHNlKTsKCiAgICAgIGlmIChmaWxlVHlwZSA9PSAieG1sdHYiKSB7CiAgICAgICAgc2hvd0VsZW1lbnQoInR5cGUiLCBmYWxzZSk7CiAgICAgICAgc2hvd0VsZW1lbnQoImZpbGUtdHlwZSIsIGZhbHNlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzaG93RWxlbWVudCgidHlwZSIsIHRydWUpOwogICAgICAgIHNob3dFbGVtZW50KCJmaWxlLXR5cGUiLCB0cnVlKTsKICAgICAgfQoKICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgZGF0YSA9IGNvbmZpZ1siZmlsZXMiXVtmaWxlVHlwZV1bZmlsZUlEXTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlbGV0ZUZpbGVEZXRhaWwiKS5jbGFzc05hbWUgPSAiZGVsZXRlIjsKCiAgICAgIHNob3dFbGVtZW50KCJ1cGRhdGVGaWxlRGV0YWlsIiwgdHJ1ZSk7CiAgICAgIHNob3dFbGVtZW50KCJ0eXBlIiwgZmFsc2UpOwogICAgICBzaG93RWxlbWVudCgiZmlsZS10eXBlIiwgZmFsc2UpOwoKICAgICAgYnJlYWs7CgogIH0KCiAgdmFyIGtleXMgPSBnZXRPYmpLZXlzKGRhdGEpOwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKCiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoa2V5c1tpXSkpIHsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoa2V5c1tpXSkudmFsdWUgPSBkYXRhW2tleXNbaV1dOwogICAgfQoKCiAgfQoKfQoKZnVuY3Rpb24gY2hhbmdlRmlsZVR5cGUoZWxtKSB7CgogIHZhciBmaWxlSUQgPSBlbG0uZ2V0QXR0cmlidXRlKCJkYXRhLWlkIik7CiAgdmFyIGZpbGVUeXBlID0gZWxtLm9wdGlvbnNbZWxtLnNlbGVjdGVkSW5kZXhdLnZhbHVlOwoKICBmaWxlRGV0YWlsKGZpbGVJRCwgZmlsZVR5cGUpCgp9CgoKZnVuY3Rpb24gc2F2ZUZpbGVEZXRhaWwoZmlsZUlELCBmaWxlVHlwZSwgZGVsZXRlRmlsZSkgewoKICBpZiAoZmlsZUlEID09IHVuZGVmaW5lZCkgewogICAgYWxlcnQoIklEIGlzIG1pc3NpbmchISEiKTsKICAgIHJldHVybgogIH0KCiAgdmFyIGlucHV0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlLWRldGFpbCIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJTlBVVCIpOwogIHZhciBzZWxlY3RzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUtZGV0YWlsIikuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlNFTEVDVCIpOwogIHZhciBuZXdGaWxlRGF0YSA9IG5ldyBPYmplY3QoKTsKICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgIHN3aXRjaCAoaW5wdXRzW2ldLnR5cGUpIHsKICAgICAgY2FzZSAidGV4dCI6IG5ld0ZpbGVEYXRhW2lucHV0c1tpXS5uYW1lXSA9IGlucHV0c1tpXS52YWx1ZTsgYnJlYWs7CiAgICB9CiAgfQoKICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdHMubGVuZ3RoOyBpKyspIHsKICAgIG5ld0ZpbGVEYXRhW3NlbGVjdHNbaV0uaWRdID0gc2VsZWN0c1tpXS5vcHRpb25zW3NlbGVjdHNbaV0uc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgfQoKICBpZiAoZGVsZXRlRmlsZSA9PSB0cnVlKSB7CiAgICBzd2l0Y2ggKGZpbGVUeXBlKSB7CiAgICAgIGNhc2UgIm0zdSI6IHZhciBhbGVydFRleHQgPSAiRGVsZXRlIHRoaXMgcGxheWxpc3Q/IjsgYnJlYWs7CiAgICAgIGNhc2UgImhkaHIiOiB2YXIgYWxlcnRUZXh0ID0gIkRlbGV0ZSB0aGlzIEhESG9tZVJ1biB0dW5lcj8iOyBicmVhazsKICAgICAgY2FzZSAieG1sdHYiOiB2YXIgYWxlcnRUZXh0ID0gIkRlbGV0ZSB0aGlzIFhNTFRWIGZpbGU/IjsgYnJlYWs7CiAgICB9CgogICAgaWYgKGNvbmZpcm0oYWxlcnRUZXh0KSkgewogICAgICBuZXdGaWxlRGF0YVsiZGVsZXRlIl0gPSB0cnVlCiAgICAgIGRhdGEgPSBidWlsZEZpbGVzT2JqKGZpbGVUeXBlLCBmaWxlSUQsIG5ld0ZpbGVEYXRhKTsKICAgICAgY29uc29sZS5sb2coZGF0YSk7CgogICAgfSBlbHNlIHsKICAgICAgc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOwogICAgICByZXR1cm4KCiAgICB9CgogIH0gZWxzZSB7CgogICAgc3dpdGNoIChjb25maWdbImZpbGVzIl1bZmlsZVR5cGVdLmhhc093blByb3BlcnR5KGZpbGVJRCkpIHsKCiAgICAgIGNhc2UgdHJ1ZToKICAgICAgICBkYXRhID0gY29uZmlnWyJmaWxlcyJdW2ZpbGVUeXBlXVtmaWxlSURdOwogICAgICAgIGlmIChkYXRhWyJmaWxlLnNvdXJjZSJdICE9IG5ld0ZpbGVEYXRhWyJmaWxlLnNvdXJjZSJdKSB7CiAgICAgICAgICBkYXRhWyJ1cGRhdGUiXSA9IHRydWUKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YVsidXBkYXRlUGxheWxpc3ROYW1lIl0gPSB0cnVlOwogICAgICAgIH0KICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgbmV3RmlsZURhdGFbIm5ldyJdID0gdHJ1ZTsKICAgICAgICBkYXRhID0gYnVpbGRGaWxlc09iaihmaWxlVHlwZSwgZmlsZUlELCBuZXdGaWxlRGF0YSk7CiAgICAgICAgYnJlYWsKCiAgICB9CgogIH0KCiAgc3dpdGNoIChmaWxlVHlwZSkgewoKICAgIGNhc2UgIm0zdSI6IGRhdGFbImNtZCJdID0gInNhdmVGaWxlc00zVSI7IGJyZWFrOwogICAgY2FzZSAiaGRociI6IGRhdGFbImNtZCJdID0gInNhdmVGaWxlc0hESFIiOyBicmVhazsKICAgIGNhc2UgInhtbHR2IjogZGF0YVsiY21kIl0gPSAic2F2ZUZpbGVzWE1MVFYiOyBicmVhazsKCiAgfQogIC8vY29uc29sZS5sb2coZGF0YSk7CiAgVGhyZWFkZmluKGRhdGEpOwogIHJldHVybgp9CgpmdW5jdGlvbiB1cGRhdGVGaWxlKGZpbGVJRCwgZmlsZVR5cGUsIGFsbEZpbGVzKSB7CgogIHN3aXRjaCAoY29uZmlnWyJmaWxlcyJdW2ZpbGVUeXBlXS5oYXNPd25Qcm9wZXJ0eShmaWxlSUQpKSB7CgogICAgY2FzZSB0cnVlOgoKICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgIHZhciBkYXRhID0gYnVpbGRGaWxlc09iaihmaWxlVHlwZSwgZmlsZUlELCBjb25maWdbImZpbGVzIl1bZmlsZVR5cGVdW2ZpbGVJRF0pCiAgICAgIGRhdGFbIm5ldyJdID0gdHJ1ZQoKICAgICAgc3dpdGNoIChmaWxlVHlwZSkgewoKICAgICAgICBjYXNlICJtM3UiOiBkYXRhWyJjbWQiXSA9ICJ1cGRhdGVGaWxlTTNVIjsgYnJlYWs7CiAgICAgICAgY2FzZSAiaGRociI6IGRhdGFbImNtZCJdID0gInVwZGF0ZUZpbGVIREhSIjsgYnJlYWs7CiAgICAgICAgY2FzZSAieG1sdHYiOiBkYXRhWyJjbWQiXSA9ICJ1cGRhdGVGaWxlWE1MVFYiOyBicmVhazsKCiAgICAgIH0KCiAgICAgIFRocmVhZGZpbihkYXRhKTsKCiAgICAgIGJyZWFrOwogIH0KCn0KCmZ1bmN0aW9uIGJ1aWxkRmlsZXNPYmooZmlsZVR5cGUsIGZpbGVJRCwgb2JqKSB7CgogIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogIGRhdGFbImZpbGVzIl0gPSBuZXcgT2JqZWN0KCk7CiAgZGF0YVsiZmlsZXMiXVtmaWxlVHlwZV0gPSBuZXcgT2JqZWN0KCk7CiAgZGF0YVsiZmlsZXMiXVtmaWxlVHlwZV1bZmlsZUlEXSA9IG9iagogIHJldHVybiBkYXRhCgp9" webUI["html/js/mapping-editor.js"] = "dmFyIG1hcHBpbmdFcnJvciA9IGZhbHNlOwp2YXIgYnVsayA9IGZhbHNlOwp2YXIgYnVsa0VkaXRBbGwgPSBmYWxzZTsKdmFyIHNlbGVjdE9iaiA9IG5ldyBPYmplY3QoKTsKdmFyIHNlYXJjaE9iaiA9IG5ldyBPYmplY3QoKTsKCnZhciBidWxrSURzID0gbmV3IEFycmF5KCk7CnZhciBidWxrQ2hhbmdlT2JqID0gbmV3IE9iamVjdCgpOwoKZnVuY3Rpb24gY2hlY2tVbmRvKGtleSwgZWxtKSB7CiAgdmFyIHRtcCA9IG5ldyBPYmplY3QoKTsKICB0bXAgPSBlbG0KICBjb25zb2xlLmxvZygiLS0iKTsKICBpZiAodW5kby5oYXNPd25Qcm9wZXJ0eSgiZXBnTWFwcGluZyIpKSB7CiAgICB4RVBHWyJlcGdNYXBwaW5nIl0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHVuZG9bImVwZ01hcHBpbmciXSkpOzsKICB9IGVsc2UgewogICAgdW5kb1siZXBnTWFwcGluZyJdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlbG0pKTsKICB9Cn0KCi8vdmFyIHBsZXhDYXRlZ29yaWVzID0gbmV3IEFycmF5KCItIiwgIkFjdGlvbiBzcG9ydHMiLCAiQWN0aW9uIiwgIkFkdWx0cyBvbmx5IiwgIkFkdmVudHVyZSIsICJBZXJvYmljcyIsICJBbmltYWxzIiwgIkFuaW1hdGVkIiwgIkFuaW1lIiwgIkFudGhvbG9neSIsICJBcmNoZXJ5IiwgIkFydCIsICJBcnRzL2NyYWZ0cyIsICJBdWN0aW9uIiwgIkF1dG8gcmFjaW5nIiwgIkF1dG8iLCAiQXZpYXRpb24iLCAiQXdhcmRzIiwgIkJhbGxldCIsICJCYXNlYmFsbCIsICJCYXNrZXRiYWxsIiwgIkJpY3ljbGUgcmFjaW5nIiwgIkJpY3ljbGUiLCAiQmlsbGlhcmRzIiwgIkJpb2dyYXBoeSIsICJCb2F0IHJhY2luZyIsICJCb2F0IiwgIkJvd2xpbmciLCAiQm94aW5nIiwgIkJ1cy4vZmluYW5jaWFsIiwgIkNoaWxkcmVuIiwgIkNvbGxlY3RpYmxlcyIsICJDb21lZHkgZHJhbWEiLCAiQ29tZWR5IiwgIkNvbW11bml0eSIsICJDb21wdXRlcnMiLCAiQ29uc3VtZXIiLCAiQ29va2luZyIsICJDcmltZSBkcmFtYSIsICJDcmltZSIsICJEYW5jZSIsICJEYXJrIGNvbWVkeSIsICJEZWJhdGUiLCAiRGl2aW5nIiwgIkRvY3VkcmFtYSIsICJEb2N1bWVudGFyeSIsICJEcmFtYSIsICJFZHVjYXRpb25hbCIsICJFbnRlcnRhaW5tZW50IiwgIkVudmlyb25tZW50IiwgIkVxdWVzdHJpYW4iLCAiRXJvdGljIiwgIkV2ZW50IiwgIkZhbnRhc3kiLCAiRmFzaGlvbiIsICJGZWF0dXJlIEZpbG0iLCAiRmlzaGluZyIsICJGb290YmFsbCIsICJHYW1lIHNob3ciLCAiR2FtaW5nIiwgIkdheS9sZXNiaWFuIiwgIkdvbGYiLCAiSGFuZGJhbGwiLCAiSGVhbHRoIiwgIkhpc3RvcmljYWwgZHJhbWEiLCAiSGlzdG9yeSIsICJIb2NrZXkiLCAiSG9saWRheSIsICJIb21lIGltcHJvdmVtZW50IiwgIkhvcnJvciIsICJIb3JzZSIsICJIb3VzZS9nYXJkZW4iLCAiSG93LXRvIiwgIkludGVydmlldyIsICJJbnRsIHNvY2NlciIsICJMYXciLCAiTWFydGlhbCBhcnRzIiwgIk1lZGljYWwiLCAiTWlsaXRhcnkiLCAiTWluaXNlcmllcyIsICJNaXhlZCBtYXJ0aWFsIGFydHMiLCAiTW90b3JjeWNsZSByYWNpbmciLCAiTW90b3JjeWNsZSIsICJNb3RvcnNwb3J0cyIsICJNb3VudGFpbiBiaWtpbmciLCAiTXVzaWMiLCAiTXVzaWNhbCBjb21lZHkiLCAiTXVzaWNhbCIsICJNeXN0ZXJ5IiwgIk5hdHVyZSIsICJOZXdzIiwgIk5ld3NtYWdhemluZSIsICJPbHltcGljcyIsICJPcGVyYSIsICJPdXRkb29ycyIsICJQYXJhZGUiLCAiUGFyYW5vcm1hbCIsICJQYXJlbnRpbmciLCAiUGVyZm9ybWluZyBhcnRzIiwgIlBsYXlvZmYgc3BvcnRzIiwgIlBva2VyIiwgIlBvbGl0aWNzIiwgIlBybyB3cmVzdGxpbmciLCAiUHVibGljIGFmZmFpcnMiLCAiUmVhbGl0eSIsICJSZWxpZ2lvdXMiLCAiUm9kZW8iLCAiUm9sbGVyIGRlcmJ5IiwgIlJvbWFuY2UiLCAiUm9tYW50aWMgY29tZWR5IiwgIlJ1Z2J5IiwgIlJ1bm5pbmciLCAiU2FpbGluZyIsICJTY2llbmNlIGZpY3Rpb24iLCAiU2NpZW5jZSIsICJTZWxmIGltcHJvdmVtZW50IiwgIlNlcmllcyIsICJTaG9vdGluZyIsICJTaG9wcGluZyIsICJTaG9ydCBGaWxtIiwgIlNpdGNvbSIsICJTa2lpbmciLCAiU25vb2tlciIsICJTb2FwIiwgIlNvY2NlciIsICJTcGVjaWFsIiwgIlNwb3J0cyIsICJzcG9ydHMiLCAiU3BvcnRzIGV2ZW50IiwgIlNwb3J0cyBub24tZXZlbnQiLCAiU3BvcnRzIHRhbGsiLCAiU3RhbmR1cCIsICJTdXJmaW5nIiwgIlN1c3BlbnNlIiwgIlRWIE1vdmllIiwgIlRhbGsiLCAiVGVjaG5vbG9neSIsICJUZW5uaXMiLCAiVGhlYXRlciIsICJUaHJpbGxlciIsICJUcmFjay9maWVsZCIsICJUcmF2ZWwiLCAiVHJpYXRobG9uIiwgIlZhcmlldHkiLCAiVm9sbGV5YmFsbCIsICJXYXIiLCAiV2F0ZXJzcG9ydHMiLCAiV2VhdGhlciIsICJXZXN0ZXJuIiwgIldyZXN0bGluZyIsICJZYWNodCByYWNpbmciLCAibW92aWUiLCAic2VyaWVzIiwgInNwb3J0cyIsICJ0dnNob3ciKTsKdmFyIHBsZXhDYXRlZ29yaWVzVmFsdWVzID0gbmV3IEFycmF5KCItIiwgImtpZHMiLCAibmV3cyIsICJtb3ZpZSIsICJzZXJpZXMiLCAic3BvcnRzIikKdmFyIHBsZXhDYXRlZ29yaWVzT3B0aW9uID0gbmV3IEFycmF5KCItIiwgIktpZHMiLCAiTmV3cyIsICJNb3ZpZSIsICJTZXJpZXMiLCAiU3BvcnRzIikKCgpmdW5jdGlvbiBvcGVuTWFwcGluZ0VkaXRvcihlbG0pIHsKICB2YXIgY29sdW1uVG9Tb3J0ID0gMQoKICBjaGVja1VuZG8oImVwZ01hcHBpbmciLCB4RVBHWyJlcGdNYXBwaW5nIl0pCgogIHZhciBuZXdEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2V0dGluZ3MiKTsKCiAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdCgpOwogIG5ld0VudHJ5WyJfZWxlbWVudCJdID0gIkhSIjsKICBuZXdEaXYuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdFbnRyeSkpOwoKICB2YXIgbmV3RW50cnkgPSBuZXcgT2JqZWN0KCk7CiAgbmV3RW50cnlbIl9lbGVtZW50Il0gPSAiSU5QVVQiOwogIG5ld0VudHJ5WyJ0eXBlIl0gPSAiYnV0dG9uIjsKICBuZXdFbnRyeVsiY2xhc3MiXSA9ICJidXR0b24iOwogIG5ld0VudHJ5WyJ2YWx1ZSJdID0gIlNhdmUiOwogIG5ld0VudHJ5WyJvbmNsaWNrIl0gPSAic2F2ZVhFUEcoKSI7CiAgbmV3RGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKCiAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdCgpOwogIG5ld0VudHJ5WyJfZWxlbWVudCJdID0gIklOUFVUIjsKICBuZXdFbnRyeVsidHlwZSJdID0gImJ1dHRvbiI7CiAgbmV3RW50cnlbImNsYXNzIl0gPSAiYnV0dG9uIjsKICBuZXdFbnRyeVsidmFsdWUiXSA9ICJCdWxrIEVkaXQiOwogIG5ld0VudHJ5WyJvbmNsaWNrIl0gPSAiYnVsa0VkaXQoKSI7CiAgbmV3RGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKCiAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdCgpOwogIG5ld0VudHJ5WyJfZWxlbWVudCJdID0gIklOUFVUIjsKICBuZXdFbnRyeVsidHlwZSJdID0gImJ1dHRvbiI7CiAgbmV3RW50cnlbImNsYXNzIl0gPSAiYnV0dG9uIjsKICBuZXdFbnRyeVsidmFsdWUiXSA9ICJTaG93IFhFUEciOwogIG5ld0VudHJ5WyJvbmNsaWNrIl0gPSAic2hvd1hFUEcoKSI7CiAgbmV3RGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKCiAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdCgpOwogIG5ld0VudHJ5WyJfZWxlbWVudCJdID0gIklOUFVUIjsKICBuZXdFbnRyeVsiY2xhc3MiXSA9ICJzZWFyY2giOwogIG5ld0VudHJ5WyJpZCJdID0gInNlYXJjaE1hcHBpbmciOwogIG5ld0VudHJ5WyJ0eXBlIl0gPSAic2VhcmNoIjsKICBuZXdFbnRyeVsicGxhY2Vob2xkZXIiXSA9ICJTZWFyY2giOwogIG5ld0VudHJ5WyJvbmNoYW5nZSJdID0gInNlYXJjaEluTWFwcGluZygpIjsKICBuZXdEaXYuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdFbnRyeSkpOwoKICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNldHRpbmdzIik7CiAgLy9zY3JlZW5Mb2coIkR1cGxpY2F0ZSBJRCIsICJlcnJvciIsIHRydWUpCgoKICAvLyBCdWlsZCB0YWJsZQoKICB2YXIgbmV3V3JhcHBlciA9IG5ldyBPYmplY3QoKTsKICBuZXdXcmFwcGVyWyJfZWxlbWVudCJdID0gIkRJViI7CiAgbmV3V3JhcHBlclsiaWQiXSA9ICJib3gtd3JhcHBlciI7CiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3V3JhcHBlcikpOwoKCiAgdmFyIG5ld1RhYmxlID0gbmV3IE9iamVjdCgpOwogIG5ld1RhYmxlWyJfZWxlbWVudCJdID0gIlRBQkxFIjsKICBuZXdUYWJsZVsiaWQiXSA9ICJpZF9tYXBwaW5nIjsKICBuZXdUYWJsZVsiY2xhc3MiXSA9ICJ0YWJsZS1tYXBwaW5nIjsKICBkaXYubGFzdENoaWxkLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3VGFibGUpKTsKICBzaG93TG9hZGluZ1NjcmVlbih0cnVlKTsKCiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICBjcmVhdGVNYXBwaW5nVGFibGUoKTsKICB9LCAxMCk7Cgp9CgpmdW5jdGlvbiBjcmVhdGVTZWFyY2hPYmooKSB7CiAgc2VhcmNoT2JqID0gbmV3IE9iamVjdCgpOwogIHZhciBJRHMgPSBnZXRPYmpLZXlzKHhFUEdbImVwZ01hcHBpbmciXSkKICBmb3IgKHZhciBpID0gSURzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICB2YXIgaXRlbSA9IHhFUEdbImVwZ01hcHBpbmciXVtJRHNbaV1dOwogICAgdmFyIHNlYXJjaElEID0gaXRlbVsieC1lcGciXTsKICAgIHZhciBzZWFyY2hWYWx1ZSA9ICIiOwogICAgc2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZSArIGl0ZW1bIngtY2hhbm5lbElEIl0gKyAiICI7CiAgICBzZWFyY2hWYWx1ZSA9IHNlYXJjaFZhbHVlICsgaXRlbVsieC1jYXRlZ29yeSJdICsgIiAiOwogICAgc2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZSArIGl0ZW1bIngtbmFtZSJdICsgIiAiOwogICAgc2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZSArIGl0ZW1bIngtZ3JvdXAtdGl0bGUiXSArICIgIjsKICAgIHNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUgKyBpdGVtWyJ4LXhtbHR2LWZpbGUiXSArICIgIjsKICAgIHNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUgKyBpdGVtWyJfZmlsZS5tM3UubmFtZSJdICsgIiAiOwoKICAgIHN3aXRjaCAoaXRlbVsieC1hY3RpdmUiXSkgewogICAgICBjYXNlIHRydWU6IHNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUgKyAib25saW5lIjsgYnJlYWs7CiAgICAgIGNhc2UgZmFsc2U6IHNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUgKyAib2ZmbGluZSI7IGJyZWFrOwogICAgfQoKICAgIHNlYXJjaE9ialtzZWFyY2hWYWx1ZV0gPSBzZWFyY2hJRDsKCiAgfQp9CgoKZnVuY3Rpb24gY2FsY3VsYXRlV3JhcHBlckhlaWdodCgpIHsKCiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3gtd3JhcHBlciIpKSB7CgogICAgdmFyIGVsbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3gtd3JhcHBlciIpOwoKICAgIHZhciBkaXZzID0gbmV3IEFycmF5KCJteVN0cmVhbXNCb3giLCAiY2xpZW50SW5mbyIsICJzZXR0aW5ncyIpOwogICAgdmFyIGVsZW1lbnRzSGVpZ2h0ID0gMCAtIGVsbS5vZmZzZXRIZWlnaHQ7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpdnMubGVuZ3RoOyBpKyspIHsKICAgICAgZWxlbWVudHNIZWlnaHQgPSBlbGVtZW50c0hlaWdodCArIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRpdnNbaV0pLm9mZnNldEhlaWdodDsKICAgIH0KCiAgICBlbG0uc3R5bGUuaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gZWxlbWVudHNIZWlnaHQgKyAicHgiOwoKICB9CgogIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWVudS13cmFwcGVyIikpIHsKCiAgICB2YXIgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1lbnUtd3JhcHBlciIpOwoKICAgIHZhciBvZmZlc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2V0dGluZ3MiKS5vZmZzZXRIZWlnaHQgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlTdHJlYW1zQm94Iikub2Zmc2V0SGVpZ2h0ICsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNsaWVudEluZm8iKS5vZmZzZXRIZWlnaHQ7CgogICAgaWYgKHdpbmRvdy5pbm5lckhlaWdodCA+IG9mZmVzdCkgewogICAgICBlbG0uc3R5bGUuaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0ICsgInB4IgogICAgfSBlbHNlIHsKICAgICAgZWxtLnN0eWxlLmhlaWdodCA9IG9mZmVzdCArICJweCIKICAgIH0KCgogIH0KCgp9CgpmdW5jdGlvbiBjcmVhdGVNYXBwaW5nVGFibGUoKSB7CiAgY29sdW1uVG9Tb3J0ID0gMTsKICBjcmVhdGVTZWFyY2hPYmooKTsKCiAgLy8gQ3JlYXRlIHRhYmxlIChIZWFkZXIpCiAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkX21hcHBpbmciKTsKICB0YWJsZS5pbm5lckhUTUwgPSAiIjsKICB2YXIgbmV3VFIgPSBuZXcgT2JqZWN0KCk7CiAgbmV3VFJbIl9lbGVtZW50Il0gPSAiVFIiOwogIG5ld1RSWyJjbGFzcyJdID0gInRhYmxlLW1hcHBpbmctaGVhZGVyIjsKICB0YWJsZS5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld1RSKSk7CgogIHZhciB0ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZF9tYXBwaW5nIikubGFzdENoaWxkOwogIHZhciB0ckhlYWRsaW5lcyA9IG5ldyBBcnJheSgiQnVsayIsICJDaC4gTm8uIiwgIkxvZ28iLCAiQ2hhbm5lbCBOYW1lIiwgIlBsYXlsaXN0IiwgIkdyb3VwIFRpdGxlIiwgIlhNTFRWIEZpbGUiLCAiWE1MVFYgSUQiKQoKICBmb3IgKHZhciBpID0gMDsgaSA8IHRySGVhZGxpbmVzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgbmV3VEQgPSBuZXcgT2JqZWN0KCk7CgogICAgbmV3VERbIl9lbGVtZW50Il0gPSAiVEQiOwogICAgbmV3VERbIl90ZXh0Il0gPSB0ckhlYWRsaW5lc1tpXTsKCgoKICAgIHZhciB3aWR0aCA9ICIiOwogICAgc3dpdGNoICh0ckhlYWRsaW5lc1tpXSkgewoKICAgICAgY2FzZSAiQnVsayI6CgogICAgICAgIG1heFdpZHRoID0gIjMycHgiOwogICAgICAgIG1pbldpZHRoID0gIjMycHgiOwoKICAgICAgICAvLyBDcmVhdGUgYnVsayBURAogICAgICAgIHZhciBuZXdDaGVja2JveCA9IG5ldyBPYmplY3QoKTsKICAgICAgICBuZXdDaGVja2JveFsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CiAgICAgICAgbmV3Q2hlY2tib3hbInR5cGUiXSA9ICJjaGVja2JveCI7CiAgICAgICAgbmV3Q2hlY2tib3hbImNsYXNzIl0gPSAiYnVsayBoaWRlQnVsayI7CiAgICAgICAgbmV3Q2hlY2tib3hbIm9ubW91c2VvdXQiXSA9ICJqYXZhc2NyaXB0OiB0aGlzLmJsdXIoKSIKICAgICAgICBuZXdDaGVja2JveFsib25jbGljayJdID0gImphdmFzY3JpcHQ6IGJ1bGtFZGl0QWxsQ2hhbm5lbHMoKSIKCgogICAgICAgIC8vbmV3VEQuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdDaGVja2JveCkpOwoKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgIkNoLiBOby4iOgogICAgICAgIG1heFdpZHRoID0gIjgwcHgiOwogICAgICAgIG1pbldpZHRoID0gIjcwcHgiOwogICAgICAgIG5ld1REWyJvbmNsaWNrIl0gPSAiamF2c2NyaXB0OiBzb3J0VGFibGUoIiArIGkgKyAiKTsiOwogICAgICAgIG5ld1REWyJjbGFzcyJdID0gInBvaW50ZXIiOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSAiTG9nbyI6IG1heFdpZHRoID0gIjEyMHB4IjsgbWluV2lkdGggPSAiNjBweCI7IGJyZWFrOwoKICAgICAgY2FzZSAiQ2hhbm5lbCBOYW1lIjoKICAgICAgICBtYXhXaWR0aCA9ICI1MCUiOwogICAgICAgIG1pbldpZHRoID0gIjIwMHB4IjsKICAgICAgICBuZXdURFsib25jbGljayJdID0gImphdnNjcmlwdDogc29ydFRhYmxlKCIgKyBpICsgIik7IjsKICAgICAgICBuZXdURFsiY2xhc3MiXSA9ICJwb2ludGVyIjsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgIlBsYXlsaXN0IjoKICAgICAgICBtYXhXaWR0aCA9ICIxNTBweCI7CiAgICAgICAgbWluV2lkdGggPSAiMTAwcHgiOwogICAgICAgIG5ld1REWyJvbmNsaWNrIl0gPSAiamF2c2NyaXB0OiBzb3J0VGFibGUoIiArIGkgKyAiKTsiOwogICAgICAgIG5ld1REWyJjbGFzcyJdID0gInBvaW50ZXIiOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSAiR3JvdXAgVGl0bGUiOgogICAgICAgIG1heFdpZHRoID0gIjE1MHB4IjsKICAgICAgICBtaW5XaWR0aCA9ICIxMDBweCI7CiAgICAgICAgbmV3VERbIm9uY2xpY2siXSA9ICJqYXZzY3JpcHQ6IHNvcnRUYWJsZSgiICsgaSArICIpOyI7CiAgICAgICAgbmV3VERbImNsYXNzIl0gPSAicG9pbnRlciI7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlICJYTUxUViBGaWxlIjoKICAgICAgICBtYXhXaWR0aCA9ICIxNTBweCI7CiAgICAgICAgbWluV2lkdGggPSAiMTAwcHgiOwogICAgICAgIC8vbmV3VERbIm9uY2xpY2siXSAgPSAiamF2c2NyaXB0OiBzb3J0VGFibGUoIiArIGkgKyAiKTsiOwogICAgICAgIG5ld1REWyJjbGFzcyJdID0gIiI7CiAgICAgICAgYnJlYWs7CgoKICAgICAgY2FzZSAiWE1MVFYgSUQiOiBtYXhXaWR0aCA9ICIxNTBweCI7IG1pbldpZHRoID0gIjEwMHB4IjsgYnJlYWs7CgogICAgICBkZWZhdWx0OgogICAgICAgIG5ld1REWyJjbGFzcyJdID0gIiI7CiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgdHIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdURCkpOwogICAgaWYgKHRySGVhZGxpbmVzW2ldID09ICJCdWxrIikgewogICAgICB0ci5sYXN0Q2hpbGQuaW5uZXJIVE1MID0gIiI7CiAgICAgIHRyLmxhc3RDaGlsZC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0NoZWNrYm94KSk7CgogICAgfQoKICAgIHZhciBlbG0gPSB0ci5sYXN0Q2hpbGQ7CiAgICBlbG0uc3R5bGUud2lkdGggPSBtYXhXaWR0aDsKICAgIGVsbS5zdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoOwogICAgZWxtLnN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7CgogIH0KICBjYWxjdWxhdGVXcmFwcGVySGVpZ2h0KCk7CiAgdmFyIElEcyA9IGdldE9iaktleXMoeEVQR1siZXBnTWFwcGluZyJdKQoKICB2YXIgYWxsWG1sdHZGaWxlcyA9IGdldE9iaktleXMoeEVQR1sieG1sdHZNYXAiXSk7CgogIGlmIChhbGxYbWx0dkZpbGVzID09IDApIHsKICAgIHNob3dMb2FkaW5nU2NyZWVuKGZhbHNlKTsKICAgIHJldHVybjsKICB9CgogIC8vIFNvcnQgSURzCiAgdmFyIHBvc09iaiA9IG5ldyBPYmplY3QoKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IElEcy5sZW5ndGg7IGkrKykgewogICAgdmFyIGl0ZW0gPSB4RVBHWyJlcGdNYXBwaW5nIl1bSURzW2ldXTsKICAgIHZhciBwb3MKICAgIHN3aXRjaCAoaXNOYU4oeEVQR1siZXBnTWFwcGluZyJdW0lEc1tpXV1bIngtY2hhbm5lbElEIl0pKSB7CiAgICAgIGNhc2UgZmFsc2U6IHBvcyA9IHBhcnNlRmxvYXQoeEVQR1siZXBnTWFwcGluZyJdW0lEc1tpXV1bIngtY2hhbm5lbElEIl0pOyBicmVhazsKICAgIH0KICAgIHBvc09ialtwb3NdID0gaXRlbTsKICB9CiAgcG9zRmxvYXQgPSBnZXRPYmpLZXlzKHBvc09iaikKICBmdW5jdGlvbiBzb3J0RmxvYXQoYSwgYikgeyByZXR1cm4gYSAtIGI7IH0KICBwb3NGbG9hdC5zb3J0KHNvcnRGbG9hdCkKCiAgLy9jb25zb2xlLmxvZyhwb3NGbG9hdCk7CgogIC8vIC0tLQoKICBpZiAoSURzLmxlbmd0aCA+IDIwMCkgewogICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgIHNob3dMb2FkaW5nU2NyZWVuKHRydWUpOwogICAgfSwgMSk7CgogIH0KCgogIC8vIHRhYmxlIGZvciBpbnQgY2hhbm5lbCBJRCdzCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3NGbG9hdC5sZW5ndGg7IGkrKykgewoKICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZF9tYXBwaW5nIik7CiAgICB2YXIgaXRlbSA9IHBvc09ialtwb3NGbG9hdFtpXV07CiAgICAvL3ZhciBpdGVtICA9IHhFUEdbImVwZ01hcHBpbmciXVtJRHNbaV1dOwogICAgLy9jb25zb2xlLmxvZyhpdGVtKTsKICAgIHZhciBuZXdUUiA9IG5ldyBPYmplY3QoKTsKICAgIG5ld1RSWyJfZWxlbWVudCJdID0gIlRSIjsKICAgIG5ld1RSWyJjbGFzcyJdID0gIiI7CiAgICBuZXdUUlsiaWQiXSA9IGl0ZW1bIngtZXBnIl07CiAgICBuZXdUUlsib25jb250ZXh0bWVudSJdID0gJ2phdmFzY3JpcHQ6IHN3aXRjaENoYW5uZWxTdGF0dXMoIicgKyBpdGVtWyJ4LWVwZyJdICsgJyIpOyByZXR1cm4gZmFsc2U7JzsKICAgIHRhYmxlLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3VFIpKTsKCiAgICB2YXIgdHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRfbWFwcGluZyIpLmxhc3RDaGlsZDsKCiAgICAvLyBDcmVhdGUgYnVsayBURAogICAgdmFyIG5ld1REID0gbmV3IE9iamVjdCgpOwogICAgbmV3VERbIl9lbGVtZW50Il0gPSAiSU5QVVQiOwogICAgbmV3VERbInR5cGUiXSA9ICJjaGVja2JveCI7CiAgICBuZXdURFsiY2xhc3MiXSA9ICJidWxrIGhpZGVCdWxrIjsKICAgIG5ld1REWyJvbm1vdXNlb3V0Il0gPSAiamF2YXNjcmlwdDogdGhpcy5ibHVyKCkiCiAgICBuZXdURFsib25jbGljayJdID0gImphdmFzY3JpcHQ6IGNoZWNrQ2xpY2soKSIKCiAgICBjcmVhdGVOZXdURChuZXdURCwgdHIpOwoKCiAgICAvLyBDcmVhdGUgSUQgVEQKICAgIHZhciBuZXdURCA9IG5ldyBPYmplY3QoKTsKICAgIG5ld1REWyJfZWxlbWVudCJdID0gIklOUFVUIjsKICAgIG5ld1REWyJ0eXBlIl0gPSAidGV4dCIKICAgIG5ld1REWyJjbGFzcyJdID0gInc0MHB4IjsKICAgIG5ld1REWyJ2YWx1ZSJdID0gaXRlbVsieC1jaGFubmVsSUQiXTsKICAgIG5ld1REWyJvbmZvY3Vzb3V0Il0gPSAiamF2YXNjcmlwdDogYXJyYW5nZVRhYmxlKHRoaXMpOyIKICAgIGNyZWF0ZU5ld1REKG5ld1RELCB0cik7CgogICAgLy8gQ3JlYXRlIElNRyBURAogICAgdmFyIG5ld1REID0gbmV3IE9iamVjdCgpOwogICAgbmV3VERbIl9lbGVtZW50Il0gPSAiSU1HIjsKICAgIG5ld1REWyJvbmNsaWNrIl0gPSAnamF2YXNjcmlwdDogbWFwcGluZ0RldGFpbCgiJyArIGl0ZW1bIngtZXBnIl0gKyAnIik7JzsKICAgIGlmIChpdGVtWyJ0dmctbG9nbyJdICE9IHVuZGVmaW5lZCkgewogICAgICBuZXdURFsic3JjIl0gPSBpdGVtWyJ0dmctbG9nbyJdOwogICAgfSBlbHNlIHsKICAgICAgaXRlbVsidHZnLWxvZ28iXSA9ICIiOwogICAgICBuZXdURFsic3JjIl0gPSAiIjsKICAgIH0KICAgIGNyZWF0ZU5ld1REKG5ld1RELCB0cik7CiAgICB0ci5sYXN0Q2hpbGQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG1hcHBpbmdEZXRhaWwoIicgKyBpdGVtWyJ4LWVwZyJdICsgJyIpOycpCgogICAgLy8gQ3JlYXRlIFAgVEQgKGNoYW5uZWwgbmFtZSkKICAgIHZhciBuZXdURCA9IG5ldyBPYmplY3QoKTsKICAgIG5ld1REWyJfZWxlbWVudCJdID0gIlAiOwogICAgbmV3VERbIl90ZXh0Il0gPSBpdGVtWyJ4LW5hbWUiXTsKICAgIG5ld1REWyJjbGFzcyJdID0gaXRlbVsieC1jYXRlZ29yeSJdOwoKICAgIGNyZWF0ZU5ld1REKG5ld1RELCB0cik7CiAgICB0ci5sYXN0Q2hpbGQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG1hcHBpbmdEZXRhaWwoIicgKyBpdGVtWyJ4LWVwZyJdICsgJyIpOycpCiAgICB0ci5sYXN0Q2hpbGQubGFzdENoaWxkLnN0eWxlLnBhZGRpbmcgPSAiNXB4IDEwcHgiOwoKICAgIC8vIENyZWF0ZSBQIFREIChQbGF5bGlzdCBOYW1lKQogICAgdmFyIG5ld1REID0gbmV3IE9iamVjdCgpOwogICAgbmV3VERbIl9lbGVtZW50Il0gPSAiUCI7CiAgICBuZXdURFsiX3RleHQiXSA9IGl0ZW1bIl9maWxlLm0zdS5uYW1lIl07CiAgICBuZXdURFsiY2xhc3MiXSA9IGl0ZW1bInRhYmxlRWxsaXBzaXMiXTsKCiAgICBjcmVhdGVOZXdURChuZXdURCwgdHIpOwogICAgdHIubGFzdENoaWxkLnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBtYXBwaW5nRGV0YWlsKCInICsgaXRlbVsieC1lcGciXSArICciKTsnKQoKICAgIC8vIENyZWF0ZSBQIFREIChHcm91cCBUaXRsZSkKICAgIHZhciBuZXdURCA9IG5ldyBPYmplY3QoKTsKICAgIG5ld1REWyJfZWxlbWVudCJdID0gIlAiOwogICAgbmV3VERbIl90ZXh0Il0gPSBpdGVtWyJ4LWdyb3VwLXRpdGxlIl07CiAgICBuZXdURFsiY2xhc3MiXSA9IGl0ZW1bInRhYmxlRWxsaXBzaXMiXTsKCiAgICBjcmVhdGVOZXdURChuZXdURCwgdHIpOwogICAgdHIubGFzdENoaWxkLnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBtYXBwaW5nRGV0YWlsKCInICsgaXRlbVsieC1lcGciXSArICciKTsnKQoKCiAgICAvLyBDcmVhdGUgUCBURCAoWE1MVFYgZmlsZSkKICAgIHZhciBuZXdURCA9IG5ldyBPYmplY3QoKTsKICAgIG5ld1REWyJfZWxlbWVudCJdID0gIlAiOwogICAgbmV3VERbImNsYXNzIl0gPSAidGFibGVFbGxpcHNpcyI7CiAgICBuZXdURFsiX3RleHQiXSA9ICItIgoKICAgIGlmIChhbGxYbWx0dkZpbGVzLmluZGV4T2YoaXRlbVsieC14bWx0di1maWxlIl0pICE9IC0xKSB7CiAgICAgIHZhciB4WG1sdHZGaWxlID0gaXRlbVsieC14bWx0di1maWxlIl07CiAgICAgIHN3aXRjaCAoeFhtbHR2RmlsZSkgewogICAgICAgIGNhc2UgIi0iOiBuZXdURFsiX3RleHQiXSA9IHhYbWx0dkZpbGU7IGJyZWFrOwogICAgICAgIGNhc2UgIlRocmVhZGZpbiBEdW1teSI6IG5ld1REWyJfdGV4dCJdID0geFhtbHR2RmlsZTsgYnJlYWs7CiAgICAgICAgZGVmYXVsdDogbmV3VERbIl90ZXh0Il0gPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoeFhtbHR2RmlsZSwgInhtbHR2IiwgIm5hbWUiKTsgYnJlYWs7CgogICAgICB9CiAgICAgIC8vY29uc29sZS5sb2cobmV3VEQpOwoKICAgICAgLy9uZXdURFsiX3RleHQiXSAgICA9IGl0ZW1bIngteG1sdHYtZmlsZSJdOwogICAgfSBlbHNlIHsKICAgICAgLy9uZXdURFsiX3RleHQiXSA9ICItIgogICAgfQogICAgY3JlYXRlTmV3VEQobmV3VEQsIHRyKTsKICAgIHRyLmxhc3RDaGlsZC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogbWFwcGluZ0RldGFpbCgiJyArIGl0ZW1bIngtZXBnIl0gKyAnIik7JykKCiAgICAvLyBDcmVhdHIgUCBURCAoWE1MVFYgY2hhbm5lbCBJRCkKICAgIG5ld1REWyJfZWxlbWVudCJdID0gIlAiOwogICAgbmV3VERbImNsYXNzIl0gPSAidGFibGVFbGxpcHNpcyI7CgogICAgaWYgKGl0ZW1bIngtbWFwcGluZyJdICE9IHVuZGVmaW5lZCkgewogICAgICBuZXdURFsiX3RleHQiXSA9IGl0ZW1bIngtbWFwcGluZyJdOwogICAgfQoKICAgIGNyZWF0ZU5ld1REKG5ld1RELCB0cik7CiAgICB0ci5sYXN0Q2hpbGQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG1hcHBpbmdEZXRhaWwoIicgKyBpdGVtWyJ4LWVwZyJdICsgJyIpOycpCgoKICAgIHZhciB4WG1sdHZGaWxlID0gaXRlbVsieC14bWx0di1maWxlIl07CiAgICB2YXIgeE1hcHBpbmcgPSBpdGVtWyJ4LW1hcHBpbmciXTsKICAgIHZhciB0dmdJRCA9IGl0ZW1bInR2Zy1pZCJdOwoKICAgIC8vY29uc29sZS5sb2coaXRlbVsieC1lcGciXSk7CiAgICAvL2NvbnNvbGUubG9nKGl0ZW0pOwoKICAgIGlmIChpdGVtWyJ4LWFjdGl2ZSJdID09IHRydWUpIHsKICAgICAgdHIuY2xhc3NOYW1lID0gImFjdGl2ZUVQRyI7CiAgICB9IGVsc2UgewogICAgICB0ci5jbGFzc05hbWUgPSAibm90QWN0aXZlRVBHIjsKICAgIH0KCiAgfQoKICBzb3J0VGFibGUoMSk7CgogIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgc2hvd0xvYWRpbmdTY3JlZW4oZmFsc2UpOwogIH0sIDUpOwp9CgpmdW5jdGlvbiBzZWFyY2hJbk1hcHBpbmcoZWxtKSB7CgogIHZhciBzZWFyY2ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VhcmNoTWFwcGluZyIpLnZhbHVlOwogIHZhciB2YWx1ZXMgPSBnZXRPYmpLZXlzKHNlYXJjaE9iaikKCiAgZm9yICh2YXIgaSA9IHZhbHVlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgdmFyIGlkID0gc2VhcmNoT2JqW3ZhbHVlc1tpXV07CiAgICB2YXIgYm9vbCA9IHZhbHVlc1tpXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50b0xvd2VyQ2FzZSgpKTsKICAgIHN3aXRjaCAoYm9vbCkgewogICAgICBjYXNlIHRydWU6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gIiI7IGJyZWFrOwogICAgICBjYXNlIGZhbHNlOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsgYnJlYWs7CiAgICB9CiAgfQoKfQoKZnVuY3Rpb24gbWFwcGluZ0RldGFpbCh4ZXBnKSB7CgogIGJ1bGtJRHMgPSBuZXcgQXJyYXkoKTsKICB2YXIgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7CiAgLy8gSWYgaW5wdXQgaWQsIHJldHVybgogIGlmIChhY3RpdmVFbGVtZW50LnRhZ05hbWUgPT0gIklOUFVUIikgewogICAgcmV0dXJuCiAgfQoKICBpZiAoYnVsayA9PSB0cnVlKSB7CiAgICB2YXIgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiYnVsayIpOwogICAgZm9yICh2YXIgaSA9IDE7IGkgPCBlbG0ubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsbVtpXS5jaGVja2VkID09IHRydWUpIHsKICAgICAgICB2YXIgaWQgPSBlbG1baV0ucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmlkOwogICAgICAgIGJ1bGtJRHMucHVzaChpZCkKICAgICAgfQoKICAgIH0KCiAgICBpZiAoYnVsa0lEcy5sZW5ndGggPT0gMCkgewogICAgICBzaG93RWxlbWVudCgncG9wdXAnLCBmYWxzZSkKICAgICAgYWxlcnQoIk5vIGNoYW5uZWxzIHNlbGVjdGVkIGZvciBlZGl0aW5nIikKICAgICAgcmV0dXJuCiAgICB9CgogICAgeGVwZyA9IGJ1bGtJRHNbMF0KICB9CgoKICBjcmVhdGVTZWFyY2hPYmooKTsKCiAgc2hvd1BvcFVwRWxlbWVudCgnbWFwcGluZy1kZXRhaWwnKTsKCiAgdmFyIHRoaXNDaGFubmVsID0geEVQR1siZXBnTWFwcGluZyJdW3hlcGddOwogIC8vY29uc29sZS5sb2codGhpc0NoYW5uZWwpOwogIHZhciB4WG1sdHZGaWxlID0gdGhpc0NoYW5uZWxbIngteG1sdHYtZmlsZSJdOwogIHZhciB4TWFwcGluZyA9IHRoaXNDaGFubmVsWyJ4LW1hcHBpbmciXTsKICB2YXIgeENhdGVnb3J5ID0gdGhpc0NoYW5uZWxbIngtY2F0ZWdvcnkiXTsKCiAgaWYgKHhYbWx0dkZpbGUgPT0gdW5kZWZpbmVkKSB7CiAgICB0aGlzQ2hhbm5lbFsieC14bWx0di1maWxlIl0gPSAiLSI7CiAgICB4WG1sdHZGaWxlID0gIi0iOwogIH0KCiAgaWYgKHhNYXBwaW5nID09IHVuZGVmaW5lZCkgewogICAgdGhpc0NoYW5uZWxbIngtbWFwcGluZyJdID0gIi0iOwogICAgeE1hcHBpbmcgPSAiLSI7CiAgfQoKICAvKgogIGNvbnNvbGUubG9nKCJJRDoiLCB4ZXBnKTsKICBjb25zb2xlLmxvZygiWE1MVFYgRmlsZToiLCB4WG1sdHZGaWxlKTsKICBjb25zb2xlLmxvZygiTWFwcGluZzoiLCB4TWFwcGluZyk7CiAgKi8KCiAgdmFyIGtleXMgPSBnZXRPYmpLZXlzKHRoaXNDaGFubmVsKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrZXlzW2ldKSkgewogICAgICB2YXIgdGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrZXlzW2ldKQogICAgfSBlbHNlIHsKICAgICAgdmFyIHRkID0gdW5kZWZpbmVkOwogICAgfQoKICAgIHZhciBuZXdJdGVtID0gbmV3IE9iamVjdCgpOwogICAgdmFyIHZhbHVlcywgdGV4dCA9IG5ldyBBcnJheSgpOwogICAgc3dpdGNoIChrZXlzW2ldKSB7CiAgICAgIGNhc2UgIngteG1sdHYtZmlsZSI6CiAgICAgICAgdmFyIGZpbGVJRHMgPSBnZXRPYmpLZXlzKHhFUEdbInhtbHR2TWFwIl0pOwogICAgICAgIHZhciB2YWx1ZSA9IG5ldyBBcnJheSgiLSIpOwogICAgICAgIHZhciB0ZXh0ID0gbmV3IEFycmF5KCItIik7CgogICAgICAgIGZvciAodmFyIGogPSBmaWxlSURzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7CiAgICAgICAgICBpZiAoZmlsZUlEc1tqXSAhPSAiVGhyZWFkZmluIER1bW15IikgewogICAgICAgICAgICB2YWx1ZS5wdXNoKGdldFZhbHVlRnJvbVByb3ZpZGVyRmlsZShmaWxlSURzW2pdLCAieG1sdHYiLCAiZmlsZS50aHJlYWRmaW4iKSkKICAgICAgICAgICAgdGV4dC5wdXNoKGdldFZhbHVlRnJvbVByb3ZpZGVyRmlsZShmaWxlSURzW2pdLCAieG1sdHYiLCAibmFtZSIpKQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFsdWUucHVzaChmaWxlSURzW2pdKQogICAgICAgICAgICB0ZXh0LnB1c2goZmlsZUlEc1tqXSkKICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICBuZXdJdGVtWyJfZWxlbWVudCJdID0gIlNFTEVDVCI7CiAgICAgICAgbmV3SXRlbVsiX29wdGlvblZhbHVlcyJdID0gdmFsdWU7CiAgICAgICAgbmV3SXRlbVsiX29wdGlvblRleHQiXSA9IHRleHQKICAgICAgICBuZXdJdGVtWyJ2YWx1ZSJdID0geFhtbHR2RmlsZTsKICAgICAgICBuZXdJdGVtWyJvbmNoYW5nZSJdID0gJ2phdmFzY3JpcHQ6IGNoYW5nZVhtbHR2RmlsZSgiJyArIHhlcGcgKyAnIix0aGlzKTsnOwoKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgIngtbWFwcGluZyI6CgogICAgICAgIHZhciB2YWx1ZXMgPSBnZXRPYmpLZXlzKHhFUEdbInhtbHR2TWFwIl1beFhtbHR2RmlsZV0pOwoKICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbHVlcy5sZW5ndGg7IGorKykgewoKICAgICAgICAgIGlmICh4RVBHWyJ4bWx0dk1hcCJdW3hYbWx0dkZpbGVdW3ZhbHVlc1tqXV0uaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXktbmFtZScpID09IHRydWUpIHsKICAgICAgICAgICAgdmFyIGRpc3BsYXlOYW1lID0geEVQR1sieG1sdHZNYXAiXVt4WG1sdHZGaWxlXVt2YWx1ZXNbal1dWyJkaXNwbGF5LW5hbWUiXTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBkaXNwbGF5TmFtZSA9ICItIgogICAgICAgICAgfQoKICAgICAgICAgIC8vdGV4dFtqXSA9IHZhbHVlc1tqXSArICIgKCIgKyBkaXNwbGF5TmFtZSArICIpIjsKICAgICAgICAgIHRleHRbal0gPSBkaXNwbGF5TmFtZSArICIgKCIgKyB2YWx1ZXNbal0gKyAiKSI7CiAgICAgICAgfQoKICAgICAgICB0ZXh0LnVuc2hpZnQoIi0iKTsKICAgICAgICB2YWx1ZXMudW5zaGlmdCgiLSIpOwogICAgICAgIG5ld0l0ZW1bIl9lbGVtZW50Il0gPSAiU0VMRUNUIjsKICAgICAgICBuZXdJdGVtWyJfb3B0aW9uVmFsdWVzIl0gPSB2YWx1ZXM7CiAgICAgICAgbmV3SXRlbVsiX29wdGlvblRleHQiXSA9IHRleHQKICAgICAgICBuZXdJdGVtWyJ2YWx1ZSJdID0geE1hcHBpbmc7CiAgICAgICAgbmV3SXRlbVsib25jaGFuZ2UiXSA9ICdqYXZhc2NyaXB0OiBtYXBwaW5nQ2hhbm5lbCgiJyArIHhlcGcgKyAnIix0aGlzKTsnOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSAieC1jYXRlZ29yeSI6CiAgICAgICAgLy92YXIgdmFsdWVzID0gcGxleENhdGVnb3JpZXNWYWx1ZXMKICAgICAgICBuZXdJdGVtWyJfZWxlbWVudCJdID0gIlNFTEVDVCI7CiAgICAgICAgbmV3SXRlbVsiX29wdGlvblZhbHVlcyJdID0gcGxleENhdGVnb3JpZXNWYWx1ZXM7CiAgICAgICAgbmV3SXRlbVsiX29wdGlvblRleHQiXSA9IHBsZXhDYXRlZ29yaWVzT3B0aW9uOwogICAgICAgIG5ld0l0ZW1bInZhbHVlIl0gPSB4Q2F0ZWdvcnk7CiAgICAgICAgbmV3SXRlbVsib25jaGFuZ2UiXSA9ICdzYXZlQ2F0ZWdvcnkoIicgKyB4ZXBnICsgJyIpJzsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgInR2Zy1sb2dvIjoKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbm5lbC1sb2dvIikuc2V0QXR0cmlidXRlKCJzcmMiLCB0aGlzQ2hhbm5lbFsidHZnLWxvZ28iXSk7CiAgICAgICAgbmV3SXRlbVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CiAgICAgICAgbmV3SXRlbVsidHlwZSJdID0gInRleHQiOwogICAgICAgIG5ld0l0ZW1bInZhbHVlIl0gPSB0aGlzQ2hhbm5lbFsidHZnLWxvZ28iXTsKICAgICAgICBuZXdJdGVtWyJvbmZvY3Vzb3V0Il0gPSAnc2F2ZUNoYW5uZWxMb2dvKCInICsgeGVwZyArICciKSc7CiAgICAgICAgbmV3SXRlbVsicGxhY2Vob2xkZXIiXSA9ICdJbWFnZSBVUkwnOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSAieC11cGRhdGUtY2hhbm5lbC1pY29uIjoKICAgICAgICBuZXdJdGVtWyJfZWxlbWVudCJdID0gIklOUFVUIjsKICAgICAgICBuZXdJdGVtWyJ0eXBlIl0gPSAiY2hlY2tib3giOwogICAgICAgIHN3aXRjaCAoSlNPTi5wYXJzZSh0aGlzQ2hhbm5lbFsieC11cGRhdGUtY2hhbm5lbC1pY29uIl0pKSB7CiAgICAgICAgICBjYXNlIHRydWU6IG5ld0l0ZW1bImNoZWNrZWQiXSA9IHRoaXNDaGFubmVsWyJ4LXVwZGF0ZS1jaGFubmVsLWljb24iXTsKICAgICAgICAgICAgYnJlYWsKICAgICAgICB9CiAgICAgICAgbmV3SXRlbVsib25jaGFuZ2UiXSA9ICdzYXZlQ2hhbm5lbEljb25VcGRhdGUoIicgKyB4ZXBnICsgJyIpJzsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgIngtbmFtZSI6CiAgICAgICAgbmV3SXRlbVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CiAgICAgICAgbmV3SXRlbVsidHlwZSJdID0gInRleHQiOwogICAgICAgIG5ld0l0ZW1bInZhbHVlIl0gPSB0aGlzQ2hhbm5lbFsieC1uYW1lIl07CiAgICAgICAgbmV3SXRlbVsib25mb2N1c291dCJdID0gJ3NhdmVDaGFubmVsTmFtZSgiJyArIHhlcGcgKyAnIiknOwogICAgICAgIG5ld0l0ZW1bInBsYWNlaG9sZGVyIl0gPSAnQ2hhbm5lbCBOYW1lJzsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgIngtY2hhbm5lbHMtc3RhcnQiOgogICAgICAgIG5ld0l0ZW1bIl9lbGVtZW50Il0gPSAiSU5QVVQiOwogICAgICAgIG5ld0l0ZW1bInR5cGUiXSA9ICJ0ZXh0IjsKICAgICAgICBuZXdJdGVtWyJ2YWx1ZSJdID0gdGhpc0NoYW5uZWxbIngtY2hhbm5lbHMtc3RhcnQiXTsKICAgICAgICBuZXdJdGVtWyJwbGFjZWhvbGRlciJdID0gJ0NoYW5uZWwgR3JvdXAgU3RhcnQnOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSAieC11cGRhdGUtY2hhbm5lbC1uYW1lIjoKICAgICAgICBpZiAodGhpc0NoYW5uZWwuaGFzT3duUHJvcGVydHkoIl91dWlkLmtleSIpID09IHRydWUpIHsKICAgICAgICAgIG5ld0l0ZW1bIl9lbGVtZW50Il0gPSAiSU5QVVQiOwogICAgICAgICAgbmV3SXRlbVsidHlwZSJdID0gImNoZWNrYm94IjsKICAgICAgICAgIHN3aXRjaCAoSlNPTi5wYXJzZSh0aGlzQ2hhbm5lbFsieC11cGRhdGUtY2hhbm5lbC1uYW1lIl0pKSB7CiAgICAgICAgICAgIGNhc2UgdHJ1ZTogbmV3SXRlbVsiY2hlY2tlZCJdID0gdGhpc0NoYW5uZWxbIngtdXBkYXRlLWNoYW5uZWwtbmFtZSJdOwogICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICB9CiAgICAgICAgICBuZXdJdGVtWyJvbmNoYW5nZSJdID0gJ3NhdmVDaGFubmVsTmFtZVVwZGF0ZSgiJyArIHhlcGcgKyAnIiknOwogICAgICAgICAgc2hvd0VsZW1lbnQoInN0cmVhbUhhc0NVSUQiLCB0cnVlKQoKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvL3N0cmVhbUhhc0NVSUQKICAgICAgICAgIHNob3dFbGVtZW50KCJzdHJlYW1IYXNDVUlEIiwgZmFsc2UpCiAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICBjYXNlICJ4LWFjdGl2ZSI6CiAgICAgICAgbmV3SXRlbVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CiAgICAgICAgbmV3SXRlbVsidHlwZSJdID0gImNoZWNrYm94IjsKICAgICAgICBzd2l0Y2ggKEpTT04ucGFyc2UodGhpc0NoYW5uZWxbIngtYWN0aXZlIl0pKSB7CiAgICAgICAgICBjYXNlIHRydWU6IG5ld0l0ZW1bImNoZWNrZWQiXSA9IHRoaXNDaGFubmVsWyJ4LWFjdGl2ZSJdOwogICAgICAgICAgICBicmVhawogICAgICAgIH0KICAgICAgICBuZXdJdGVtWyJvbmNoYW5nZSJdID0gJ3NhdmVDaGFubmVsU3RhdHVzKCInICsgeGVwZyArICciKSc7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlICJ4LWdyb3VwLXRpdGxlIjoKICAgICAgICBuZXdJdGVtWyJfZWxlbWVudCJdID0gIklOUFVUIjsKICAgICAgICBuZXdJdGVtWyJ0eXBlIl0gPSAidGV4dCI7CiAgICAgICAgbmV3SXRlbVsidmFsdWUiXSA9IHRoaXNDaGFubmVsWyJ4LWdyb3VwLXRpdGxlIl07CiAgICAgICAgbmV3SXRlbVsib25mb2N1c291dCJdID0gJ3NhdmVHcm91cFRpdGxlKCInICsgeGVwZyArICciKSc7CiAgICAgICAgbmV3SXRlbVsicGxhY2Vob2xkZXIiXSA9ICdHcm91cCBUaXRsZSc7CiAgICAgICAgYnJlYWs7CgogICAgICBkZWZhdWx0OgogICAgICAgIG5ld0l0ZW1bIl9lbGVtZW50Il0gPSAiUCI7CiAgICAgICAgbmV3SXRlbVsiX3RleHQiXSA9IHRoaXNDaGFubmVsW2tleXNbaV1dOwogICAgICAgIGJyZWFrOwoKICAgIH0KCiAgICBpZiAodGQgIT0gdW5kZWZpbmVkKSB7CiAgICAgIHRkLmlubmVySFRNTCA9ICIiOwogICAgICB2YXIgZWxlbWVudCA9IGNyZWF0ZU5ld0VsZW1lbnQobmV3SXRlbSkKICAgICAgLy9jb25zb2xlLmxvZyhlbGVtZW50KTsKICAgICAgdGQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CiAgICB9CgogIH0KCiAgaWYgKGJ1bGsgPT0gdHJ1ZSkgewoKICAgIHZhciBlbG0gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJub0J1bGsiKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxtLmxlbmd0aDsgaSsrKSB7CiAgICAgIGVsbVtpXS5sYXN0Q2hpbGQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsIHRydWUpCiAgICAgIGVsbVtpXS5sYXN0Q2hpbGQuc3R5bGUuYm9yZGVyQ29sb3IgPSAicmVkIjsKICAgIH0KCiAgICB4ZXBnID0gYnVsa0lEc1swXQogIH0KCiAgc29ydFNlbGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieC14bWx0di1maWxlIikubGFzdENoaWxkKTsKICBzb3J0U2VsZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ4LW1hcHBpbmciKS5sYXN0Q2hpbGQpOwoKfQoKZnVuY3Rpb24gc29ydFNlbGVjdChlbGVtKSB7CgogIHZhciB0bXBBcnkgPSBbXTsKICAvLyBSZXRhaW4gc2VsZWN0ZWQgdmFsdWUgYmVmb3JlIHNvcnRpbmcKICB2YXIgc2VsZWN0ZWRWYWx1ZSA9IGVsZW1bZWxlbS5zZWxlY3RlZEluZGV4XS52YWx1ZTsKICAvLyBHcmFiIGFsbCBleGlzdGluZyBlbnRyaWVzCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtLm9wdGlvbnMubGVuZ3RoOyBpKyspIHRtcEFyeS5wdXNoKGVsZW0ub3B0aW9uc1tpXSk7CiAgLy8gU29ydCBhcnJheSBieSB0ZXh0IGF0dHJpYnV0ZQogIHRtcEFyeS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiAoYS50ZXh0IDwgYi50ZXh0KSA/IC0xIDogMTsgfSk7CiAgLy8gV2lwZSBvdXQgZXhpc3RpbmcgZWxlbWVudHMKICB3aGlsZSAoZWxlbS5vcHRpb25zLmxlbmd0aCA+IDApIGVsZW0ub3B0aW9uc1swXSA9IG51bGw7CiAgLy8gUmVzdG9yZSBzb3J0ZWQgZWxlbWVudHMKICB2YXIgbmV3U2VsZWN0ZWRJbmRleCA9IDA7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0bXBBcnkubGVuZ3RoOyBpKyspIHsKICAgIGVsZW0ub3B0aW9uc1tpXSA9IHRtcEFyeVtpXTsKICAgIGlmIChlbGVtLm9wdGlvbnNbaV0udmFsdWUgPT0gc2VsZWN0ZWRWYWx1ZSkgbmV3U2VsZWN0ZWRJbmRleCA9IGk7CiAgfQogIGVsZW0uc2VsZWN0ZWRJbmRleCA9IG5ld1NlbGVjdGVkSW5kZXg7IC8vIFNldCBuZXcgc2VsZWN0ZWQgaW5kZXggYWZ0ZXIgc29ydGluZwogIHJldHVybjsKfQoKCmZ1bmN0aW9uIHN3aXRjaENoYW5uZWxTdGF0dXMoeGVwZykgewogIHZhciB0aGlzQ2hhbm5lbCA9IHhFUEdbImVwZ01hcHBpbmciXVt4ZXBnXTsKICB2YXIgeFhtbHR2RmlsZSA9IHRoaXNDaGFubmVsWyJ4LXhtbHR2LWZpbGUiXTsKCiAgaWYgKHhFUEdbInhtbHR2TWFwIl0uaGFzT3duUHJvcGVydHkoeFhtbHR2RmlsZSkgPT0gdHJ1ZSkgewogICAgaWYgKHRoaXNDaGFubmVsWyJ4LW1hcHBpbmciXSAhPSAiLSIgJiYgdGhpc0NoYW5uZWxbIngtbWFwcGluZyJdICE9IHVuZGVmaW5lZCkgewogICAgICB0aGlzQ2hhbm5lbFsieC1hY3RpdmUiXSA9ICF0aGlzQ2hhbm5lbFsieC1hY3RpdmUiXTsKICAgICAgdmFyIHRyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoeGVwZyk7CiAgICAgIHN3aXRjaCAodGhpc0NoYW5uZWxbIngtYWN0aXZlIl0pIHsKICAgICAgICBjYXNlIHRydWU6IHRyLmNsYXNzTmFtZSA9ICJhY3RpdmVFUEciOyBicmVhazsKICAgICAgICBjYXNlIGZhbHNlOiB0ci5jbGFzc05hbWUgPSAibm90QWN0aXZlRVBHIjsgYnJlYWs7CiAgICAgIH0KICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZ0luZm8iKS5jbGFzc05hbWUgPSAibm90VmlzaWJsZSI7CgogICAgfSBlbHNlIHsKICAgICAgdmFyIGVyciA9ICJYTUxUViBDaGFubmVsIGlzIG5vdCBzZWxlY3RlZCIKICAgICAgYWxlcnQoZXJyKQogICAgICAvKgogICAgICB2YXIgbmV3RXJyb3IgPSBuZXcgT2JqZWN0KCk7CiAgICAgIG5ld0Vycm9yWyJlcnIiXSA9ICJDaGFubmVsIGlzIG5vdCBzZWxlY3RlZCI7CiAgICAgIGNoZWNrRXJyKG5ld0Vycm9yKTsKICAgICAgKi8KICAgIH0KCiAgfSBlbHNlIHsKICAgIHZhciBlcnIgPSAiWE1MVFYgRmlsZSBpcyBub3Qgc2VsZWN0ZWQiCiAgICBhbGVydChlcnIpCiAgICAvKgogICAgdmFyIG5ld0Vycm9yID0gbmV3IE9iamVjdCgpOwogICAgbmV3RXJyb3JbImVyciJdID0gIlhNTFRWIGZpbGUgaXMgbm90IHNlbGVjdGVkIjsKICAgIGNoZWNrRXJyKG5ld0Vycm9yKTsKICAgICovCiAgfQoKICBzZWFyY2hJbk1hcHBpbmcoKTsKCn0KCmZ1bmN0aW9uIGNyZWF0ZU5ld0VsZW1lbnQobmV3SXRlbSkgewoKICB2YXIgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQobmV3SXRlbSk7CgogIHN3aXRjaCAobmV3SXRlbVsiX2VsZW1lbnQiXSkgewogICAgY2FzZSAiU0VMRUNUIjoKICAgICAgLy9lbGVtZW50W10KICAgICAgdmFyIHZhbHVlcyA9IG5ld0l0ZW1bIl9vcHRpb25WYWx1ZXMiXTsKICAgICAgdmFyIHRleHQgPSBuZXdJdGVtWyJfb3B0aW9uVGV4dCJdOwoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAvL2NvbnNvbGUubG9nKGl0ZW0pOwogICAgICAgIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3Q7CiAgICAgICAgbmV3RW50cnlbIl9lbGVtZW50Il0gPSAiT1BUSU9OIjsKICAgICAgICBuZXdFbnRyeVsiX3RleHQiXSA9IHRleHRbaV07CiAgICAgICAgbmV3RW50cnlbInZhbHVlIl0gPSB2YWx1ZXNbaV07CiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CiAgICAgIH0KICAgICAgZWxlbWVudC52YWx1ZSA9IG5ld0l0ZW1bInZhbHVlIl07CiAgICAgIGJyZWFrOwoKICAgIGRlZmF1bHQ6CgogICAgICAvL2VsZW1lbnQuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdJdGVtKSk7CiAgICAgIGJyZWFrOwogIH0KCiAgcmV0dXJuIGVsZW1lbnQ7Cn0KCmZ1bmN0aW9uIHNhdmVCdWxrKGtleSwgdmFsdWUpIHsKICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1bGtJRHMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBpZCA9IGJ1bGtJRHNbaV0KICAgIHZhciB0aGlzQ2hhbm5lbCA9IHhFUEdbImVwZ01hcHBpbmciXVtpZF07CiAgICB0aGlzQ2hhbm5lbFtrZXldID0gdmFsdWU7CgogICAgc3dpdGNoIChrZXkpIHsKICAgICAgY2FzZSAidHZnLWxvZ28iOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1syXS5sYXN0Q2hpbGQuc2V0QXR0cmlidXRlKCJzcmMiLCB2YWx1ZSk7IGJyZWFrOwoKICAgICAgY2FzZSAieC1jYXRlZ29yeSI6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzNdLmxhc3RDaGlsZC5jbGFzc05hbWUgPSB2YWx1ZTsgYnJlYWs7CgogICAgICBjYXNlICJ4LXhtbHR2LWZpbGUiOgogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbNl0ubGFzdENoaWxkOwogICAgICAgIHN3aXRjaCAodmFsdWUpIHsKICAgICAgICAgIGNhc2UgIi0iOiBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOyBicmVhazsKICAgICAgICAgIGNhc2UgIlRocmVhZGZpbiBEdW1teSI6IGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWU7IGJyZWFrOwogICAgICAgICAgZGVmYXVsdDogZWxlbWVudC5pbm5lckhUTUwgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUodmFsdWUsICJ4bWx0diIsICJuYW1lIik7IGJyZWFrOwogICAgICAgIH0KCgoKICAgICAgLy9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1s1XS5sYXN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWUucmVwbGFjZSgvXi4qW1xcXC9dLywgJycpOyBicmVhazsKICAgICAgY2FzZSAieC1tYXBwaW5nIjoKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1s3XS5sYXN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgaWYgKHZhbHVlID09ICItIikgewogICAgICAgICAgdGhpc0NoYW5uZWxbIngtYWN0aXZlIl0gPSBmYWxzZTsKICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jbGFzc05hbWUgPSAibm90QWN0aXZlRVBHIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpc0NoYW5uZWxbIngtYWN0aXZlIl0gPSB0cnVlOwogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsYXNzTmFtZSA9ICJhY3RpdmVFUEciOwogICAgICAgIH0KICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgIngtZ3JvdXAtdGl0bGUiOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1s1XS5sYXN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7IGJyZWFrOwoKICAgICAgY2FzZSAieC1hY3RpdmUiOgogICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKCiAgICAgICAgaWYgKHRoaXNDaGFubmVsLmhhc093blByb3BlcnR5KCJ4LXhtbHR2LWZpbGUiKSA9PSB0cnVlKSB7CiAgICAgICAgICBpZiAodGhpc0NoYW5uZWxbIngtbWFwcGluZyJdICE9ICItIiAmJiB0aGlzQ2hhbm5lbFsieC1tYXBwaW5nIl0gIT0gdW5kZWZpbmVkICYmIHRoaXNDaGFubmVsWyJ4LXhtbHR2LWZpbGUiXSAhPSAiLSIgJiYgdGhpc0NoYW5uZWxbIngteG1sdHYtZmlsZSJdICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICBzd2l0Y2ggKHRoaXNDaGFubmVsWyJ4LWFjdGl2ZSJdKSB7CiAgICAgICAgICAgICAgY2FzZSB0cnVlOiB0ci5jbGFzc05hbWUgPSAiYWN0aXZlRVBHIjsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBmYWxzZTogdHIuY2xhc3NOYW1lID0gIm5vdEFjdGl2ZUVQRyI7IGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICB9CgogICAgdXBkYXRlQ2hhbm5lbExvZ28oaWQpCgogIH0KCn0KCmZ1bmN0aW9uIHVwZGF0ZUNoYW5uZWxMb2dvKHhlcGcpIHsKICB2YXIgdGhpc0NoYW5uZWwgPSB4RVBHWyJlcGdNYXBwaW5nIl1beGVwZ107CiAgaWYgKHRoaXNDaGFubmVsWyJ4LXVwZGF0ZS1jaGFubmVsLWljb24iXSA9PSB0cnVlKSB7CiAgICB2YXIgeFhtbHR2RmlsZSA9IHRoaXNDaGFubmVsWyJ4LXhtbHR2LWZpbGUiXTsKICAgIHZhciB4TWFwcGluZyA9IHRoaXNDaGFubmVsWyJ4LW1hcHBpbmciXTsKCiAgICBpZiAoeFhtbHR2RmlsZSAhPSAiLSIgJiYgeFhtbHR2RmlsZS5sZW5ndGggPiAwICYmIHhNYXBwaW5nICE9ICItIiAmJiB4TWFwcGluZy5sZW5ndGggPiAwKSB7CiAgICAgIGlmICh4RVBHWyJ4bWx0dk1hcCJdW3hYbWx0dkZpbGVdW3hNYXBwaW5nXS5oYXNPd25Qcm9wZXJ0eSgiaWNvbiIpKSB7CiAgICAgICAgdmFyIGxvZ29VUkwgPSB4RVBHWyJ4bWx0dk1hcCJdW3hYbWx0dkZpbGVdW3hNYXBwaW5nXVsiaWNvbiJdOwogICAgICAgIHRoaXNDaGFubmVsWyJ0dmctbG9nbyJdID0gbG9nb1VSTDsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh4ZXBnKS5jaGlsZE5vZGVzWzJdLmxhc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInNyYyIsIGxvZ29VUkwpOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFubmVsLWxvZ28iKS5zZXRBdHRyaWJ1dGUoInNyYyIsIGxvZ29VUkwpOwogICAgICB9IGVsc2UgewogICAgICAgIGFsZXJ0KCJObyBsb2dvIFVSTCBpbiB0aGUgWE1MVFYgZmlsZSBhdmFpbGFibGUiKQogICAgICB9CgogICAgfQoKICAgIC8qCiAgICBpZiAoeEVQR1sieG1sdHZNYXAiXVt4WG1sdHZGaWxlXVt4TWFwcGluZ11bImljb24iXSAhPSB1bmRlZmluZWQpIHsKCiAgICAgIAogICAgfQogICAgKi8KCiAgfQp9CgpmdW5jdGlvbiBzYXZlQ2hhbm5lbExvZ28oeGVwZykgewogIGlmIChidWxrID09IGZhbHNlKSB7CiAgICB2YXIgdGhpc0NoYW5uZWwgPSB4RVBHWyJlcGdNYXBwaW5nIl1beGVwZ107CiAgICB0aGlzQ2hhbm5lbFsidHZnLWxvZ28iXSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0dmctbG9nbyIpLmxhc3RDaGlsZC52YWx1ZTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHhlcGcpLmNoaWxkTm9kZXNbMl0ubGFzdENoaWxkLnNldEF0dHJpYnV0ZSgic3JjIiwgdGhpc0NoYW5uZWxbInR2Zy1sb2dvIl0pOwogICAgbWFwcGluZ0RldGFpbCh4ZXBnKTsKICAgIHJldHVybgogIH0KCiAgaWYgKGJ1bGsgPT0gdHJ1ZSkgewogICAgdmFyIGtleSA9ICJ0dmctbG9nbyI7CiAgICB2YXIgdmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidHZnLWxvZ28iKS5sYXN0Q2hpbGQudmFsdWU7CiAgICBzYXZlQnVsayhrZXksIHZhbHVlKTsKCiAgICBtYXBwaW5nRGV0YWlsKHhlcGcpOwogICAgcmV0dXJuCiAgfQp9CgpmdW5jdGlvbiBzYXZlQ2hhbm5lbEljb25VcGRhdGUoeGVwZykgewoKICB2YXIga2V5ID0gIngtdXBkYXRlLWNoYW5uZWwtaWNvbiI7CiAgdmFyIHZhbHVlID0gSlNPTi5wYXJzZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieC11cGRhdGUtY2hhbm5lbC1pY29uIikubGFzdENoaWxkLmNoZWNrZWQpOwogIGlmIChidWxrID09IGZhbHNlKSB7CiAgICB2YXIgdGhpc0NoYW5uZWwgPSB4RVBHWyJlcGdNYXBwaW5nIl1beGVwZ107CiAgICB0aGlzQ2hhbm5lbFtrZXldID0gdmFsdWUKICAgIHVwZGF0ZUNoYW5uZWxMb2dvKHhlcGcpCgogICAgbWFwcGluZ0RldGFpbCh4ZXBnKTsKICAgIHNlYXJjaEluTWFwcGluZygpOwogICAgcmV0dXJuCiAgfQoKICBpZiAoYnVsayA9PSB0cnVlKSB7CiAgICBzYXZlQnVsayhrZXksIHZhbHVlKTsKICAgIG1hcHBpbmdEZXRhaWwoeGVwZyk7CiAgICByZXR1cm4KICB9Cgp9CgpmdW5jdGlvbiBzYXZlQ2hhbm5lbE5hbWUoeGVwZykgewogIGlmIChidWxrID09IGZhbHNlKSB7CiAgICB2YXIgdGhpc0NoYW5uZWwgPSB4RVBHWyJlcGdNYXBwaW5nIl1beGVwZ107CiAgICB0aGlzQ2hhbm5lbFsieC1uYW1lIl0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieC1uYW1lIikubGFzdENoaWxkLnZhbHVlOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoeGVwZykuY2hpbGROb2Rlc1szXS5sYXN0Q2hpbGQuaW5uZXJIVE1MID0gdGhpc0NoYW5uZWxbIngtbmFtZSJdOwogICAgbWFwcGluZ0RldGFpbCh4ZXBnKTsKICAgIHNlYXJjaEluTWFwcGluZygpOwogIH0KCn0KCmZ1bmN0aW9uIHNhdmVDaGFubmVsTmFtZVVwZGF0ZSh4ZXBnKSB7CiAgdmFyIGtleSA9ICJ4LXVwZGF0ZS1jaGFubmVsLW5hbWUiOwogIHZhciB2YWx1ZSA9IEpTT04ucGFyc2UoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIngtdXBkYXRlLWNoYW5uZWwtbmFtZSIpLmxhc3RDaGlsZC5jaGVja2VkKTsKCiAgaWYgKGJ1bGsgPT0gZmFsc2UpIHsKICAgIHZhciB0aGlzQ2hhbm5lbCA9IHhFUEdbImVwZ01hcHBpbmciXVt4ZXBnXTsKICAgIHRoaXNDaGFubmVsW2tleV0gPSB2YWx1ZQogICAgbWFwcGluZ0RldGFpbCh4ZXBnKTsKICAgIHNlYXJjaEluTWFwcGluZygpOwogICAgcmV0dXJuCiAgfQoKICBpZiAoYnVsayA9PSB0cnVlKSB7CiAgICBzYXZlQnVsayhrZXksIHZhbHVlKTsKICAgIG1hcHBpbmdEZXRhaWwoeGVwZyk7CiAgICByZXR1cm4KICB9Cgp9CgpmdW5jdGlvbiBzYXZlQ2hhbm5lbFN0YXR1cyh4ZXBnKSB7CiAgdmFyIHRoaXNDaGFubmVsID0geEVQR1siZXBnTWFwcGluZyJdW3hlcGddOwogIHZhciB4WG1sdHZGaWxlID0gdGhpc0NoYW5uZWxbIngteG1sdHYtZmlsZSJdOwoKICB2YXIga2V5ID0gIngtYWN0aXZlIjsKICB2YXIgdmFsdWUgPSBKU09OLnBhcnNlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ4LWFjdGl2ZSIpLmxhc3RDaGlsZC5jaGVja2VkKTsKCiAgaWYgKHhFUEdbInhtbHR2TWFwIl0uaGFzT3duUHJvcGVydHkoeFhtbHR2RmlsZSkgPT0gdHJ1ZSkgewogICAgaWYgKHRoaXNDaGFubmVsWyJ4LW1hcHBpbmciXSAhPSAiLSIgJiYgdGhpc0NoYW5uZWxbIngtbWFwcGluZyJdICE9IHVuZGVmaW5lZCkgewogICAgICB0aGlzQ2hhbm5lbFsieC1hY3RpdmUiXSA9ICF0aGlzQ2hhbm5lbFsieC1hY3RpdmUiXTsKICAgICAgdmFyIHRyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoeGVwZyk7CiAgICAgIHN3aXRjaCAodGhpc0NoYW5uZWxbIngtYWN0aXZlIl0pIHsKICAgICAgICBjYXNlIHRydWU6IHRyLmNsYXNzTmFtZSA9ICJhY3RpdmVFUEciOyBicmVhazsKICAgICAgICBjYXNlIGZhbHNlOiB0ci5jbGFzc05hbWUgPSAibm90QWN0aXZlRVBHIjsgYnJlYWs7CiAgICAgIH0KCiAgICB9IGVsc2UgewogICAgICB2YXIgZXJyID0gIlhNTFRWIENoYW5uZWwgaXMgbm90IHNlbGVjdGVkIgogICAgICBhbGVydChlcnIpCiAgICAgIHZhbHVlID0gZmFsc2UKICAgIH0KCiAgfSBlbHNlIHsKICAgIGlmICh2YWx1ZSA9PSB0cnVlKSB7CiAgICAgIHZhciBlcnIgPSAiWE1MVFYgRmlsZSBpcyBub3Qgc2VsZWN0ZSIKICAgICAgYWxlcnQoZXJyKQogICAgICB2YWx1ZSA9IGZhbHNlCiAgICB9CiAgfQoKCgogIGlmIChidWxrID09IGZhbHNlKSB7CiAgICB2YXIgdGhpc0NoYW5uZWwgPSB4RVBHWyJlcGdNYXBwaW5nIl1beGVwZ107CiAgICB0aGlzQ2hhbm5lbFtrZXldID0gdmFsdWUKICAgIG1hcHBpbmdEZXRhaWwoeGVwZyk7CiAgICBzZWFyY2hJbk1hcHBpbmcoKTsKCiAgICB2YXIgdHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh4ZXBnKTsKICAgIHN3aXRjaCAodGhpc0NoYW5uZWxbIngtYWN0aXZlIl0pIHsKICAgICAgY2FzZSB0cnVlOiB0ci5jbGFzc05hbWUgPSAiYWN0aXZlRVBHIjsgYnJlYWs7CiAgICAgIGNhc2UgZmFsc2U6IHRyLmNsYXNzTmFtZSA9ICJub3RBY3RpdmVFUEciOyBicmVhazsKICAgIH0KCiAgICByZXR1cm4KICB9CgogIGlmIChidWxrID09IHRydWUpIHsKICAgIHNhdmVCdWxrKGtleSwgdmFsdWUpOwogICAgbWFwcGluZ0RldGFpbCh4ZXBnKTsKICAgIHJldHVybgogIH0KCn0KCmZ1bmN0aW9uIHNhdmVHcm91cFRpdGxlKHhlcGcpIHsKICB2YXIga2V5ID0gIngtZ3JvdXAtdGl0bGUiOwogIHZhciB2YWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ4LWdyb3VwLXRpdGxlIikubGFzdENoaWxkLnZhbHVlOwoKICBpZiAoYnVsayA9PSBmYWxzZSkgewogICAgdmFyIHRoaXNDaGFubmVsID0geEVQR1siZXBnTWFwcGluZyJdW3hlcGddOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoeGVwZykuY2hpbGROb2Rlc1s1XS5sYXN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICB0aGlzQ2hhbm5lbFtrZXldID0gdmFsdWU7CiAgICBtYXBwaW5nRGV0YWlsKHhlcGcpOwogICAgc2VhcmNoSW5NYXBwaW5nKCk7CiAgfQoKICBpZiAoYnVsayA9PSB0cnVlKSB7CiAgICBzYXZlQnVsayhrZXksIHZhbHVlKTsKICAgIG1hcHBpbmdEZXRhaWwoeGVwZyk7CiAgICByZXR1cm4KICB9Cgp9CgpmdW5jdGlvbiBzYXZlQ2F0ZWdvcnkoeGVwZykgewogIHZhciBrZXkgPSAieC1jYXRlZ29yeSI7CiAgdmFyIHZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIngtY2F0ZWdvcnkiKS5sYXN0Q2hpbGQudmFsdWU7CgogIGlmIChidWxrID09IGZhbHNlKSB7CiAgICB2YXIgdGhpc0NoYW5uZWwgPSB4RVBHWyJlcGdNYXBwaW5nIl1beGVwZ107CiAgICB0aGlzQ2hhbm5lbFtrZXldID0gdmFsdWUKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHhlcGcpLmNoaWxkTm9kZXNbM10ubGFzdENoaWxkLmNsYXNzTmFtZSA9IHZhbHVlCiAgICBtYXBwaW5nRGV0YWlsKHhlcGcpOwogICAgc2VhcmNoSW5NYXBwaW5nKCk7CiAgfQoKICBpZiAoYnVsayA9PSB0cnVlKSB7CiAgICBzYXZlQnVsayhrZXksIHZhbHVlKTsKICAgIG1hcHBpbmdEZXRhaWwoeGVwZyk7CiAgICByZXR1cm4KICB9Cgp9CgpmdW5jdGlvbiBhcnJhbmdlVGFibGUoZWxtKSB7CiAgdmFyIHRyID0gZWxtLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDsKICB2YXIgbmV3UG9zaXRpb24gPSBlbG0udmFsdWU7CiAgdmFyIHhfY2hhbm5lbElEID0gdHIuaWQ7CgogIHN3aXRjaCAoaXNOYU4obmV3UG9zaXRpb24pKSB7CiAgICBjYXNlIHRydWU6CiAgICAgIGFsZXJ0KCJDaC4gTm8uIG11c3QgYmUgYSBudW1iZXIiKTsKICAgICAgbWFwcGluZ0Vycm9yID0gdHJ1ZTsKICAgICAgYnJlYWs7CiAgfQoKCiAgLy92YXIgaXRlbSA9IHhFUEdbImVwZ01hcHBpbmciXVtpZF07CiAgdmFyIGtleXMgPSBnZXRPYmpLZXlzKHhFUEdbImVwZ01hcHBpbmciXSkKICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBpdGVtID0geEVQR1siZXBnTWFwcGluZyJdW2tleXNbaV1dOwogICAgaWYgKGl0ZW1bIngtZXBnIl0gPT0geF9jaGFubmVsSUQpIHsKCiAgICAgIC8vIENoZWNrIGlmIHBvc2l0aW9uIGV4aXN0CiAgICAgIHZhciBvbGRQb3NpdGlvbiA9IGl0ZW1bIngtY2hhbm5lbElEIl07CgogICAgICBpZiAob2xkUG9zaXRpb24gIT0gbmV3UG9zaXRpb24pIHsKCiAgICAgICAgY29uc29sZS5sb2cobmV3UG9zaXRpb24sIG5ld1Bvc2l0aW9uLmxlbmd0aCk7CiAgICAgICAgaWYgKG5ld1Bvc2l0aW9uLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICBtYXBwaW5nRXJyb3IgPSB0cnVlCiAgICAgICAgICBuZXdQb3NpdGlvbiA9IG9sZFBvc2l0aW9uOwoKICAgICAgICB9CgogICAgICAgIGlmIChtYXBwaW5nRXJyb3IgPT0gdHJ1ZSkgewogICAgICAgICAgZWxtLnZhbHVlID0gb2xkUG9zaXRpb247CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBqID0ga2V5cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkgewogICAgICAgICAgdmFyIGNoYW5uZWwgPSB4RVBHWyJlcGdNYXBwaW5nIl1ba2V5c1tqXV07CiAgICAgICAgICBpZiAoa2V5c1tqXSAhPSB4X2NoYW5uZWxJRCkgewogICAgICAgICAgICBpZiAobmV3UG9zaXRpb24gPT0gY2hhbm5lbFsieC1jaGFubmVsSUQiXSkgeyAvLyBJZiBwb3NpdGlvbiBleGlzdCwgc2V0IG5leHQgZnJlZSBwb3NpdGlvbi4KICAgICAgICAgICAgICBuZXdQb3NpdGlvbisrOwogICAgICAgICAgICAgIGVsbS52YWx1ZSA9IG5ld1Bvc2l0aW9uOwogICAgICAgICAgICAgIGFycmFuZ2VUYWJsZShlbG0pOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgIHZhciBuZXdFcnJvciA9IG5ldyBPYmplY3QoKTsKICAgICAgICAgICAgICBuZXdFcnJvclsiZXJyIl0gPSAiRHVwbGljYXRlIElEIjsKICAgICAgICAgICAgICBjaGVja0VycihuZXdFcnJvcik7CiAgICAgICAgICAgICAgc29ydFRhYmxlKCk7CiAgICAgICAgICAgICAgbWFwcGluZ0Vycm9yID0gdHJ1ZTsKICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh4X2NoYW5uZWxJRCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIilbMF0uZm9jdXMoKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIH0KCiAgICAgIC8vY29uc29sZS5sb2cob2xkUG9zaXRpb24sIG5ld1Bvc2l0aW9uKTsKICAgICAgaWYgKGtleXNbaV0gPT0geF9jaGFubmVsSUQgJiYgb2xkUG9zaXRpb24gIT0gbmV3UG9zaXRpb24pIHsKICAgICAgICBpdGVtWyJ4LWNoYW5uZWxJRCJdID0gbmV3UG9zaXRpb247CiAgICAgIH0KCiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2dJbmZvIikuY2xhc3NOYW1lID0gIm5vdFZpc2libGUiOwogICAgICBpZiAoY29sdW1uVG9Tb3J0ID09IDEpIHsKICAgICAgICBzb3J0VGFibGUoY29sdW1uVG9Tb3J0KTsKICAgICAgfQogICAgICBtYXBwaW5nRXJyb3IgPSBmYWxzZTsKCiAgICB9CiAgfQp9CgpmdW5jdGlvbiBjaGFuZ2VYbWx0dkZpbGUoeGVwZywgZWxtKSB7CgogIHZhciB0aGlzQ2hhbm5lbCA9IHhFUEdbImVwZ01hcHBpbmciXVt4ZXBnXTsKCiAgdmFyIHhYbWx0dkZpbGUgPSBlbG0udmFsdWU7CiAgdmFyIGNoYW5uZWxJRCA9IHRoaXNDaGFubmVsWyJ0dmctaWQiXTsKICB0aGlzQ2hhbm5lbFsieC14bWx0di1maWxlIl0gPSB4WG1sdHZGaWxlOwoKICBpZiAoYnVsayA9PSBmYWxzZSkgewoKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewoKICAgICAgdmFyIHhNYXBwaW5nID0gIi0iCgogICAgICAvLyBBdXRvbWFwCiAgICAgIGlmICh4WG1sdHZGaWxlICE9ICItIikgewogICAgICAgIGlmICh4RVBHWyJ4bWx0dk1hcCJdW3hYbWx0dkZpbGVdLmhhc093blByb3BlcnR5KGNoYW5uZWxJRCkgPT0gdHJ1ZSkgewogICAgICAgICAgdGhpc0NoYW5uZWxbIngtbWFwcGluZyJdID0gY2hhbm5lbElEOwogICAgICAgICAgeE1hcHBpbmcgPSBjaGFubmVsSUQKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpc0NoYW5uZWxbIngtbWFwcGluZyJdID0geE1hcHBpbmcKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpc0NoYW5uZWxbIngtbWFwcGluZyJdID0geE1hcHBpbmcKCiAgICAgIH0KCiAgICAgIHZhciB0ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHhlcGcpOwoKICAgICAgaWYgKHhNYXBwaW5nID09ICItIikgewogICAgICAgIHRoaXNDaGFubmVsWyJ4LWFjdGl2ZSJdID0gZmFsc2U7CiAgICAgICAgdHIuY2xhc3NOYW1lID0gIm5vdEFjdGl2ZUVQRyIKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzQ2hhbm5lbFsieC1hY3RpdmUiXSA9IHRydWU7CiAgICAgICAgdHIuY2xhc3NOYW1lID0gImFjdGl2ZUVQRyIKICAgICAgfQoKICAgICAgLy8gU2hvdyBkYXRhIGluIHRhYmxlCiAgICAgIHZhciB0ZCA9IHRyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJURCIpOwogICAgICB2YXIgZGF0YUZpbGUgPSB0ZFt0ZC5sZW5ndGggLSAyXS5sYXN0Q2hpbGQ7CiAgICAgIHN3aXRjaCAoeFhtbHR2RmlsZSkgewogICAgICAgIGNhc2UgIi0iOiBkYXRhRmlsZS5pbm5lckhUTUwgPSB4WG1sdHZGaWxlOyBicmVhazsKICAgICAgICBjYXNlICJUaHJlYWRmaW4gRHVtbXkiOiBkYXRhRmlsZS5pbm5lckhUTUwgPSB4WG1sdHZGaWxlOyBicmVhazsKICAgICAgICBkZWZhdWx0OiBkYXRhRmlsZS5pbm5lckhUTUwgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoeFhtbHR2RmlsZSwgInhtbHR2IiwgIm5hbWUiKTsgYnJlYWs7CiAgICAgIH0KCiAgICAgIC8veFhtbHR2RmlsZS5yZXBsYWNlKC9eLipbXFxcL10vLCAnJyk7CgogICAgICB2YXIgZGF0YVhtbHR2SUQgPSB0ZFt0ZC5sZW5ndGggLSAxXS5sYXN0Q2hpbGQ7CiAgICAgIGRhdGFYbWx0dklELmlubmVySFRNTCA9IHhNYXBwaW5nOwoKICAgICAgbWFwcGluZ0RldGFpbCh4ZXBnKTsKCiAgICB9LCAxMCk7CiAgfQoKICBpZiAoYnVsayA9PSB0cnVlKSB7CiAgICB2YXIga2V5ID0gIngteG1sdHYtZmlsZSIKICAgIHZhciB2YWx1ZSA9IHhYbWx0dkZpbGUKICAgIHNhdmVCdWxrKGtleSwgdmFsdWUpOwoKICAgIHZhciBrZXkgPSAieC1tYXBwaW5nIgogICAgdmFyIHZhbHVlID0gIi0iCiAgICBzYXZlQnVsayhrZXksIHZhbHVlKTsKICAgIG1hcHBpbmdEZXRhaWwoeGVwZyk7CiAgICByZXR1cm4KICB9CgogIHJldHVybgp9CgpmdW5jdGlvbiBtYXBwaW5nQ2hhbm5lbCh4ZXBnLCBlbG0pIHsKICB2YXIgdGhpc0NoYW5uZWwgPSB4RVBHWyJlcGdNYXBwaW5nIl1beGVwZ107CiAgLy92YXIgeE1hcHBpbmcgICAgICA9IGVsbS52YWx1ZTsKICB2YXIgeE1hcHBpbmcgPSBlbG0ub3B0aW9uc1tlbG0uc2VsZWN0ZWRJbmRleF0udmFsdWUKCiAgaWYgKGJ1bGsgPT0gZmFsc2UpIHsKCiAgICB0aGlzQ2hhbm5lbFsieC1tYXBwaW5nIl0gPSB4TWFwcGluZzsKCiAgICB2YXIgdHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh4ZXBnKTsKCiAgICBpZiAoeE1hcHBpbmcgPT0gIi0iKSB7CiAgICAgIHRoaXNDaGFubmVsWyJ4LWFjdGl2ZSJdID0gZmFsc2U7CiAgICAgIHRyLmNsYXNzTmFtZSA9ICJub3RBY3RpdmVFUEciCiAgICB9IGVsc2UgewogICAgICB0aGlzQ2hhbm5lbFsieC1hY3RpdmUiXSA9IHRydWU7CiAgICAgIHRyLmNsYXNzTmFtZSA9ICJhY3RpdmVFUEciCiAgICB9CgogICAgLy8gU2hvdyBkYXRhIGluIHRhYmxlCiAgICB2YXIgdGQgPSB0ci5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEQiKTsKICAgIHZhciBkYXRhWG1sdHZJRCA9IHRkW3RkLmxlbmd0aCAtIDFdLmxhc3RDaGlsZDsKICAgIGRhdGFYbWx0dklELmlubmVySFRNTCA9IHhNYXBwaW5nOwogICAgLy9jb25zb2xlLmxvZyh0ZFt0ZC5sZW5ndGggLSAxXSk7CiAgICAvL2NvbnNvbGUubG9nKHhNYXBwaW5nLCBlbG0pOwoKICAgIGNyZWF0ZVNlYXJjaE9iaigpOwogICAgc2VhcmNoSW5NYXBwaW5nKCk7CiAgICB1cGRhdGVDaGFubmVsTG9nbyh4ZXBnKQogICAgbWFwcGluZ0RldGFpbCh4ZXBnKTsKICAgIHJldHVybgogIH0KCiAgaWYgKGJ1bGsgPT0gdHJ1ZSkgewoKICAgIHZhciBrZXkgPSAieC1tYXBwaW5nIgogICAgdmFyIHZhbHVlID0geE1hcHBpbmcKICAgIHNhdmVCdWxrKGtleSwgdmFsdWUpOwoKICAgIG1hcHBpbmdEZXRhaWwoeGVwZyk7CiAgICByZXR1cm4KICB9CgogIHJldHVybgp9CgoKZnVuY3Rpb24gY3JlYXRlTmV3VEQobmV3SXRlbSwgZWxtKSB7CiAgdmFyIG5ld1REID0gbmV3IE9iamVjdCgpOwogIG5ld1REWyJfZWxlbWVudCJdID0gIlREIjsKCiAgZWxtLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3VEQpKTsKICB2YXIgdGQgPSBlbG0ubGFzdENoaWxkOwoKICBzd2l0Y2ggKG5ld0l0ZW1bIl9lbGVtZW50Il0pIHsKICAgIGNhc2UgIlNFTEVDVCI6CiAgICAgIHRkLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3SXRlbSkpOwogICAgICB2YXIgdGQgPSBlbG0ubGFzdENoaWxkLmxhc3RDaGlsZDsKICAgICAgdmFyIHZhbHVlcyA9IG5ld0l0ZW1bIl9vcHRpb25WYWx1ZXMiXTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAvL2NvbnNvbGUubG9nKGl0ZW0pOwogICAgICAgIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3Q7CiAgICAgICAgbmV3RW50cnlbIl9lbGVtZW50Il0gPSAiT1BUSU9OIjsKICAgICAgICBuZXdFbnRyeVsiX3RleHQiXSA9IHZhbHVlc1tpXTsKICAgICAgICBuZXdFbnRyeVsidmFsdWUiXSA9IHZhbHVlc1tpXTsKICAgICAgICB0ZC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CiAgICAgIH0KICAgICAgdGQudmFsdWUgPSBuZXdJdGVtWyJ2YWx1ZSJdOwoKICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKCiAgICAgIHRkLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3SXRlbSkpOwogICAgICBicmVhazsKICB9Cgp9CgpmdW5jdGlvbiBzYXZlWEVQRygpIHsKICBpZiAobWFwcGluZ0Vycm9yID09IHRydWUpIHsKICAgIGFsZXJ0KCJEYXRhIGNvdWxkIG5vdCBiZSBzYXZlZCwgZXJyb3JzIGluIHRoZSBYRVBHIGRhdGEuIik7CiAgICByZXR1cm47CiAgfQogIHNob3dMb2FkaW5nU2NyZWVuKHRydWUpOwoKICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICBkYXRhWyJlcGdNYXBwaW5nIl0gPSB4RVBHWyJlcGdNYXBwaW5nIl07CiAgZGF0YVsiY21kIl0gPSAic2F2ZUVwZ01hcHBpbmciOwogIC8vY29uc29sZS5sb2coZGF0YSk7CiAgVGhyZWFkZmluKGRhdGEpOwp9CgpmdW5jdGlvbiBidWxrRWRpdCgpIHsKICBidWxrID0gIWJ1bGs7CiAgdmFyIGNsYXNzTmFtZTsKCiAgdmFyIGVsbSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImJ1bGsiKTsKCiAgc3dpdGNoIChidWxrKSB7CiAgICBjYXNlIHRydWU6CiAgICAgIGNsYXNzTmFtZSA9ICJidWxrIHNob3dCdWxrIjsKICAgICAgYnJlYWs7CgogICAgY2FzZSBmYWxzZToKICAgICAgY2xhc3NOYW1lID0gImJ1bGsgaGlkZUJ1bGsiOwogICAgICBidWxrRWRpdEFsbCA9IGZhbHNlOwogICAgICBicmVhazsKICB9CgogIGZvciAodmFyIGkgPSAwOyBpIDwgZWxtLmxlbmd0aDsgaSsrKSB7CiAgICBlbG1baV0uY2xhc3NOYW1lID0gY2xhc3NOYW1lOwogICAgZWxtW2ldLmNoZWNrZWQgPSBmYWxzZTsKICB9Cgp9CgpmdW5jdGlvbiBidWxrRWRpdEFsbENoYW5uZWxzKCkgewoKICB2YXIgYWxsVFIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRfbWFwcGluZyIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUUiIpOwoKICBmb3IgKHZhciBpID0gMTsgaSA8IGFsbFRSLmxlbmd0aDsgaSsrKSB7CiAgICBpZiAoYWxsVFJbaV0uc3R5bGUuZGlzcGxheSAhPSAibm9uZSIpIHsKICAgICAgc3dpdGNoIChidWxrRWRpdEFsbCkgewogICAgICAgIGNhc2UgZmFsc2U6IGFsbFRSW2ldLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5jaGVja2VkID0gdHJ1ZTsgYnJlYWs7CiAgICAgICAgY2FzZSB0cnVlOiBhbGxUUltpXS5maXJzdENoaWxkLmZpcnN0Q2hpbGQuY2hlY2tlZCA9IGZhbHNlOyBicmVhazsKICAgICAgfQoKICAgIH0KCiAgfQoKICBidWxrRWRpdEFsbCA9ICFidWxrRWRpdEFsbDsKfQoKZnVuY3Rpb24gc29ydFRhYmxlKGNvbHVtbSkgewogIC8vY29uc29sZS5sb2coY29sdW1tKTsKICBpZiAoY29sdW1tID09IGNvbHVtblRvU29ydCkgewogICAgLy9yZXR1cm47CiAgfQoKICB2YXIgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRfbWFwcGluZyIpOwogIHZhciB0YWJsZUhlYWQgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVFIiKVswXTsKICB2YXIgdGFibGVJdGVtcyA9IHRhYmxlSGVhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEQiKTsKCiAgdmFyIHNvcnRPYmogPSBuZXcgT2JqZWN0KCk7CiAgdmFyIHgsIHhWYWx1ZTsKICB2YXIgdGFibGVIZWFkZXIKICB2YXIgc29ydEJ5U3RyaW5nID0gZmFsc2UKCiAgaWYgKGNvbHVtbSA+IDAgJiYgY29sdW1uVG9Tb3J0ID4gMCkgewogICAgdGFibGVJdGVtc1tjb2x1bW5Ub1NvcnRdLmNsYXNzTmFtZSA9ICJwb2ludGVyIjsKICAgIHRhYmxlSXRlbXNbY29sdW1tXS5jbGFzc05hbWUgPSAic29ydFRoaXMiOwogIH0KCiAgY29sdW1uVG9Tb3J0ID0gY29sdW1tOwoKICB2YXIgcm93cyA9IHRhYmxlLnJvd3M7CgogIGlmIChyb3dzWzFdICE9IHVuZGVmaW5lZCkgewogICAgdGFibGVIZWFkZXIgPSByb3dzWzBdCgogICAgeCA9IHJvd3NbMV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlREIilbY29sdW1tXTsKCiAgICBmb3IgKGkgPSAxOyBpIDwgcm93cy5sZW5ndGg7IGkrKykgewoKICAgICAgeCA9IHJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlREIilbY29sdW1tXTsKCiAgICAgIHN3aXRjaCAoeC5jaGlsZE5vZGVzWzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkgewogICAgICAgIGNhc2UgImlucHV0IjoKICAgICAgICAgIHhWYWx1ZSA9IHguZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIilbMF0udmFsdWUudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICJwIjoKICAgICAgICAgIHhWYWx1ZSA9IHguZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlAiKVswXS5pbm5lclRleHQudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OiBjb25zb2xlLmxvZyh4LmNoaWxkTm9kZXNbMF0udGFnTmFtZSk7CiAgICAgIH0KCiAgICAgIGlmICh4VmFsdWUgPT0gIiIgfHwgeFZhbHVlID09IE5hTikgewogICAgICAgIHhWYWx1ZSA9IGkKICAgICAgICBzb3J0T2JqW2ldID0gcm93c1tpXTsKCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHN3aXRjaCAoaXNOYU4oeFZhbHVlKSkgewogICAgICAgICAgY2FzZSBmYWxzZToKCiAgICAgICAgICAgIHhWYWx1ZSA9IHBhcnNlRmxvYXQoeFZhbHVlKTsKICAgICAgICAgICAgc29ydE9ialt4VmFsdWVdID0gcm93c1tpXQogICAgICAgICAgICBicmVhazsKCiAgICAgICAgICBjYXNlIHRydWU6CgogICAgICAgICAgICBzb3J0QnlTdHJpbmcgPSB0cnVlCiAgICAgICAgICAgIHNvcnRPYmpbeFZhbHVlLnRvTG93ZXJDYXNlKCkgKyBpXSA9IHJvd3NbaV0KICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIH0KCiAgICAgIH0KCiAgICB9CgogICAgd2hpbGUgKHRhYmxlLmZpcnN0Q2hpbGQpIHsKICAgICAgdGFibGUucmVtb3ZlQ2hpbGQodGFibGUuZmlyc3RDaGlsZCk7CiAgICB9CgogICAgdmFyIHNvcnRWYWx1ZXMgPSBnZXRPYmpLZXlzKHNvcnRPYmopCiAgICBpZiAoc29ydEJ5U3RyaW5nID09IHRydWUpIHsKICAgICAgc29ydFZhbHVlcy5zb3J0KCkKICAgIH0gZWxzZSB7CiAgICAgIGZ1bmN0aW9uIHNvcnRGbG9hdChhLCBiKSB7CiAgICAgICAgcmV0dXJuIGEgLSBiOwogICAgICB9CiAgICAgIHNvcnRWYWx1ZXMuc29ydChzb3J0RmxvYXQpOwogICAgfQoKICAgIHRhYmxlLmFwcGVuZENoaWxkKHRhYmxlSGVhZGVyKQoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc29ydFZhbHVlcy5sZW5ndGg7IGkrKykgewoKICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoc29ydE9ialtzb3J0VmFsdWVzW2ldXSkKCiAgICB9CgogIH0KCn0KCgpmdW5jdGlvbiBzb3J0VGFibGVfb2xkKGNvbHVtbSkgewogIHNob3dMb2FkaW5nU2NyZWVuKHRydWUpOwoKICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKCiAgICB2YXIgdGFibGUsIHJvd3MsIHN3aXRjaGluZywgaSwgeCwgeSwgc2hvdWxkU3dpdGNoOwogICAgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRfbWFwcGluZyIpOwoKICAgIHZhciB0YWJsZUhlYWQgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVFIiKVswXTsKICAgIHZhciB0YWJsZUl0ZW1zID0gdGFibGVIZWFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJURCIpOwoKICAgIGlmIChjb2x1bW0gPiAwKSB7CiAgICAgIHRhYmxlSXRlbXNbY29sdW1uVG9Tb3J0XS5jbGFzc05hbWUgPSAicG9pbnRlciI7CiAgICAgIHRhYmxlSXRlbXNbY29sdW1tXS5jbGFzc05hbWUgPSAic29ydFRoaXMiOwogICAgfQoKICAgIGNvbHVtblRvU29ydCA9IGNvbHVtbTsKCiAgICAvKgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZUl0ZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0YWJsZUl0ZW1zW2ldLmNsYXNzTmFtZSAhPSB1bmRlZmluZWQpIHsKICAgICAgICB0YWJsZUl0ZW1zW2ldLmNsYXNzTmFtZSA9ICJwb2ludGVyIgogICAgICB9CgogICAgfQogICAgKi8KCgoKICAgIGNvbnNvbGUubG9nKHRhYmxlSXRlbXMpOwoKICAgIHN3aXRjaGluZyA9IHRydWU7CiAgICB3aGlsZSAoc3dpdGNoaW5nKSB7CiAgICAgIHN3aXRjaGluZyA9IGZhbHNlOwogICAgICByb3dzID0gdGFibGUucm93czsKICAgICAgZm9yIChpID0gMTsgaSA8IChyb3dzLmxlbmd0aCAtIDEpOyBpKyspIHsKICAgICAgICBzaG91bGRTd2l0Y2ggPSBmYWxzZTsKCiAgICAgICAgeCA9IHJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlREIilbY29sdW1tXTsKICAgICAgICB5ID0gcm93c1tpICsgMV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlREIilbY29sdW1tXTsKCiAgICAgICAgc3dpdGNoICh4LmNoaWxkTm9kZXNbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKSB7CiAgICAgICAgICBjYXNlICJpbnB1dCI6CiAgICAgICAgICAgIHhWYWx1ZSA9IHguZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIilbMF0udmFsdWUudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgeVZhbHVlID0geS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiSU5QVVQiKVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgICBjYXNlICJwIjoKICAgICAgICAgICAgeFZhbHVlID0geC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiUCIpWzBdLmlubmVyVGV4dC50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICB5VmFsdWUgPSB5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJQIilbMF0uaW5uZXJUZXh0LnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgIGRlZmF1bHQ6IGNvbnNvbGUubG9nKHguY2hpbGROb2Rlc1swXS50YWdOYW1lKTsKICAgICAgICB9CgoKICAgICAgICBzd2l0Y2ggKGlzTmFOKHhWYWx1ZSkpIHsKICAgICAgICAgIGNhc2UgZmFsc2U6IHhWYWx1ZSA9IHBhcnNlRmxvYXQoeFZhbHVlKTsgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKGlzTmFOKHlWYWx1ZSkpIHsKICAgICAgICAgIGNhc2UgZmFsc2U6IHlWYWx1ZSA9IHBhcnNlRmxvYXQoeVZhbHVlKTsgYnJlYWs7CiAgICAgICAgfQoKCiAgICAgICAgaWYgKHhWYWx1ZSA+IHlWYWx1ZSkgewogICAgICAgICAgc2hvdWxkU3dpdGNoID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgIH0KICAgICAgaWYgKHNob3VsZFN3aXRjaCkgewogICAgICAgIHJvd3NbaV0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocm93c1tpICsgMV0sIHJvd3NbaV0pOwogICAgICAgIHN3aXRjaGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGNyZWF0ZVNlYXJjaE9iaigpCgogICAgc2hvd0xvYWRpbmdTY3JlZW4oZmFsc2UpOwogIH0sIDIwKTsKCn0KCmZ1bmN0aW9uIHNob3dYRVBHKCkgewogIHZhciB1cmwgPSBsb2NhdGlvbi5wcm90b2NvbCArICIvLyIgKyBsb2NhdGlvbi5ob3N0bmFtZSArICI6IiArIGxvY2F0aW9uLnBvcnQgKyAiL3htbHR2L3RocmVhZGZpbi54bWwiCiAgdmFyIHdpbiA9IHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpOwogIHdpbi5mb2N1cygpOwp9" webUI["html/js/menu_ts.js"] = "Y2xhc3MgTWFpbk1lbnUgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gIm1haW4tbWVudSI7CiAgICAgICAgdGhpcy5IVE1MVGFnID0gIkxJIjsKICAgICAgICB0aGlzLkltYWdlUGF0aCA9ICJpbWcvIjsKICAgIH0KICAgIGNyZWF0ZUlNRyhzcmMpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklNRyIpOwogICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJzcmMiLCB0aGlzLkltYWdlUGF0aCArIHNyYyk7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVWYWx1ZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9Cn0KY2xhc3MgTWFpbk1lbnVJdGVtIGV4dGVuZHMgTWFpbk1lbnUgewogICAgY29uc3RydWN0b3IobWVudUtleSwgdmFsdWUsIGltYWdlLCBoZWFkbGluZSkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5tZW51S2V5ID0gbWVudUtleTsKICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgICAgICAgdGhpcy5pbWdTcmMgPSBpbWFnZTsKICAgICAgICB0aGlzLmhlYWRsaW5lID0gaGVhZGxpbmU7CiAgICB9CiAgICBjcmVhdGVJdGVtKCkgewogICAgICAgIHZhciBpdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiTEkiKTsKICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgib25jbGljayIsICJqYXZhc2NyaXB0OiBvcGVuVGhpc01lbnUodGhpcykiKTsKICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgiaWQiLCB0aGlzLmlkKTsKICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAibmF2LWl0ZW0iKTsKICAgICAgICB2YXIgaW1nID0gdGhpcy5jcmVhdGVJTUcodGhpcy5pbWdTcmMpOwogICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuY3JlYXRlVmFsdWUodGhpcy52YWx1ZSk7CiAgICAgICAgaXRlbS5hcHBlbmRDaGlsZChpbWcpOwogICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQodmFsdWUpOwogICAgICAgIHZhciBkb2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRvY3VtZW50SUQpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChpdGVtKTsKICAgICAgICBzd2l0Y2ggKHRoaXMubWVudUtleSkgewogICAgICAgICAgICBjYXNlICJwbGF5bGlzdCI6CiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlSGVhZGVyID0gWyJ7ey5wbGF5bGlzdC50YWJsZS5wbGF5bGlzdH19IiwgInt7LnBsYXlsaXN0LnRhYmxlLnR1bmVyfX0iLCAie3sucGxheWxpc3QudGFibGUubGFzdFVwZGF0ZX19IiwgInt7LnBsYXlsaXN0LnRhYmxlLmF2YWlsYWJpbGl0eX19ICUiLCAie3sucGxheWxpc3QudGFibGUudHlwZX19IiwgInt7LnBsYXlsaXN0LnRhYmxlLnN0cmVhbXN9fSIsICJ7ey5wbGF5bGlzdC50YWJsZS5ncm91cFRpdGxlfX0gJSIsICJ7ey5wbGF5bGlzdC50YWJsZS50dmdJRH19ICUiLCAie3sucGxheWxpc3QudGFibGUudW5pcXVlSUR9fSAlIl07CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICAgICAgdGhpcy50YWJsZUhlYWRlciA9IFsie3sueG1sdHYudGFibGUuZ3VpZGV9fSIsICJ7ey54bWx0di50YWJsZS5sYXN0VXBkYXRlfX0iLCAie3sueG1sdHYudGFibGUuYXZhaWxhYmlsaXR5fX0gJSIsICJ7ey54bWx0di50YWJsZS5jaGFubmVsc319IiwgInt7LnhtbHR2LnRhYmxlLnByb2dyYW1zfX0iXTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmaWx0ZXIiOgogICAgICAgICAgICAgICAgdGhpcy50YWJsZUhlYWRlciA9IFsie3suZmlsdGVyLnRhYmxlLm5hbWV9fSIsICJ7ey5maWx0ZXIudGFibGUudHlwZX19IiwgInt7LmZpbHRlci50YWJsZS5maWx0ZXJ9fSJdOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInVzZXJzIjoKICAgICAgICAgICAgICAgIHRoaXMudGFibGVIZWFkZXIgPSBbInt7LnVzZXJzLnRhYmxlLnVzZXJuYW1lfX0iLCAie3sudXNlcnMudGFibGUucGFzc3dvcmR9fSIsICJ7ey51c2Vycy50YWJsZS53ZWJ9fSIsICJ7ey51c2Vycy50YWJsZS5wbXN9fSIsICJ7ey51c2Vycy50YWJsZS5tM3V9fSIsICJ7ey51c2Vycy50YWJsZS54bWx9fSIsICJ7ey51c2Vycy50YWJsZS5hcGl9fSJdOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIm1hcHBpbmciOgogICAgICAgICAgICAgICAgdGhpcy50YWJsZUhlYWRlciA9IFsiQlVMSyIsICJ7ey5tYXBwaW5nLnRhYmxlLmNoTm99fSIsICJ7ey5tYXBwaW5nLnRhYmxlLmxvZ299fSIsICJ7ey5tYXBwaW5nLnRhYmxlLmNoYW5uZWxOYW1lfX0iLCAie3subWFwcGluZy50YWJsZS5wbGF5bGlzdH19IiwgInt7Lm1hcHBpbmcudGFibGUuZ3JvdXBUaXRsZX19IiwgInt7Lm1hcHBpbmcudGFibGUueG1sdHZGaWxlfX0iLCAie3subWFwcGluZy50YWJsZS54bWx0dklEfX0iXTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMubWVudUtleSwgdGhpcy50YWJsZUhlYWRlcik7CiAgICB9Cn0KY2xhc3MgQ29udGVudCB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLkRvY3VtZW50SUQgPSAiY29udGVudCI7CiAgICAgICAgdGhpcy5IZWFkZXJJRCA9ICJwb3B1cF9oZWFkZXIiOwogICAgICAgIHRoaXMuRm9vdGVySUQgPSAicG9wdXBfZm9vdGVyIjsKICAgICAgICB0aGlzLlRhYmxlSUQgPSAiY29udGVudF90YWJsZSI7CiAgICAgICAgdGhpcy5JbmFjdGl2ZVRhYmxlSUQgPSAiaW5hY3RpdmVfY29udGVudF90YWJsZSI7CiAgICAgICAgdGhpcy5oZWFkZXJDbGFzcyA9ICJjb250ZW50X3RhYmxlX2hlYWRlciI7CiAgICAgICAgdGhpcy5oZWFkZXJDbGFzc0luYWN0aXZlID0gImluYWN0aXZlX2NvbnRlbnRfdGFibGVfaGVhZGVyIjsKICAgICAgICB0aGlzLmludGVyYWN0aW9uSUQgPSAiY29udGVudC1pbnRlcmFjdGlvbiI7CiAgICB9CiAgICBjcmVhdGVIZWFkbGluZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSDMiKTsKICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlSFIoKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJIUiIpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlQlIoKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCUiIpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlSW50ZXJhY3Rpb24oKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTsKICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLCB0aGlzLmludGVyYWN0aW9uSUQpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlRElWKCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7CiAgICAgICAgZWxlbWVudC5pZCA9IHRoaXMuRGl2SUQ7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVUQUJMRSgpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3RhYmxlJyk7CiAgICAgICAgZWxlbWVudC5pZCA9IHRoaXMuVGFibGVJRDsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGNyZWF0ZVRhYmxlUm93KCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuaGVhZGVyQ2xhc3M7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVJbmFjdGl2ZVRBQkxFKCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEFCTEUiKTsKICAgICAgICBlbGVtZW50LmlkID0gdGhpcy5JbmFjdGl2ZVRhYmxlSUQ7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVJbmFjdGl2ZVRhYmxlUm93KCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuaGVhZGVyQ2xhc3NJbmFjdGl2ZTsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGNyZWF0ZVRhYmxlQ29udGVudChtZW51S2V5KSB7CiAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgdmFyIHJvd3MgPSBuZXcgQXJyYXkoKTsKICAgICAgICBzd2l0Y2ggKG1lbnVLZXkpIHsKICAgICAgICAgICAgY2FzZSAicGxheWxpc3QiOgogICAgICAgICAgICAgICAgdmFyIGZpbGVUeXBlcyA9IG5ldyBBcnJheSgibTN1IiwgImhkaHIiKTsKICAgICAgICAgICAgICAgIGZpbGVUeXBlcy5mb3JFYWNoKGZpbGVUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWxlcyJdW2ZpbGVUeXBlXTsKICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCInICsgZmlsZVR5cGUgKyAnIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIm5hbWUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNFUlZFUlsic2V0dGluZ3MiXVsiYnVmZmVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ0dW5lciJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICItIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJsYXN0LnVwZGF0ZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJwcm92aWRlci5hdmFpbGFiaWxpdHkiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsidHlwZSJdLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsic3RyZWFtcyJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJjb21wYXRpYmlsaXR5Il1bImdyb3VwLnRpdGxlIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsidHZnLmlkIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsic3RyZWFtLmlkIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHRyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICAgICAgICBkZWxldGUgU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWx0ZXIiXVstMV07CiAgICAgICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWx0ZXIiXTsKICAgICAgICAgICAgICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhkYXRhKTsKICAgICAgICAgICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4gewogICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgdHIuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgdHIuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgiJyArIGRhdGFba2V5XVsidHlwZSJdICsgJyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIm5hbWUiXTsKICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YVtrZXldWyJ0eXBlIl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiY3VzdG9tLWZpbHRlciI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gInt7LmZpbHRlci5jdXN0b219fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICJ7ey5maWx0ZXIuZ3JvdXB9fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImZpbHRlciJdOwogICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2godHIpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICAgICAgdmFyIGZpbGVUeXBlcyA9IG5ldyBBcnJheSgieG1sdHYiKTsKICAgICAgICAgICAgICAgIGZpbGVUeXBlcy5mb3JFYWNoKGZpbGVUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWxlcyJdW2ZpbGVUeXBlXTsKICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCInICsgZmlsZVR5cGUgKyAnIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIm5hbWUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsibGFzdC51cGRhdGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsicHJvdmlkZXIuYXZhaWxhYmlsaXR5Il07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsieG1sdHYuY2hhbm5lbHMiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsiY29tcGF0aWJpbGl0eSJdWyJ4bWx0di5wcm9ncmFtcyJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvd3MucHVzaCh0cik7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VycyI6CiAgICAgICAgICAgICAgICB2YXIgZmlsZVR5cGVzID0gbmV3IEFycmF5KCJ1c2VycyIpOwogICAgICAgICAgICAgICAgZmlsZVR5cGVzLmZvckVhY2goZmlsZVR5cGUgPT4gewogICAgICAgICAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbZmlsZVR5cGVdOwogICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhkYXRhKTsKICAgICAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIicgKyBmaWxlVHlwZSArICciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsiZGF0YSJdWyJ1c2VybmFtZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIioqKioqKiI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2tleV1bImRhdGEiXVsiYXV0aGVudGljYXRpb24ud2ViIl0gPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICLinJMiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICItIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJkYXRhIl1bImF1dGhlbnRpY2F0aW9uLnBtcyJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAi4pyTIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFba2V5XVsiZGF0YSJdWyJhdXRoZW50aWNhdGlvbi5tM3UiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIuKckyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIi0iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2tleV1bImRhdGEiXVsiYXV0aGVudGljYXRpb24ueG1sIl0gPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICLinJMiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICItIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJkYXRhIl1bImF1dGhlbnRpY2F0aW9uLmFwaSJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAi4pyTIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2godHIpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgICAgICBCVUxLX0VESVQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGNyZWF0ZVNlYXJjaE9iaigpOwogICAgICAgICAgICAgICAgY2hlY2tVbmRvKCJlcGdNYXBwaW5nIik7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiTUFQUElORyIpOwogICAgICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LWFjdGl2ZSJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5jbGFzc05hbWUgPSAiYWN0aXZlRVBHIjsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVsawogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJCVUxLIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEthbmFsbnVtbWVyCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIklOUFVUQ0hBTk5FTCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtY2hhbm5lbElEIl07CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IGNoYW5nZUNoYW5uZWxOdW1iZXIoIicgKyBrZXkgKyAnIiwgdGhpcyknKQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvZ28KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiSU1HIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5pbWFnZVVSTCA9IGRhdGFba2V5XVsidHZnLWxvZ28iXTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBLYW5hbG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0cyA9IGRhdGFba2V5XVsieC1jYXRlZ29yeSJdLnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc05hbWUgPSAiY2F0ZWdvcnkiOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0Q29sb3JTZXR0aW5ncyA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZXBnQ2F0ZWdvcmllc0NvbG9ycyJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzX3NwbGl0ID0gY2F0Q29sb3JTZXR0aW5ncy5zcGxpdCgifCIpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbG9yc19zcGxpdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhdHNDb2xvcl9zcGxpdCA9IGNvbG9yc19zcGxpdFtpXS5zcGxpdCgiOiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhdHNDb2xvcl9zcGxpdFswXSA9PSBjYXRzWzBdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc0NvbG9yID0gY2F0c0NvbG9yX3NwbGl0WzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtbmFtZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBsYXlsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICAvL2NlbGwudmFsdWUgPSBkYXRhW2tleV1bIl9maWxlLm0zdS5uYW1lIl0gCiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZGF0YVtrZXldWyJfZmlsZS5tM3UuaWQiXSwgIm0zdSIsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gR3J1cHBlIChncm91cC10aXRsZSkKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtZ3JvdXAtdGl0bGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBYTUxUViBEYXRlaQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFba2V5XVsieC14bWx0di1maWxlIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGRhdGFba2V5XVsieC14bWx0di1maWxlIl0sICJ4bWx0diIsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ4LXhtbHR2LWZpbGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhNTFRWIEthbmFsCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciB2YWx1ZSA9IHN0ci5zdWJzdHJpbmcoMSwgNCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGFba2V5XVsieC1tYXBwaW5nIl07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhW2tleV1bIngtbWFwcGluZyJdLnN1YnN0cmluZygwLCAyMCkgKyAiLi4uIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHRyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzZXR0aW5ncyI6CiAgICAgICAgICAgICAgICBhbGVydCgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiVGFibGUgY29udGVudCAobWVudUtleSk6IiwgbWVudUtleSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJvd3M7CiAgICB9CiAgICBjcmVhdGVJbmFjdGl2ZVRhYmxlQ29udGVudChtZW51S2V5KSB7CiAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgdmFyIHJvd3MgPSBuZXcgQXJyYXkoKTsKICAgICAgICBzd2l0Y2ggKG1lbnVLZXkpIHsKICAgICAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgICAgICBCVUxLX0VESVQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGNyZWF0ZVNlYXJjaE9iaigpOwogICAgICAgICAgICAgICAgY2hlY2tVbmRvKCJlcGdNYXBwaW5nIik7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiTUFQUElORyIpOwogICAgICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LWFjdGl2ZSJdID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuY2xhc3NOYW1lID0gIm5vdEFjdGl2ZUVQRyI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1bGsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiQlVMSyI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBLYW5hbG51bW1lcgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJJTlBVVENIQU5ORUwiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LWFjdGl2ZSJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtY2hhbm5lbElEIl07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ4LWNoYW5uZWxJRCJdICogMTA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLy90ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogY2hhbmdlQ2hhbm5lbE51bWJlcigiJyArIGtleSArICciLCB0aGlzKScpCiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9nbwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJJTUciOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmltYWdlVVJMID0gZGF0YVtrZXldWyJ0dmctbG9nbyJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEthbmFsbmFtZQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXRzID0gZGF0YVtrZXldWyJ4LWNhdGVnb3J5Il0uc3BsaXQoIjoiKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9ICJjYXRlZ29yeSI7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXRDb2xvclNldHRpbmdzID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJlcGdDYXRlZ29yaWVzQ29sb3JzIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnNfc3BsaXQgPSBjYXRDb2xvclNldHRpbmdzLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sb3JzX3NwbGl0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0c0NvbG9yX3NwbGl0ID0gY29sb3JzX3NwbGl0W2ldLnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2F0c0NvbG9yX3NwbGl0WzBdID09IGNhdHNbMF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNsYXNzQ29sb3IgPSBjYXRzQ29sb3Jfc3BsaXRbMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsieC1uYW1lIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGxheWxpc3QKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsiX2ZpbGUubTN1Lm5hbWUiXSAKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGdldFZhbHVlRnJvbVByb3ZpZGVyRmlsZShkYXRhW2tleV1bIl9maWxlLm0zdS5pZCJdLCAibTN1IiwgIm5hbWUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBHcnVwcGUgKGdyb3VwLXRpdGxlKQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsieC1ncm91cC10aXRsZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhNTFRWIERhdGVpCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LXhtbHR2LWZpbGUiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZGF0YVtrZXldWyJ4LXhtbHR2LWZpbGUiXSwgInhtbHR2IiwgIm5hbWUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngteG1sdHYtZmlsZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gWE1MVFYgS2FuYWwKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHZhbHVlID0gc3RyLnN1YnN0cmluZygxLCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gZGF0YVtrZXldWyJ4LW1hcHBpbmciXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGRhdGFba2V5XVsieC1tYXBwaW5nIl0uc3Vic3RyaW5nKDAsIDIwKSArICIuLi4iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2godHIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInNldHRpbmdzIjoKICAgICAgICAgICAgICAgIGFsZXJ0KCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJUYWJsZSBjb250ZW50IChtZW51S2V5KToiLCBtZW51S2V5KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcm93czsKICAgIH0KfQpjbGFzcyBDZWxsIHsKICAgIGNyZWF0ZUNlbGwoKSB7CiAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICBpZiAodGhpcy5jaGlsZCA9PSB0cnVlKSB7CiAgICAgICAgICAgIHZhciBlbGVtZW50OwogICAgICAgICAgICBzd2l0Y2ggKHRoaXMuY2hpbGRUeXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlICJQIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNoaWxkVHlwZSk7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xhc3NDb2xvcikgewogICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLmJvcmRlckNvbG9yID0gdGhpcy5jbGFzc0NvbG9yOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIklOUFVUIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNoaWxkVHlwZSk7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IHRoaXMudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID0gInRleHQiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiSU5QVVRDSEFOTkVMIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2c2NyaXB0OiBjaGFuZ2VDaGFubmVsTnVtYmVyKHRoaXMpIik7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IHRoaXMudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID0gInRleHQiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiQlVMSyI6CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gdGhpcy52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnR5cGUgPSAiY2hlY2tib3giOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gImJ1bGsgaGlkZUJ1bGsiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiQlVMS19IRUFEIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNoZWNrZWQgPSB0aGlzLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudHlwZSA9ICJjaGVja2JveCI7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAiYnVsayBoaWRlQnVsayI7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImphdmFzY3JpcHQ6IHNlbGVjdEFsbENoYW5uZWxzKCkiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImphdmFzY3JpcHQ6IHNlbGVjdEFsbENoYW5uZWxzKCdpbmFjdGl2ZV9jb250ZW50X3RhYmxlJykiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJJTUciOgogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuY2hpbGRUeXBlKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgic3JjIiwgdGhpcy5pbWFnZVVSTCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2VVUkwgIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm9uZXJyb3IiLCAiamF2YXNjcmlwdDogdGhpcy5vbmVycm9yPW51bGw7dGhpcy5zcmM9JyciKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy9vbmVycm9yPSJ0aGlzLm9uZXJyb3I9bnVsbDt0aGlzLnNyYz0nbWlzc2luZy5naWYnOyIKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB0ZC5pbm5lckhUTUwgPSB0aGlzLnZhbHVlOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5vbmNsaWNrID09IHRydWUpIHsKICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgdGhpcy5vbmNsaWNrRnVua3Rpb24pOwogICAgICAgICAgICB0ZC5jbGFzc05hbWUgPSAicG9pbnRlciI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnRkQ2xhc3NOYW1lICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICB0ZC5jbGFzc05hbWUgPSB0aGlzLnRkQ2xhc3NOYW1lOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGQ7CiAgICB9Cn0KY2xhc3MgU2hvd0NvbnRlbnQgZXh0ZW5kcyBDb250ZW50IHsKICAgIGNvbnN0cnVjdG9yKG1lbnVJRCkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5tZW51SUQgPSBtZW51SUQ7CiAgICB9CiAgICBjcmVhdGVJbnB1dCh0eXBlLCBuYW1lLCB2YWx1ZSkgewogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgdHlwZSk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJuYW1lIiwgbmFtZSk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICB9CiAgICBzaG93KCkgewogICAgICAgIENPTFVNTl9UT19TT1JUID0gLTE7CiAgICAgICAgLy8gQWx0ZW4gSW5oYWx0IGzDtnNjaGVuCiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICAgICAgZG9jLmlubmVySFRNTCA9ICIiOwogICAgICAgIHNob3dQcmV2aWV3KGZhbHNlKTsKICAgICAgICAvLyDDnGJlcnNjaHJpZnQKICAgICAgICB2YXIgcG9wdXBfaGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5IZWFkZXJJRCk7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gbWVudUl0ZW1zW3RoaXMubWVudUlEXS5oZWFkbGluZTsKICAgICAgICB2YXIgbWVudUtleSA9IG1lbnVJdGVtc1t0aGlzLm1lbnVJRF0ubWVudUtleTsKICAgICAgICB2YXIgaCA9IHRoaXMuY3JlYXRlSGVhZGxpbmUoaGVhZGxpbmUpOwogICAgICAgIHZhciBleGlzdGluZ0hlYWRlciA9IHBvcHVwX2hlYWRlci5xdWVyeVNlbGVjdG9yKCdoMycpOwogICAgICAgIGlmIChleGlzdGluZ0hlYWRlcikgewogICAgICAgICAgICBwb3B1cF9oZWFkZXIucmVwbGFjZUNoaWxkKGgsIGV4aXN0aW5nSGVhZGVyKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHBvcHVwX2hlYWRlci5hcHBlbmRDaGlsZChoKTsKICAgICAgICB9CiAgICAgICAgdmFyIGhyID0gdGhpcy5jcmVhdGVIUigpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChocik7CiAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICB2YXIgZGl2ID0gdGhpcy5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChkaXYpOwogICAgICAgIHZhciBpbnRlcmFjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuaW50ZXJhY3Rpb25JRCk7CiAgICAgICAgc3dpdGNoIChtZW51S2V5KSB7CiAgICAgICAgICAgIGNhc2UgInBsYXlsaXN0IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24ubmV3fX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAiLSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgicGxheWxpc3QiKScpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRvZ2dsZScsICdtb2RhbCcpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcsICcjcG9wdXAnKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmaWx0ZXIiOgogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5uZXd9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsIC0xKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoImZpbHRlciIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtdG9nZ2xlJywgJ21vZGFsJyk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtdGFyZ2V0JywgJyNwb3B1cCcpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInhtbHR2IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24ubmV3fX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAieG1sdHYiKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoInhtbHR2IiknKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnZGF0YS1icy10b2dnbGUnLCAnbW9kYWwnKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnZGF0YS1icy10YXJnZXQnLCAnI3BvcHVwJyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5uZXd9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJ1c2VycyIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgidXNlcnMiKScpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRvZ2dsZScsICdtb2RhbCcpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcsICcjcG9wdXAnKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJtYXBwaW5nIjoKICAgICAgICAgICAgICAgIC8vIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgdHJ1ZSkKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24uc2F2ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgibWFwcGluZyIsICIiLCAiIiknKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24uYnVsa0VkaXR9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IGJ1bGtFZGl0KCknKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoInNlYXJjaCIsICJzZWFyY2giLCAiIik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgInNlYXJjaE1hcHBpbmciKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suYnV0dG9uLnNlYXJjaH19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAic2VhcmNoIjsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAnamF2YXNjcmlwdDogc2VhcmNoSW5NYXBwaW5nKCknKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzZXR0aW5ncyI6CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLmNyZWF0ZUlucHV0KCJidXR0b24iLCBtZW51S2V5LCAie3suYnV0dG9uLnNhdmV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNhdmVTZXR0aW5ncygpOycpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5iYWNrdXB9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IGJhY2t1cCgpOycpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5yZXN0b3JlfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiByZXN0b3JlKCk7Jyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpOwogICAgICAgICAgICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoImlkIiwgImJveC13cmFwcGVyIik7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQod3JhcHBlcik7CiAgICAgICAgICAgICAgICB0aGlzLkRpdklEID0gImNvbnRlbnRfc2V0dGluZ3MiOwogICAgICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gdGhpcy5jcmVhdGVESVYoKTsKICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2V0dGluZ3MpOwogICAgICAgICAgICAgICAgc2hvd1NldHRpbmdzKCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibG9nIjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24ucmVzZXRMb2dzfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiByZXNldExvZ3MoKTsnKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7CiAgICAgICAgICAgICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZSgiaWQiLCAiYm94LXdyYXBwZXIiKTsKICAgICAgICAgICAgICAgIGRvYy5hcHBlbmRDaGlsZCh3cmFwcGVyKTsKICAgICAgICAgICAgICAgIHRoaXMuRGl2SUQgPSAiY29udGVudF9sb2ciOwogICAgICAgICAgICAgICAgdmFyIGxvZ3MgPSB0aGlzLmNyZWF0ZURJVigpOwogICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChsb2dzKTsKICAgICAgICAgICAgICAgIHNob3dMb2dzKHRydWUpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImxvZ291dCI6CiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9ICJUb2tlbj0gOyBleHBpcmVzID0gVGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiU2hvdyBjb250ZW50IChtZW51S2V5KToiLCBtZW51S2V5KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLyBUYWJlbGxlIGVyc3RlbGxlbiAoZmFsbHMgYmVuw7Z0aWd0KQogICAgICAgIHZhciB0YWJsZUhlYWRlciA9IG1lbnVJdGVtc1t0aGlzLm1lbnVJRF0udGFibGVIZWFkZXI7CiAgICAgICAgaWYgKHRhYmxlSGVhZGVyLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTsKICAgICAgICAgICAgZG9jLmFwcGVuZENoaWxkKHdyYXBwZXIpOwogICAgICAgICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZSgiaWQiLCAiYm94LXdyYXBwZXIiKTsKICAgICAgICAgICAgdmFyIHRhYmxlID0gdGhpcy5jcmVhdGVUQUJMRSgpOwogICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHRhYmxlKTsKICAgICAgICAgICAgdmFyIGhlYWRlciA9IHRoaXMuY3JlYXRlVGFibGVSb3coKTsKICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgICAgICAgICAgLy8gS29wZnplaWxlIGRlciBUYWJsbGUKICAgICAgICAgICAgdGFibGVIZWFkZXIuZm9yRWFjaChlbGVtZW50ID0+IHsKICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZWxlbWVudDsKICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJCVUxLIikgewogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIkJVTEtfSEVBRCI7CiAgICAgICAgICAgICAgICAgICAgY2VsbC5hY3RpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChtZW51S2V5ID09ICJtYXBwaW5nIikgewogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLmNoTm99fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDEpOyI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudGRDbGFzc05hbWUgPSAic29ydFRoaXMiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAie3subWFwcGluZy50YWJsZS5jaGFubmVsTmFtZX19IikgewogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoMyk7IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUucGxheWxpc3R9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDQpOyI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLmdyb3VwVGl0bGV9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDUpOyI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKGhlYWRlcik7CiAgICAgICAgICAgIC8vIEluaGFsdCBkZXIgVGFiZWxsZQogICAgICAgICAgICB2YXIgcm93cyA9IHRoaXMuY3JlYXRlVGFibGVDb250ZW50KG1lbnVLZXkpOwogICAgICAgICAgICByb3dzLmZvckVhY2godHIgPT4gewogICAgICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFyIGJyID0gdGhpcy5jcmVhdGVCUigpOwogICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoYnIpOwogICAgICAgICAgICAvLyBDcmVhdGUgaW5hY3RpdmUgY2hhbm5lbHMgZm9yIG1hcHBpbmcKICAgICAgICAgICAgaWYgKG1lbnVLZXkgPT0gIm1hcHBpbmciKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5hY3RpdmV0YWJsZSA9IHRoaXMuY3JlYXRlSW5hY3RpdmVUQUJMRSgpOwogICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChpbmFjdGl2ZXRhYmxlKTsKICAgICAgICAgICAgICAgIHZhciBoZWFkZXIgPSB0aGlzLmNyZWF0ZUluYWN0aXZlVGFibGVSb3coKTsKICAgICAgICAgICAgICAgIGluYWN0aXZldGFibGUuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgICAgICAgICAgICAgIC8vIEtvcGZ6ZWlsZSBkZXIgVGFibGxlCiAgICAgICAgICAgICAgICB0YWJsZUhlYWRlci5mb3JFYWNoKGVsZW1lbnQgPT4gewogICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZWxlbWVudDsKICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAiQlVMSyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiQlVMS19IRUFEIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5hY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobWVudUtleSA9PSAibWFwcGluZyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUuY2hOb319IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGlja0Z1bmt0aW9uID0gImphdmFzY3JpcHQ6IHNvcnRUYWJsZSgxLCAnaW5hY3RpdmVfY29udGVudF90YWJsZScpOyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnRkQ2xhc3NOYW1lID0gInNvcnRUaGlzIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAie3subWFwcGluZy50YWJsZS5jaGFubmVsTmFtZX19IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGlja0Z1bmt0aW9uID0gImphdmFzY3JpcHQ6IHNvcnRUYWJsZSgzLCAnaW5hY3RpdmVfY29udGVudF90YWJsZScpOyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUucGxheWxpc3R9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGljayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoNCwgJ2luYWN0aXZlX2NvbnRlbnRfdGFibGUnKTsiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLmdyb3VwVGl0bGV9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGljayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoNSwgJ2luYWN0aXZlX2NvbnRlbnRfdGFibGUnKTsiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGluYWN0aXZldGFibGUuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgICAgICAgICAgICAgIC8vIEluaGFsdCBkZXIgVGFiZWxsZQogICAgICAgICAgICAgICAgdmFyIHJvd3MgPSB0aGlzLmNyZWF0ZUluYWN0aXZlVGFibGVDb250ZW50KG1lbnVLZXkpOwogICAgICAgICAgICAgICAgcm93cy5mb3JFYWNoKHRyID0+IHsKICAgICAgICAgICAgICAgICAgICBpbmFjdGl2ZXRhYmxlLmFwcGVuZENoaWxkKHRyKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgc2F2ZVBvcHVwRGF0YSgibWFwcGluZyIsICIiLCBmYWxzZSwgMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3dpdGNoIChtZW51S2V5KSB7CiAgICAgICAgICAgIGNhc2UgIm1hcHBpbmciOgogICAgICAgICAgICAgICAgc29ydFRhYmxlKDEpOwogICAgICAgICAgICAgICAgc29ydFRhYmxlKDEsICJpbmFjdGl2ZV9jb250ZW50X3RhYmxlIik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmlsdGVyIjoKICAgICAgICAgICAgICAgIHNob3dQcmV2aWV3KHRydWUpOwogICAgICAgICAgICAgICAgc29ydFRhYmxlKDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBDT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgICAgICAgICAgc29ydFRhYmxlKDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgZmFsc2UpOwogICAgfQp9CmZ1bmN0aW9uIFBhZ2VSZWFkeSgpIHsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKCJnZXRTZXJ2ZXJDb25maWciKTsKICAgIHNlcnZlci5yZXF1ZXN0KG5ldyBPYmplY3QoKSk7CiAgICBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7CiAgICAgICAgdXBkYXRlTG9nKCk7CiAgICB9LCAxMDAwMCk7CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gY3JlYXRlTGF5b3V0KCkgewogICAgLy8gQ2xpZW50IEluZm8KICAgIHZhciBvYmogPSBTRVJWRVJbImNsaWVudEluZm8iXTsKICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhvYmopOwogICAgY29uc29sZS5sb2coIktFWVM6ICIsIGtleXMpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGtleXNbaV0pKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGtleXNbaV0pLnZhbHVlID0gb2JqW2tleXNbaV1dOwogICAgICAgIH0KICAgIH0KICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGxheWxpc3QtY29ubmVjdGlvbi1pbmZvcm1hdGlvbiIpKSB7CiAgICAgICAgbGV0IGFjdGl2ZUNsYXNzID0gInRleHQtcHJpbWFyeSI7CiAgICAgICAgaWYgKFNFUlZFUlsiY2xpZW50SW5mbyJdWyJhY3RpdmVQbGF5bGlzdCJdIC8gU0VSVkVSWyJjbGllbnRJbmZvIl1bInRvdGFsUGxheWxpc3QiXSA+PSAwLjYgJiYgU0VSVkVSWyJjbGllbnRJbmZvIl1bImFjdGl2ZVBsYXlsaXN0Il0gLyBTRVJWRVJbImNsaWVudEluZm8iXVsidG90YWxQbGF5bGlzdCJdIDwgMC44KSB7CiAgICAgICAgICAgIGFjdGl2ZUNsYXNzID0gInRleHQtd2FybmluZyI7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKFNFUlZFUlsiY2xpZW50SW5mbyJdWyJhY3RpdmVQbGF5bGlzdCJdIC8gU0VSVkVSWyJjbGllbnRJbmZvIl1bInRvdGFsUGxheWxpc3QiXSA+PSAwLjgpIHsKICAgICAgICAgICAgYWN0aXZlQ2xhc3MgPSAidGV4dC1kYW5nZXIiOwogICAgICAgIH0KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGxheWxpc3QtY29ubmVjdGlvbi1pbmZvcm1hdGlvbiIpLmlubmVySFRNTCA9ICJQbGF5bGlzdCBDb25uZWN0aW9uczogPHNwYW4gY2xhc3M9JyIgKyBhY3RpdmVDbGFzcyArICInPiIgKyBTRVJWRVJbImNsaWVudEluZm8iXVsiYWN0aXZlUGxheWxpc3QiXSArICIgLyAiICsgU0VSVkVSWyJjbGllbnRJbmZvIl1bInRvdGFsUGxheWxpc3QiXSArICI8L3NwYW4+IjsKICAgIH0KICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xpZW50LWNvbm5lY3Rpb24taW5mb3JtYXRpb24iKSkgewogICAgICAgIGxldCBhY3RpdmVDbGFzcyA9ICJ0ZXh0LXByaW1hcnkiOwogICAgICAgIGlmIChTRVJWRVJbImNsaWVudEluZm8iXVsiYWN0aXZlQ2xpZW50cyJdIC8gU0VSVkVSWyJjbGllbnRJbmZvIl1bInRvdGFsQ2xpZW50cyJdID49IDAuNiAmJiBTRVJWRVJbImNsaWVudEluZm8iXVsiYWN0aXZlQ2xpZW50cyJdIC8gU0VSVkVSWyJjbGllbnRJbmZvIl1bInRvdGFsQ2xpZW50cyJdIDwgMC44KSB7CiAgICAgICAgICAgIGFjdGl2ZUNsYXNzID0gInRleHQtd2FybmluZyI7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKFNFUlZFUlsiY2xpZW50SW5mbyJdWyJhY3RpdmVDbGllbnRzIl0gLyBTRVJWRVJbImNsaWVudEluZm8iXVsidG90YWxDbGllbnRzIl0gPj0gMC44KSB7CiAgICAgICAgICAgIGFjdGl2ZUNsYXNzID0gInRleHQtZGFuZ2VyIjsKICAgICAgICB9CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNsaWVudC1jb25uZWN0aW9uLWluZm9ybWF0aW9uIikuaW5uZXJIVE1MID0gIkNsaWVudCBDb25uZWN0aW9uczogPHNwYW4gY2xhc3M9JyIgKyBhY3RpdmVDbGFzcyArICInPiIgKyBTRVJWRVJbImNsaWVudEluZm8iXVsiYWN0aXZlQ2xpZW50cyJdICsgIiAvICIgKyBTRVJWRVJbImNsaWVudEluZm8iXVsidG90YWxDbGllbnRzIl0gKyAiPC9zcGFuPiI7CiAgICB9CiAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluLW1lbnUiKSkgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIENyZWF0ZSBtZW51CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbi1tZW51IikuaW5uZXJIVE1MID0gIiI7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVJdGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgIG1lbnVJdGVtc1tpXS5pZCA9IGk7CiAgICAgICAgc3dpdGNoIChtZW51SXRlbXNbaV1bIm1lbnVLZXkiXSkgewogICAgICAgICAgICBjYXNlICJ1c2VycyI6CiAgICAgICAgICAgIGNhc2UgImxvZ291dCI6CiAgICAgICAgICAgICAgICBpZiAoU0VSVkVSWyJzZXR0aW5ncyJdWyJhdXRoZW50aWNhdGlvbi53ZWIiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgbWVudUl0ZW1zW2ldLmNyZWF0ZUl0ZW0oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJtYXBwaW5nIjoKICAgICAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICAgICAgbWVudUl0ZW1zW2ldLmNyZWF0ZUl0ZW0oKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgbWVudUl0ZW1zW2ldLmNyZWF0ZUl0ZW0oKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBvcGVuVGhpc01lbnUoZWxlbWVudCkgewogICAgdmFyIGlkID0gZWxlbWVudC5pZDsKICAgIHZhciBjb250ZW50ID0gbmV3IFNob3dDb250ZW50KGlkKTsKICAgIGNvbnRlbnQuc2hvdygpOwogICAgZW5hYmxlR3JvdXBTZWxlY3Rpb24oIi5idWxrIik7CiAgICByZXR1cm47Cn0KY2xhc3MgUG9wdXBXaW5kb3cgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gInBvcHVwLWN1c3RvbSI7CiAgICAgICAgdGhpcy5JbnRlcmFjdGlvbklEID0gImludGVyYWN0aW9uIjsKICAgICAgICB0aGlzLmRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICB9CiAgICBjcmVhdGVUaXRsZSh0aXRsZSkgewogICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgdGQuY2xhc3NOYW1lID0gImxlZnQiOwogICAgICAgIHRkLmlubmVySFRNTCA9IHRpdGxlICsgIjoiOwogICAgICAgIHJldHVybiB0ZDsKICAgIH0KICAgIGNyZWF0ZUNvbnRlbnQoZWxlbWVudCkgewogICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgdGQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CiAgICAgICAgcmV0dXJuIHRkOwogICAgfQogICAgY3JlYXRlSW50ZXJhY3Rpb24oKSB7CiAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoImlkIiwgInBvcHVwLWludGVyYWN0aW9uIik7CiAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICJpbnRlcmFjdGlvbiI7CiAgICAgICAgdGhpcy5kb2MuYXBwZW5kQ2hpbGQoZGl2KTsKICAgIH0KfQpjbGFzcyBQb3B1cENvbnRlbnQgZXh0ZW5kcyBQb3B1cFdpbmRvdyB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICAgIHRoaXMudGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUQUJMRSIpOwogICAgfQogICAgY3JlYXRlSGVhZGxpbmUoaGVhZGxpbmUpIHsKICAgICAgICB0aGlzLmRvYy5pbm5lckhUTUwgPSAiIjsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkgzIik7CiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBoZWFkbGluZS50b1VwcGVyQ2FzZSgpOwogICAgICAgIHRoaXMuZG9jLmFwcGVuZENoaWxkKGVsZW1lbnQpOwogICAgICAgIC8vIFRhYmVsbGUgZXJzdGVsbGVuCiAgICAgICAgdGhpcy50YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgdGhpcy5kb2MuYXBwZW5kQ2hpbGQodGhpcy50YWJsZSk7CiAgICB9CiAgICBhcHBlbmRSb3codGl0bGUsIGVsZW1lbnQpIHsKICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgIC8vIEJlemVpY2hudW5nCiAgICAgICAgaWYgKHRpdGxlLmxlbmd0aCAhPSAwKSB7CiAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlVGl0bGUodGl0bGUpKTsKICAgICAgICB9CiAgICAgICAgLy8gQ29udGVudAogICAgICAgIHRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29udGVudChlbGVtZW50KSk7CiAgICAgICAgdGhpcy50YWJsZS5hcHBlbmRDaGlsZCh0cik7CiAgICB9CiAgICBjcmVhdGVJbnB1dCh0eXBlLCBuYW1lLCB2YWx1ZSkgewogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICB2YWx1ZSA9ICIiOwogICAgICAgIH0KICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCB0eXBlKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBuYW1lKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWUpOwogICAgICAgIHJldHVybiBpbnB1dDsKICAgIH0KICAgIGNyZWF0ZUNoZWNrYm94KG5hbWUpIHsKICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJjaGVja2JveCIpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgibmFtZSIsIG5hbWUpOwogICAgICAgIHJldHVybiBpbnB1dDsKICAgIH0KICAgIGNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIHNldCwgZGJLZXkpIHsKICAgICAgICB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiU0VMRUNUIik7CiAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgibmFtZSIsIGRiS2V5KTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk9QVElPTiIpOwogICAgICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlc1tpXSk7CiAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSB0ZXh0W2ldOwogICAgICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNldCAhPSAiIikgewogICAgICAgICAgICBzZWxlY3QudmFsdWUgPSBzZXQ7CiAgICAgICAgfQogICAgICAgIGlmIChzZXQgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHNlbGVjdC52YWx1ZSA9IHZhbHVlc1swXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbGVjdDsKICAgIH0KICAgIHNlbGVjdE9wdGlvbihzZWxlY3QsIHZhbHVlKSB7CiAgICAgICAgLy9zZWxlY3Quc2VsZWN0ZWRPcHRpb25zID0gdmFsdWUKICAgICAgICB2YXIgcyA9IHNlbGVjdDsKICAgICAgICBzLm9wdGlvbnNbcy5zZWxlY3RlZEluZGV4XS52YWx1ZSA9IHZhbHVlOwogICAgICAgIHJldHVybiBzZWxlY3Q7CiAgICB9CiAgICBkZXNjcmlwdGlvbih2YWx1ZSkgewogICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlBSRSIpOwogICAgICAgIHNwYW4uaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgIHRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29udGVudChzcGFuKSk7CiAgICAgICAgdGhpcy50YWJsZS5hcHBlbmRDaGlsZCh0cik7CiAgICB9CiAgICAvLyBJbnRlcmFrdGlvbgogICAgYWRkSW50ZXJhY3Rpb24oZWxlbWVudCkgewogICAgICAgIHZhciBpbnRlcmFjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwb3B1cC1pbnRlcmFjdGlvbiIpOwogICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGVsZW1lbnQpOwogICAgfQp9CmZ1bmN0aW9uIG9wZW5Qb3BVcChkYXRhVHlwZSwgZWxlbWVudCkgewogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICB2YXIgaWQ7CiAgICBzd2l0Y2ggKGVsZW1lbnQpIHsKICAgICAgICBjYXNlIHVuZGVmaW5lZDoKICAgICAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAiZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICAgICAgICAgIGlmIChpZCA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSAtMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGdldExvY2FsRGF0YSgiZmlsdGVyIiwgaWQpOwogICAgICAgICAgICAgICAgICAgIGRhdGFbInR5cGUiXSA9ICJncm91cC10aXRsZSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJjdXN0b20tZmlsdGVyIjoKICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gLTE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbERhdGEoImZpbHRlciIsIGlkKTsKICAgICAgICAgICAgICAgICAgICBkYXRhWyJ0eXBlIl0gPSAiY3VzdG9tLWZpbHRlciI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIGRhdGFbImlkLnByb3ZpZGVyIl0gPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgZGF0YVsidHlwZSJdID0gZGF0YVR5cGU7CiAgICAgICAgICAgICAgICAgICAgaWQgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgaWQgPSBlbGVtZW50LmlkOwogICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxEYXRhKGRhdGFUeXBlLCBpZCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgdmFyIGNvbnRlbnQgPSBuZXcgUG9wdXBDb250ZW50KCk7CiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7CiAgICAgICAgY2FzZSAicGxheWxpc3QiOgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKCJ7ey5wbGF5bGlzdC5wbGF5bGlzdFR5cGUudGl0bGV9fSIpOwogICAgICAgICAgICAvLyBUeXBlCiAgICAgICAgICAgIHZhciB0ZXh0ID0gWyJNM1UiLCAiSERIb21lUnVuIl07CiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbImphdmFzY3JpcHQ6IG9wZW5Qb3BVcCgnbTN1JykiLCAiamF2YXNjcmlwdDogb3BlblBvcFVwKCdoZGhyJykiXTsKICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIiIsICJ0eXBlIik7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoImlkIiwgInR5cGUiKTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAnamF2YXNjcmlwdDogY2hhbmdlQnV0dG9uQWN0aW9uKHRoaXMsICJuZXh0IiwgIm9uY2xpY2siKScpOyAvLyBjaGFuZ2VCdXR0b25BY3Rpb24KICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0LnR5cGUudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBXZWl0ZXIKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgIm5leHQiLCAie3suYnV0dG9uLm5leHR9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtM3UiKScpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgJ25leHQnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIm0zdSI6CiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoZGF0YVR5cGUpOwogICAgICAgICAgICAvLyBOYW1lCiAgICAgICAgICAgIHZhciBkYktleSA9ICJuYW1lIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QubmFtZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5uYW1lLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEJlc2NocmVpYnVuZwogICAgICAgICAgICB2YXIgZGJLZXkgPSAiZGVzY3JpcHRpb24iOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5wbGF5bGlzdC5kZXNjcmlwdGlvbi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5kZXNjcmlwdGlvbi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBVUkwKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImZpbGUuc291cmNlIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QuZmlsZU0zVS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5maWxlTTNVLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIHZhciB0ZXh0ID0gWyItIiwgIkZGbXBlZyIsICJWTEMiXTsKICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiLSIsICJmZm1wZWciLCAidmxjIl07CiAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IFNFUlZFUlsic2V0dGluZ3MiXVsiYnVmZmVyIl07CiAgICAgICAgICAgIGlmIChkYXRhWyJidWZmZXIiXSAhPSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gZGF0YVsiYnVmZmVyIl07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgc2VsZWN0ZWQsICJidWZmZXIiKTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiaWQiLCAiYnVmZmVyIik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5idWZmZXIudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIC8vIFR1bmVyCiAgICAgICAgICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImJ1ZmZlciJdICE9ICItIikgewogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goaS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJ0dW5lciI7CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhW2RiS2V5XSwgZGJLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25mb2N1cyIsICJqYXZhc2NyaXB0OiByZXR1cm47Iik7CiAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QudHVuZXIudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAidHVuZXIiOwogICAgICAgICAgICAgICAgaWYgKGRhdGFbZGJLZXldID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGRhdGFbZGJLZXldID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsICJ0cnVlIik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAibm90QXZhaWxhYmxlIjsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC50dW5lci50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LnBsYXlsaXN0LnR1bmVyLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImh0dHBfcHJveHkuaXAiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5wbGF5bGlzdC5odHRwX3Byb3h5X2lwLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0Lmh0dHBfcHJveHlfaXAudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbigie3sucGxheWxpc3QuaHR0cF9wcm94eV9pcC5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgIHZhciBkYktleSA9ICJodHRwX3Byb3h5LnBvcnQiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5wbGF5bGlzdC5odHRwX3Byb3h5X3BvcnQucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QuaHR0cF9wcm94eV9wb3J0LnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LnBsYXlsaXN0Lmh0dHBfcHJveHlfcG9ydC5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gTMO2c2NoZW4KICAgICAgICAgICAgaWYgKGRhdGFbImlkLnByb3ZpZGVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiZGVsZXRlIiwgInt7LmJ1dHRvbi5kZWxldGV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gImRlbGV0ZSI7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgibTN1IiwgIicgKyBpZCArICciLCB0cnVlLCAwKScpOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiYmFjayIsICJ7ey5idXR0b24uYmFja319Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJwbGF5bGlzdCIpJyk7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBBYmJyZWNoZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImNhbmNlbCIsICJ7ey5idXR0b24uY2FuY2VsfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIEFrdHVhbGlzaWVyZW4KICAgICAgICAgICAgaWYgKGRhdGFbImlkLnByb3ZpZGVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAidXBkYXRlIiwgInt7LmJ1dHRvbi51cGRhdGV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoIm0zdSIsICInICsgaWQgKyAnIiwgZmFsc2UsIDEpJyk7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBTcGVpY2hlcm4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgInNhdmUiLCAie3suYnV0dG9uLnNhdmV9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgibTN1IiwgIicgKyBpZCArICciLCBmYWxzZSwgMCknKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImhkaHIiOgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKGRhdGFUeXBlKTsKICAgICAgICAgICAgLy8gTmFtZQogICAgICAgICAgICB2YXIgZGJLZXkgPSAibmFtZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnBsYXlsaXN0Lm5hbWUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QubmFtZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXNjaHJlaWJ1bmcKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImRlc2NyaXB0aW9uIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QuZGVzY3JpcHRpb24ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QuZGVzY3JpcHRpb24ucGxhY2Vob2xkZXJ9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gVVJMCiAgICAgICAgICAgIHZhciBkYktleSA9ICJmaWxlLnNvdXJjZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnBsYXlsaXN0LmZpbGVIREhSLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0LmZpbGVIREhSLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIHZhciB0ZXh0ID0gWyItIiwgIkZGbXBlZyIsICJWTEMiXTsKICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiLSIsICJmZm1wZWciLCAidmxjIl07CiAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IFNFUlZFUlsic2V0dGluZ3MiXVsiYnVmZmVyIl07CiAgICAgICAgICAgIGlmIChkYXRhWyJidWZmZXIiXSAhPSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gZGF0YVsiYnVmZmVyIl07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgc2VsZWN0ZWQsICJidWZmZXIiKTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiaWQiLCAiYnVmZmVyIik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5idWZmZXIudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIC8vIFR1bmVyCiAgICAgICAgICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImJ1ZmZlciJdICE9ICItIikgewogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goaS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJ0dW5lciI7CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhW2RiS2V5XSwgZGJLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25mb2N1cyIsICJqYXZhc2NyaXB0OiByZXR1cm47Iik7CiAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QudHVuZXIudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAidHVuZXIiOwogICAgICAgICAgICAgICAgaWYgKGRhdGFbZGJLZXldID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGRhdGFbZGJLZXldID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsICJ0cnVlIik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAibm90QXZhaWxhYmxlIjsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC50dW5lci50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LnBsYXlsaXN0LnR1bmVyLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImh0dHBfcHJveHkuaXAiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5wbGF5bGlzdC5odHRwX3Byb3h5X2lwLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0Lmh0dHBfcHJveHlfaXAudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbigie3sucGxheWxpc3QuaHR0cF9wcm94eV9pcC5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgIHZhciBkYktleSA9ICJodHRwX3Byb3h5LnBvcnQiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5wbGF5bGlzdC5odHRwX3Byb3h5X3BvcnQucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QuaHR0cF9wcm94eV9wb3J0LnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LnBsYXlsaXN0Lmh0dHBfcHJveHlfcG9ydC5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gTMO2c2NoZW4KICAgICAgICAgICAgaWYgKGRhdGFbImlkLnByb3ZpZGVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiZGVsZXRlIiwgInt7LmJ1dHRvbi5kZWxldGV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoImhkaHIiLCAiJyArIGlkICsgJyIsIHRydWUsIDApJyk7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAiZGVsZXRlIjsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImJhY2siLCAie3suYnV0dG9uLmJhY2t9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgicGxheWxpc3QiKScpOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBBa3R1YWxpc2llcmVuCiAgICAgICAgICAgIGlmIChkYXRhWyJpZC5wcm92aWRlciJdICE9ICItIikgewogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgInVwZGF0ZSIsICJ7ey5idXR0b24udXBkYXRlfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJoZGhyIiwgIicgKyBpZCArICciLCBmYWxzZSwgMSknKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFNwZWljaGVybgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAic2F2ZSIsICJ7ey5idXR0b24uc2F2ZX19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJoZGhyIiwgIicgKyBpZCArICciLCBmYWxzZSwgMCknKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoZGF0YVR5cGUpOwogICAgICAgICAgICAvLyBUeXBlCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ0eXBlIjsKICAgICAgICAgICAgdmFyIHRleHQgPSBbIk0zVTogIiArICJ7ey5maWx0ZXIudHlwZS5ncm91cFRpdGxlfX0iLCAiVGhyZWFkZmluOiAiICsgInt7LmZpbHRlci50eXBlLmN1c3RvbUZpbHRlcn19Il07CiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbImphdmFzY3JpcHQ6IG9wZW5Qb3BVcCgnZ3JvdXAtdGl0bGUnKSIsICJqYXZhc2NyaXB0OiBvcGVuUG9wVXAoJ2N1c3RvbS1maWx0ZXInKSJdOwogICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCAiamF2YXNjcmlwdDogb3BlblBvcFVwKCdncm91cC10aXRsZScpIiwgZGJLZXkpOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJpZCIsIGlkKTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAnamF2YXNjcmlwdDogY2hhbmdlQnV0dG9uQWN0aW9uKHRoaXMsICJuZXh0IiwgIm9uY2xpY2siKTsnKTsgLy8gY2hhbmdlQnV0dG9uQWN0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIudHlwZS50aXRsZX19Iiwgc2VsZWN0KTsKICAgICAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICAgICAgY29udGVudC5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgICAgICAvLyBBYmJyZWNoZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImNhbmNlbCIsICJ7ey5idXR0b24uY2FuY2VsfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIFdlaXRlcgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAibmV4dCIsICJ7ey5idXR0b24ubmV4dH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoImdyb3VwLXRpdGxlIiknKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICduZXh0Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJjdXN0b20tZmlsdGVyIjoKICAgICAgICBjYXNlICJncm91cC10aXRsZSI6CiAgICAgICAgICAgIHN3aXRjaCAoZGF0YVR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgImN1c3RvbS1maWx0ZXIiOgogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoInt7LmZpbHRlci5jdXN0b219fSIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoInt7LmZpbHRlci5ncm91cH19Iik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gTmFtZSAgICAgIAogICAgICAgICAgICB2YXIgZGJLZXkgPSAibmFtZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LmZpbHRlci5uYW1lLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5uYW1lLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEJlc2NocmVpYnVuZwogICAgICAgICAgICB2YXIgZGJLZXkgPSAiZGVzY3JpcHRpb24iOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5maWx0ZXIuZGVzY3JpcHRpb24ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLmRlc2NyaXB0aW9uLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIFR5cAogICAgICAgICAgICB2YXIgZGJLZXkgPSAidHlwZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImhpZGRlbiIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCIiLCBpbnB1dCk7CiAgICAgICAgICAgIHZhciBmaWx0ZXJUeXBlID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAiY3VzdG9tLWZpbHRlciI6CiAgICAgICAgICAgICAgICAgICAgLy8gR3Jvw58tIEtsZWluc2NocmVpYnVuZyBiZWFjaHRlbgogICAgICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJjYXNlU2Vuc2l0aXZlIjsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5jYXNlU2Vuc2l0aXZlLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgICAgICAgICAgLy8gRmlsdGVycmVnZWwgKEJlbnV0emVyZGVmaW5pZXJ0KQogICAgICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJmaWx0ZXIiOwogICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suZmlsdGVyLmZpbHRlclJ1bGUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuZmlsdGVyUnVsZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICAgICAgICAgIC8vYWxlcnQoZGJLZXkgKyAiICIgKyBmaWx0ZXJUeXBlKQogICAgICAgICAgICAgICAgICAgIC8vIEZpbHRlciBiYXNpZXJlbmQgYXVmIGRlbiBHcnVwcGVuIGluIGRlciBNM1UKICAgICAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAiZmlsdGVyIjsKICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBzTTNVID0gZ2V0TG9jYWxEYXRhKCJtM3VHcm91cHMiLCAiIik7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRleHQgPSBncm91cHNNM1VbInRleHQiXTsKICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gZ3JvdXBzTTNVWyJ2YWx1ZSJdOwogICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGFbZGJLZXldLCBkYktleSk7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLmZpbHRlckdyb3VwLnRpdGxlfX0iLCBzZWxlY3QpOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LmZpbHRlci5maWx0ZXJHcm91cC5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gImxpdmVFdmVudCI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIubGl2ZUV2ZW50LnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgICAgICAgICAgLy8gR3Jvw58tIEtsZWluc2NocmVpYnVuZyBiZWFjaHRlbgogICAgICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJjYXNlU2Vuc2l0aXZlIjsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5jYXNlU2Vuc2l0aXZlLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gImluY2x1ZGUiOwogICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suZmlsdGVyLmluY2x1ZGUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuaW5jbHVkZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LmZpbHRlci5pbmNsdWRlLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAiZXhjbHVkZSI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5maWx0ZXIuZXhjbHVkZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5leGNsdWRlLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbigie3suZmlsdGVyLmV4Y2x1ZGUuZGVzY3JpcHRpb259fSIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBOYW1lICAgICAgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJzdGFydGluZ051bWJlciI7CiAgICAgICAgICAgIGlmIChkYXRhW2RiS2V5XSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgIjEwMDAiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LmZpbHRlci5zdGFydGluZ251bWJlci5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuc3RhcnRpbmdudW1iZXIudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbigie3suZmlsdGVyLnN0YXJ0aW5nbnVtYmVyLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtY2F0ZWdvcnkiOwogICAgICAgICAgICB2YXIgdGV4dCA9IFsiLSJdOwogICAgICAgICAgICB2YXIgdmFsdWVzID0gWyIiXTsKICAgICAgICAgICAgdmFyIGVwZ0NhdGVnb3JpZXMgPSBTRVJWRVJbInNldHRpbmdzIl1bImVwZ0NhdGVnb3JpZXMiXTsKICAgICAgICAgICAgdmFyIGNhdGVnb3JpZXMgPSBlcGdDYXRlZ29yaWVzLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gY2F0ZWdvcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGNhdCA9IGNhdGVnb3JpZXNbaV07CiAgICAgICAgICAgICAgICBpZiAoY2F0KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNhdF9zcGxpdCA9IGNhdC5zcGxpdCgiOiIpOwogICAgICAgICAgICAgICAgICAgIHRleHQucHVzaChjYXRfc3BsaXRbMF0pOwogICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGNhdF9zcGxpdFsxXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YVtkYktleV0sIGRiS2V5KTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5jYXRlZ29yeS50aXRsZX19Iiwgc2VsZWN0KTsKICAgICAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICAgICAgY29udGVudC5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgICAgICAvLyBMw7ZzY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiZGVsZXRlIiwgInt7LmJ1dHRvbi5kZWxldGV9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgiZmlsdGVyIiwgIicgKyBpZCArICciLCB0cnVlLCAwKScpOwogICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAiZGVsZXRlIjsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gU3BlaWNoZXJuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJzYXZlIiwgInt7LmJ1dHRvbi5zYXZlfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoImZpbHRlciIsICInICsgaWQgKyAnIiwgZmFsc2UsIDApJyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJ4bWx0diI6CiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoZGF0YVR5cGUpOwogICAgICAgICAgICAvLyBOYW1lCiAgICAgICAgICAgIHZhciBkYktleSA9ICJuYW1lIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sueG1sdHYubmFtZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey54bWx0di5uYW1lLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEJlc2NocmVpYnVuZwogICAgICAgICAgICB2YXIgZGJLZXkgPSAiZGVzY3JpcHRpb24iOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey54bWx0di5kZXNjcmlwdGlvbi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey54bWx0di5kZXNjcmlwdGlvbi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBVUkwKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImZpbGUuc291cmNlIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sueG1sdHYuZmlsZVhNTFRWLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnhtbHR2LmZpbGVYTUxUVi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICB2YXIgZGJLZXkgPSAiaHR0cF9wcm94eS5pcCI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnhtbHR2Lmh0dHBfcHJveHlfaXAucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sueG1sdHYuaHR0cF9wcm94eV9pcC50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKCJ7ey54bWx0di5odHRwX3Byb3h5X2lwLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImh0dHBfcHJveHkucG9ydCI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnhtbHR2Lmh0dHBfcHJveHlfcG9ydC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey54bWx0di5odHRwX3Byb3h5X3BvcnQudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbigie3sueG1sdHYuaHR0cF9wcm94eV9wb3J0LmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICAgICAgY29udGVudC5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgICAgICAvLyBMw7ZzY2hlbgogICAgICAgICAgICBpZiAoZGF0YVsiaWQucHJvdmlkZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJkZWxldGUiLCAie3suYnV0dG9uLmRlbGV0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgieG1sdHYiLCAiJyArIGlkICsgJyIsIHRydWUsIDApJyk7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAiZGVsZXRlIjsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gQWt0dWFsaXNpZXJlbgogICAgICAgICAgICBpZiAoZGF0YVsiaWQucHJvdmlkZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJ1cGRhdGUiLCAie3suYnV0dG9uLnVwZGF0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgieG1sdHYiLCAiJyArIGlkICsgJyIsIGZhbHNlLCAxKScpOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gU3BlaWNoZXJuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJzYXZlIiwgInt7LmJ1dHRvbi5zYXZlfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoInhtbHR2IiwgIicgKyBpZCArICciLCBmYWxzZSwgMCknKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInVzZXJzIjoKICAgICAgICAgICAgY29udGVudC5jcmVhdGVIZWFkbGluZSgie3subWFpbk1lbnUuaXRlbS51c2Vyc319Iik7CiAgICAgICAgICAgIC8vIEJlbnV0emVybmFtZSAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gInVzZXJuYW1lIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sudXNlcnMudXNlcm5hbWUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMudXNlcm5hbWUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gTmV1ZXMgUGFzc3dvcnQgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJwYXNzd29yZCI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInBhc3N3b3JkIiwgZGJLZXksICIiKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey51c2Vycy5wYXNzd29yZC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey51c2Vycy5wYXNzd29yZC50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXN0w6R0aWd1bmcgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJjb25maXJtIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgicGFzc3dvcmQiLCBkYktleSwgIiIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnVzZXJzLmNvbmZpcm0ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMuY29uZmlybS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXJlY2h0aWd1bmcgV0VCCiAgICAgICAgICAgIHZhciBkYktleSA9ICJhdXRoZW50aWNhdGlvbi53ZWIiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBpZiAoZGF0YVsiZGVmYXVsdFVzZXIiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAiamF2YXNjcmlwdDogcmV0dXJuIGZhbHNlIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnVzZXJzLndlYi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXJlY2h0aWd1bmcgUE1TCiAgICAgICAgICAgIHZhciBkYktleSA9ICJhdXRoZW50aWNhdGlvbi5wbXMiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMucG1zLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEJlcmVjaHRpZ3VuZyBNM1UKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImF1dGhlbnRpY2F0aW9uLm0zdSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goZGJLZXkpOwogICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey51c2Vycy5tM3UudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQmVyZWNodGlndW5nIFhNTAogICAgICAgICAgICB2YXIgZGJLZXkgPSAiYXV0aGVudGljYXRpb24ueG1sIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnVzZXJzLnhtbC50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXJlY2h0aWd1bmcgQVBJCiAgICAgICAgICAgIHZhciBkYktleSA9ICJhdXRoZW50aWNhdGlvbi5hcGkiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMuYXBpLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gTMO2c2NoZW4KICAgICAgICAgICAgaWYgKGRhdGFbImRlZmF1bHRVc2VyIl0gIT0gdHJ1ZSAmJiBpZCAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJkZWxldGUiLCAie3suYnV0dG9uLmRlbGV0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAiZGVsZXRlIjsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCInICsgZGF0YVR5cGUgKyAnIiwgIicgKyBpZCArICciLCB0cnVlLCAwKScpOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBTcGVpY2hlcm4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgInNhdmUiLCAie3suYnV0dG9uLnNhdmV9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgiJyArIGRhdGFUeXBlICsgJyIsICInICsgaWQgKyAnIiwgImZhbHNlIik7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtYXBwaW5nIjoKICAgICAgICAgICAgY29udGVudC5jcmVhdGVIZWFkbGluZSgie3subWFpbk1lbnUuaXRlbS5tYXBwaW5nfX0iKTsKICAgICAgICAgICAgaWYgKEJVTEtfRURJVCA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1jaGFubmVscy1zdGFydCI7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgdmFsdWUgdG8gdGhlIGZpcnN0IHNlbGVjdGVkIGNoYW5uZWwKICAgICAgICAgICAgICAgIHZhciBjaGFubmVscyA9IGdldEFsbFNlbGVjdGVkQ2hhbm5lbHMoKTsKICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXVtjaGFubmVsc1swXV07CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNoYW5uZWwgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIGNoYW5uZWxbIngtY2hhbm5lbElEIl0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICdqYXZhc2NyaXB0OiBjaGFuZ2VDaGFubmVsTnVtYmVycygiJyArIGNoYW5uZWxzICsgJyIpOycpOwogICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuY2hhbm5lbEdyb3VwU3RhcnQudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBBa3RpdiAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtYWN0aXZlIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgaW5wdXQuaWQgPSAiYWN0aXZlIjsKICAgICAgICAgICAgLy9pbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIikKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0b2dnbGVDaGFubmVsU3RhdHVzKCciICsgaWQgKyAiJywgdGhpcykiKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuYWN0aXZlLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEthbmFsbmFtZSAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtbmFtZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgIGlmIChCVUxLX0VESVQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgaW5wdXQuc3R5bGUuYm9yZGVyID0gInNvbGlkIDFweCByZWQiOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsICJ0cnVlIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuY2hhbm5lbE5hbWUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbigiPHNwYW4gY2xhc3M9J3RleHQtZGFuZ2VyJz4iICsgZGF0YVsidHZnLWlkIl0gKyAiPC9zcGFuPiA8c3BhbiBjbGFzcz0ndGV4dC1wcmltYXJ5Jz4oIiArIGRhdGFbIngtZXBnIl0gKyAiKTwvc3Bhbj4iKTsKICAgICAgICAgICAgLy8gQmVzY2hyZWlidW5nIAogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1kZXNjcmlwdGlvbiI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7Lm1hcHBpbmcuZGVzY3JpcHRpb24ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmRlc2NyaXB0aW9uLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEFrdHVhbGlzaWVydW5nIGRlcyBLYW5hbG5hbWVucwogICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eSgiX3V1aWQua2V5IikpIHsKICAgICAgICAgICAgICAgIGlmIChkYXRhWyJfdXVpZC5rZXkiXSAhPSAiIikgewogICAgICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LXVwZGF0ZS1jaGFubmVsLW5hbWUiOwogICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goZGJLZXkpOwogICAgICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcudXBkYXRlQ2hhbm5lbE5hbWUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBMb2dvIFVSTCAoS2FuYWwpIAogICAgICAgICAgICB2YXIgZGJLZXkgPSAidHZnLWxvZ28iOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgImNoYW5uZWwtaWNvbiIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5jaGFubmVsTG9nby50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBBa3R1YWxpc2llcnVuZyBkZXMgS2FuYWxsb2dvcwogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC11cGRhdGUtY2hhbm5lbC1pY29uIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJ1cGRhdGUtaWNvbiIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnOyBjaGFuZ2VDaGFubmVsTG9nbygnIiArIGlkICsgIicpOyIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy51cGRhdGVDaGFubmVsTG9nby50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBFcndlaXRlcm4gZGVyIEVQRyBLYXRlZ29yaWUKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtY2F0ZWdvcnkiOwogICAgICAgICAgICB2YXIgdGV4dCA9IFsiLSJdOwogICAgICAgICAgICB2YXIgdmFsdWVzID0gWyIiXTsKICAgICAgICAgICAgdmFyIGVwZ0NhdGVnb3JpZXMgPSBTRVJWRVJbInNldHRpbmdzIl1bImVwZ0NhdGVnb3JpZXMiXTsKICAgICAgICAgICAgdmFyIGNhdGVnb3JpZXMgPSBlcGdDYXRlZ29yaWVzLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gY2F0ZWdvcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGNhdCA9IGNhdGVnb3JpZXNbaV07CiAgICAgICAgICAgICAgICBpZiAoY2F0KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNhdF9zcGxpdCA9IGNhdC5zcGxpdCgiOiIpOwogICAgICAgICAgICAgICAgICAgIHRleHQucHVzaChjYXRfc3BsaXRbMF0pOwogICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGNhdF9zcGxpdFsxXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YVtkYktleV0sIGRiS2V5KTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuZXBnQ2F0ZWdvcnkudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIC8vIE0zVSBHcnVwcGVudGl0ZWwKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtZ3JvdXAtdGl0bGUiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5tM3VHcm91cFRpdGxlLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIGlmIChkYXRhWyJncm91cC10aXRsZSJdICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbihkYXRhWyJncm91cC10aXRsZSJdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBYTUxUViBEYXRlaQogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC14bWx0di1maWxlIjsKICAgICAgICAgICAgdmFyIHhtbEZpbGUgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgdmFyIHhtbHR2ID0gbmV3IFhNTFRWRmlsZSgpOwogICAgICAgICAgICB2YXIgc2VsZWN0ID0geG1sdHYuZ2V0RmlsZXMoZGF0YVtkYktleV0pOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJuYW1lIiwgZGJLZXkpOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJpZCIsICJwb3B1cC14bWx0diIpOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgc2V0WG1sdHZDaGFubmVsKCciICsgaWQgKyAiJyx0aGlzLCAnIiArIGRhdGFbIngtbWFwcGluZyJdICsgIicpOyIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy54bWx0dkZpbGUudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIHZhciBmaWxlID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIC8vIFhNTFRWIE1hcHBpbmcKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtbWFwcGluZyI7CiAgICAgICAgICAgIHZhciB4bWx0diA9IG5ldyBYTUxUVkZpbGUoKTsKICAgICAgICAgICAgY29uc3QgY3VycmVudFhtbFR2SWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgY29uc3QgW3htbFR2SWRDb250YWluZXIsIHhtbFR2SWRJbnB1dCwgeG1sVHZJZERhdGFsaXN0XSA9IHhtbHR2Lm5ld1htbFR2SWRQaWNrZXIoeG1sRmlsZSwgY3VycmVudFhtbFR2SWQpOwogICAgICAgICAgICB4bWxUdklkQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWNvbnRhaW5lcicpOwogICAgICAgICAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCdsaXN0JywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgICAgICAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgJ3gtbWFwcGluZycpOyAvLyBTaG91bGQgc3RheSB4LW1hcHBpbmcgYXMgaXQgd2lsbCBiZSB1c2VkIGluIGRvbmVQb3B1cERhdGEgdG8gbWFrZSBhIHNlcnZlciByZXF1ZXN0CiAgICAgICAgICAgIHhtbFR2SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1pbnB1dCcpOwogICAgICAgICAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsIGBqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgY2hlY2tYbWx0dkNoYW5uZWwoJyR7aWR9JywgdGhpcywgJyR7eG1sRmlsZX0nKTtgKTsKICAgICAgICAgICAgeG1sVHZJZERhdGFsaXN0LnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICAgICAgICAgIC8vIHNvcnRTZWxlY3QoeG1sVHZJZERhdGFsaXN0KTsgLy8gVE9ETzogQmV0dGVyIHNvcnQgYmVmb3JlIGFkZGluZwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygne3subWFwcGluZy54bWx0dkNoYW5uZWwudGl0bGV9fScsIHhtbFR2SWRDb250YWluZXIpOwogICAgICAgICAgICAvLyBFeHRyYSBQUFYgRGF0YQogICAgICAgICAgICBpZiAoY3VycmVudFhtbFR2SWQgPT0gIlBQViIpIHsKICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LXBwdi1leHRyYSI7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAicHB2LWV4dHJhIik7CiAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5wcHZleHRyYS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWJhY2t1cC1jaGFubmVsLTEiOwogICAgICAgICAgICB2YXIgeG1sdHYgPSBuZXcgWE1MVFZGaWxlKCk7CiAgICAgICAgICAgIGNvbnN0IGJhY2t1cDFYbWxUdklkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGNvbnN0IFt4bWxUdkJhY2t1cDFJZENvbnRhaW5lciwgeG1sVHZCYWNrdXAxSWRJbnB1dCwgeG1sVHZCYWNrdXAxSWREYXRhbGlzdF0gPSB4bWx0di5uZXdNM3VQaWNrZXIoeG1sRmlsZSwgYmFja3VwMVhtbFR2SWQpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDFJZENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2lkJywgJ20zdS1pZC1waWNrZXItY29udGFpbmVyLTEnKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAxSWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2xpc3QnLCAnbTN1LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDFJZElucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIGRiS2V5KTsgLy8gU2hvdWxkIHN0YXkgeC1tYXBwaW5nIGFzIGl0IHdpbGwgYmUgdXNlZCBpbiBkb25lUG9wdXBEYXRhIHRvIG1ha2UgYSBzZXJ2ZXIgcmVxdWVzdAogICAgICAgICAgICB4bWxUdkJhY2t1cDFJZElucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAiYmFja3VwLWNoYW5uZWwtMSIpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDFJZElucHV0LnNldEF0dHJpYnV0ZSgnb25jaGFuZ2UnLCBgamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCc7IGNoZWNrWG1sdHZDaGFubmVsKCcke2lkfScsIHRoaXMsICcke3htbEZpbGV9Jyk7YCk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMUlkRGF0YWxpc3Quc2V0QXR0cmlidXRlKCdpZCcsICdtM3UtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICAgICAgICAgIC8vIHNvcnRTZWxlY3QoeG1sVHZJZERhdGFsaXN0KTsgLy8gVE9ETzogQmV0dGVyIHNvcnQgYmVmb3JlIGFkZGluZwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygne3subWFwcGluZy5iYWNrdXBDaGFubmVsMS50aXRsZX19JywgeG1sVHZCYWNrdXAxSWRDb250YWluZXIpOwogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1iYWNrdXAtY2hhbm5lbC0yIjsKICAgICAgICAgICAgdmFyIHhtbHR2ID0gbmV3IFhNTFRWRmlsZSgpOwogICAgICAgICAgICBjb25zdCBiYWNrdXAyWG1sVHZJZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb25zdCBbeG1sVHZCYWNrdXAySWRDb250YWluZXIsIHhtbFR2QmFja3VwMklkSW5wdXQsIHhtbFR2QmFja3VwMklkRGF0YWxpc3RdID0geG1sdHYubmV3TTN1UGlja2VyKHhtbEZpbGUsIGJhY2t1cDJYbWxUdklkKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAySWRDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItY29udGFpbmVyLTInKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAySWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2xpc3QnLCAnbTN1LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDJJZElucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIGRiS2V5KTsgLy8gU2hvdWxkIHN0YXkgeC1tYXBwaW5nIGFzIGl0IHdpbGwgYmUgdXNlZCBpbiBkb25lUG9wdXBEYXRhIHRvIG1ha2UgYSBzZXJ2ZXIgcmVxdWVzdAogICAgICAgICAgICB4bWxUdkJhY2t1cDJJZElucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAiYmFja3VwLWNoYW5uZWwtMiIpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDJJZElucHV0LnNldEF0dHJpYnV0ZSgnb25jaGFuZ2UnLCBgamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCc7IGNoZWNrWG1sdHZDaGFubmVsKCcke2lkfScsIHRoaXMsICcke3htbEZpbGV9Jyk7YCk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMklkRGF0YWxpc3Quc2V0QXR0cmlidXRlKCdpZCcsICdtM3UtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmJhY2t1cENoYW5uZWwyLnRpdGxlfX0iLCB4bWxUdkJhY2t1cDJJZENvbnRhaW5lcik7CiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWJhY2t1cC1jaGFubmVsLTMiOwogICAgICAgICAgICB2YXIgeG1sdHYgPSBuZXcgWE1MVFZGaWxlKCk7CiAgICAgICAgICAgIGNvbnN0IGJhY2t1cDNYbWxUdklkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGNvbnN0IFt4bWxUdkJhY2t1cDNJZENvbnRhaW5lciwgeG1sVHZCYWNrdXAzSWRJbnB1dCwgeG1sVHZCYWNrdXAzSWREYXRhbGlzdF0gPSB4bWx0di5uZXdNM3VQaWNrZXIoeG1sRmlsZSwgYmFja3VwM1htbFR2SWQpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDNJZENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1jb250YWluZXItMycpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDNJZElucHV0LnNldEF0dHJpYnV0ZSgnbGlzdCcsICdtM3UtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwM0lkSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgZGJLZXkpOyAvLyBTaG91bGQgc3RheSB4LW1hcHBpbmcgYXMgaXQgd2lsbCBiZSB1c2VkIGluIGRvbmVQb3B1cERhdGEgdG8gbWFrZSBhIHNlcnZlciByZXF1ZXN0CiAgICAgICAgICAgIHhtbFR2QmFja3VwM0lkSW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJiYWNrdXAtY2hhbm5lbC0zIik7CiAgICAgICAgICAgIHhtbFR2QmFja3VwM0lkSW5wdXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsIGBqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgY2hlY2tYbWx0dkNoYW5uZWwoJyR7aWR9JywgdGhpcywgJyR7eG1sRmlsZX0nKTtgKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAzSWREYXRhbGlzdC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ20zdS1pZC1waWNrZXItZGF0YWxpc3QnKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuYmFja3VwQ2hhbm5lbDMudGl0bGV9fSIsIHhtbFR2QmFja3VwM0lkQ29udGFpbmVyKTsKICAgICAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICAgICAgY29udGVudC5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5wcm9iZUNoYW5uZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogcHJvYmVDaGFubmVsKCInICsgZGF0YVsidXJsIl0gKyAnIik7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBMb2dvIGhvY2hsYWRlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi51cGxvYWRMb2dvfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHVwbG9hZExvZ28oKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gRmVydGlnCiAgICAgICAgICAgIHZhciBpZHMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgaWRzID0gZ2V0QWxsU2VsZWN0ZWRDaGFubmVscygpOwogICAgICAgICAgICBpZiAoaWRzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICAgICBpZHMucHVzaChpZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgInNhdmUiLCAie3suYnV0dG9uLmRvbmV9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogZG9uZVBvcHVwRGF0YSgiJyArIGRhdGFUeXBlICsgJyIsICInICsgaWRzICsgJyIsICJmYWxzZSIpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgIGNlbGwudmFsdWUgPSAiPHNwYW4+PC9zcGFuPiI7CiAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICB0ZC5pZCA9ICJwcm9iZURldGFpbHMiOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5wcm9iZURldGFpbHMudGl0bGV9fSIsIHRkKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICBzaG93UG9wVXBFbGVtZW50KCdwb3B1cC1jdXN0b20nKTsKfQpjbGFzcyBYTUxUVkZpbGUgewogICAgZ2V0RmlsZXMoc2V0KSB7CiAgICAgICAgdmFyIGZpbGVJRHMgPSBnZXRPYmpLZXlzKFNFUlZFUlsieGVwZyJdWyJ4bWx0dk1hcCJdKTsKICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KCItIik7CiAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoIi0iKTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVJRHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGZpbGVJRHNbaV0gIT0gIlRocmVhZGZpbiBEdW1teSIpIHsKICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlRnJvbVByb3ZpZGVyRmlsZShmaWxlSURzW2ldLCAieG1sdHYiLCAiZmlsZS50aHJlYWRmaW4iKSk7CiAgICAgICAgICAgICAgICB0ZXh0LnB1c2goZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGZpbGVJRHNbaV0sICJ4bWx0diIsICJuYW1lIikpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goZmlsZUlEc1tpXSk7CiAgICAgICAgICAgICAgICB0ZXh0LnB1c2goZmlsZUlEc1tpXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlNFTEVDVCIpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiT1BUSU9OIik7CiAgICAgICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWVzW2ldKTsKICAgICAgICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IHRleHRbaV07CiAgICAgICAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pOwogICAgICAgIH0KICAgICAgICBpZiAoc2V0ICE9ICIiKSB7CiAgICAgICAgICAgIHNlbGVjdC52YWx1ZSA9IHNldDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbGVjdDsKICAgIH0KICAgIC8qKgogICAqIEBwYXJhbSB4bWxUdkZpbGUgWE1MIGZpbGUgcGF0aCB0byBnZXQgRVBHIGZyb20uCiAgICogQHBhcmFtIGN1cnJlbnRYbWxUdklkIEN1cnJlbnQgWE1MVFYgSUQgdG8gc2V0IGluaXRpYWwgaW5wdXQgdmFsdWUgdG8uCiAgICogQHJldHVybnMgQXJyYXkgb2YsIHNlcXVlbnRpYWxseToKICAgKiAxKSBDb250YWluZXIgb2YgdGhlIHBpY2tlci4KICAgKiAyKSBJbnB1dCBmaWVsZCB0byB0eXBlIGF0IGFuZCBnZXQgY2hvaWNlIGZyb20uCiAgICogMykgRGF0YWxpc3QgY29udGFpbmluZyBldmVyeSBvcHRpb24uCiAgICovCiAgICBuZXdYbWxUdklkUGlja2VyKHhtbFR2RmlsZSwgY3VycmVudFhtbFR2SWQpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQnKTsKICAgICAgICAvLyBJbml0aWFsbHksIHNldCB2YWx1ZSB0byAnLScgaWYgaW5wdXQgaXMgZW1wdHkKICAgICAgICBpbnB1dC52YWx1ZSA9IChjdXJyZW50WG1sVHZJZCkgPyBjdXJyZW50WG1sVHZJZCA6ICctJzsKICAgICAgICAvLyBXaGVuIGlucHV0IGlzIGZvY3VzZWQsIHJlbW92ZSAnLScgZnJvbSBpdAogICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKGV2dCkgPT4gewogICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldnQudGFyZ2V0OwogICAgICAgICAgICB0YXJnZXQudmFsdWUgPSAodGFyZ2V0LnZhbHVlID09PSAnLScpID8gJycgOiB0YXJnZXQudmFsdWU7CiAgICAgICAgfSk7CiAgICAgICAgLy8gV2hlbiBpbnB1dCBsb3NlIGZvY3VzIG9yIHRha2UgYSB2YWx1ZSwgaWYgaXQncyBlbXB0eSwgc2V0IHZhbHVlIHRvICctJwogICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBzZXRGYWxsYmFja1ZhbHVlKTsKICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBzZXRGYWxsYmFja1ZhbHVlKTsKICAgICAgICBmdW5jdGlvbiBzZXRGYWxsYmFja1ZhbHVlKGV2dCkgewogICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldnQudGFyZ2V0OwogICAgICAgICAgICB0YXJnZXQudmFsdWUgPSAodGFyZ2V0LnZhbHVlKSA/IHRhcmdldC52YWx1ZSA6ICctJzsKICAgICAgICB9CiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICBjb25zdCBkYXRhbGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RhdGFsaXN0Jyk7CiAgICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCAnLScpOwogICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSAnLSc7CiAgICAgICAgZGF0YWxpc3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICBjb25zdCBlcGcgPSBTRVJWRVJbJ3hlcGcnXVsneG1sdHZNYXAnXVt4bWxUdkZpbGVdOwogICAgICAgIGlmIChlcGcpIHsKICAgICAgICAgICAgY29uc3QgcHJvZ3JhbUlkcyA9IGdldE93bk9ialByb3BzKGVwZyk7CiAgICAgICAgICAgIHByb2dyYW1JZHMuZm9yRWFjaCgocHJvZ3JhbUlkKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBwcm9ncmFtID0gZXBnW3Byb2dyYW1JZF07CiAgICAgICAgICAgICAgICBpZiAocHJvZ3JhbS5oYXNPd25Qcm9wZXJ0eSgnZGlzcGxheS1uYW1lJykpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKICAgICAgICAgICAgICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKCd2YWx1ZScsIHByb2dyYW1JZCk7CiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IHByb2dyYW1bImRpc3BsYXktbmFtZSJdOwogICAgICAgICAgICAgICAgICAgIGRhdGFsaXN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKICAgICAgICAgICAgICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKCd2YWx1ZScsIHByb2dyYW1JZCk7CiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmlubmVyVGV4dCA9ICctJzsKICAgICAgICAgICAgICAgICAgICBkYXRhbGlzdC5hcHBlbmRDaGlsZChvcHRpb24pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGRhdGFsaXN0KTsKICAgICAgICByZXR1cm4gW2NvbnRhaW5lciwgaW5wdXQsIGRhdGFsaXN0XTsKICAgIH0KICAgIG5ld00zdVBpY2tlcih4bWxUdkZpbGUsIGN1cnJlbnRYbWxUdklkKSB7CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0Jyk7CiAgICAgICAgLy8gSW5pdGlhbGx5LCBzZXQgdmFsdWUgdG8gJy0nIGlmIGlucHV0IGlzIGVtcHR5CiAgICAgICAgaW5wdXQudmFsdWUgPSAoY3VycmVudFhtbFR2SWQpID8gY3VycmVudFhtbFR2SWQgOiAnLSc7CiAgICAgICAgLy8gV2hlbiBpbnB1dCBpcyBmb2N1c2VkLCByZW1vdmUgJy0nIGZyb20gaXQKICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIChldnQpID0+IHsKICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZ0LnRhcmdldDsKICAgICAgICAgICAgdGFyZ2V0LnZhbHVlID0gKHRhcmdldC52YWx1ZSA9PT0gJy0nKSA/ICcnIDogdGFyZ2V0LnZhbHVlOwogICAgICAgIH0pOwogICAgICAgIC8vIFdoZW4gaW5wdXQgbG9zZSBmb2N1cyBvciB0YWtlIGEgdmFsdWUsIGlmIGl0J3MgZW1wdHksIHNldCB2YWx1ZSB0byAnLScKICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgc2V0RmFsbGJhY2tWYWx1ZSk7CiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgc2V0RmFsbGJhY2tWYWx1ZSk7CiAgICAgICAgZnVuY3Rpb24gc2V0RmFsbGJhY2tWYWx1ZShldnQpIHsKICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZ0LnRhcmdldDsKICAgICAgICAgICAgdGFyZ2V0LnZhbHVlID0gKHRhcmdldC52YWx1ZSkgPyB0YXJnZXQudmFsdWUgOiAnLSc7CiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgY29uc3QgZGF0YWxpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkYXRhbGlzdCcpOwogICAgICAgIGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwogICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJy0nKTsKICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gJy0nOwogICAgICAgIGRhdGFsaXN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgY29uc3QgbTN1ID0gU0VSVkVSWyd4ZXBnJ11bJ2VwZ01hcHBpbmcnXTsKICAgICAgICBpZiAobTN1KSB7CiAgICAgICAgICAgIGNvbnN0IHByb2dyYW1JZHMgPSBnZXRPd25PYmpQcm9wcyhtM3UpOwogICAgICAgICAgICBwcm9ncmFtSWRzLmZvckVhY2goKHByb2dyYW1JZCkgPT4gewogICAgICAgICAgICAgICAgY29uc3QgY2hhbmVsID0gbTN1W3Byb2dyYW1JZF07CiAgICAgICAgICAgICAgICBpZiAoY2hhbmVsLmhhc093blByb3BlcnR5KCd0dmctbmFtZScpKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBjaGFuZWxbInR2Zy1uYW1lIl0pOwogICAgICAgICAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSBwcm9ncmFtSWQ7CiAgICAgICAgICAgICAgICAgICAgZGF0YWxpc3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwogICAgICAgICAgICAgICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgY2hhbmVsWyJ0dmctbmFtZSJdKTsKICAgICAgICAgICAgICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gJy0nOwogICAgICAgICAgICAgICAgICAgIGRhdGFsaXN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZGF0YWxpc3QpOwogICAgICAgIHJldHVybiBbY29udGFpbmVyLCBpbnB1dCwgZGF0YWxpc3RdOwogICAgfQogICAgZ2V0UHJvZ3JhbXMoZmlsZSwgc2V0LCBhY3RpdmUpIHsKICAgICAgICAvL3ZhciBmaWxlSURzOnN0cmluZ1tdID0gZ2V0T2JqS2V5cyhTRVJWRVJbInhlcGciXVsieG1sdHZNYXAiXSkKICAgICAgICB2YXIgdmFsdWVzID0gZ2V0T2JqS2V5cyhTRVJWRVJbInhlcGciXVsieG1sdHZNYXAiXVtmaWxlXSk7CiAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICB2YXIgZGlzcGxheU5hbWU7CiAgICAgICAgdmFyIGFjdGl2ZXMgPSBnZXRPYmpLZXlzKFNFUlZFUlsiZGF0YSJdWyJTdHJlYW1QcmV2aWV3VUkiXVsiYWN0aXZlU3RyZWFtcyJdKTsKICAgICAgICB2YXIgYWN0aXZlX2xpc3QgPSBuZXcgQXJyYXkoKTsKICAgICAgICBpZiAoYWN0aXZlID09IHRydWUpIHsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3RpdmVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgbmFtZXNfc3BsaXQgPSBTRVJWRVJbImRhdGEiXVsiU3RyZWFtUHJldmlld1VJIl1bImFjdGl2ZVN0cmVhbXMiXVthY3RpdmVzW2ldXS5zcGxpdCgiWyIpOwogICAgICAgICAgICAgICAgZGlzcGxheU5hbWUgPSBuYW1lc19zcGxpdFswXS50cmltKCk7CiAgICAgICAgICAgICAgICBpZiAoZGlzcGxheU5hbWUgIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0geyAidmFsdWUiOiBkaXNwbGF5TmFtZSwgImRpc3BsYXkiOiBkaXNwbGF5TmFtZSB9OwogICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9saXN0LnB1c2gob2JqZWN0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChTRVJWRVJbInhlcGciXVsieG1sdHZNYXAiXVtmaWxlXVt2YWx1ZXNbaV1dLmhhc093blByb3BlcnR5KCdkaXNwbGF5LW5hbWUnKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWUgPSBTRVJWRVJbInhlcGciXVsieG1sdHZNYXAiXVtmaWxlXVt2YWx1ZXNbaV1dWyJkaXNwbGF5LW5hbWUiXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lID0gIi0iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGV4dFtpXSA9IGRpc3BsYXlOYW1lICsgIiAoIiArIHZhbHVlc1tpXSArICIpIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0ZXh0LnVuc2hpZnQoIi0iKTsKICAgICAgICB2YWx1ZXMudW5zaGlmdCgiLSIpOwogICAgICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJTRUxFQ1QiKTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk9QVElPTiIpOwogICAgICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlc1tpXSk7CiAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSB0ZXh0W2ldOwogICAgICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3RpdmVfbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiT1BUSU9OIik7CiAgICAgICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgYWN0aXZlX2xpc3RbaV1bInZhbHVlIl0pOwogICAgICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gYWN0aXZlX2xpc3RbaV1bImRpc3BsYXkiXTsKICAgICAgICAgICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgfQogICAgICAgIGlmIChzZXQgIT0gIiIpIHsKICAgICAgICAgICAgc2VsZWN0LnZhbHVlID0gc2V0OwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZWN0LnZhbHVlICE9IHNldCkgewogICAgICAgICAgICBzZWxlY3QudmFsdWUgPSAiLSI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxlY3Q7CiAgICB9Cn0KZnVuY3Rpb24gZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGZpbGUsIGZpbGVUeXBlLCBrZXkpIHsKICAgIGlmIChmaWxlID09ICJUaHJlYWRmaW4gRHVtbXkiKSB7CiAgICAgICAgcmV0dXJuIGZpbGU7CiAgICB9CiAgICB2YXIgZmlsZUlEOwogICAgdmFyIGluZGljYXRvciA9IGZpbGUuY2hhckF0KDApOwogICAgc3dpdGNoIChpbmRpY2F0b3IpIHsKICAgICAgICBjYXNlICJNIjoKICAgICAgICAgICAgZmlsZVR5cGUgPSAibTN1IjsKICAgICAgICAgICAgZmlsZUlEID0gZmlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiSCI6CiAgICAgICAgICAgIGZpbGVUeXBlID0gImhkaHIiOwogICAgICAgICAgICBmaWxlSUQgPSBmaWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJYIjoKICAgICAgICAgICAgZmlsZVR5cGUgPSAieG1sdHYiOwogICAgICAgICAgICBmaWxlSUQgPSBmaWxlLnN1YnN0cmluZygwLCBmaWxlLmxhc3RJbmRleE9mKCcuJykpOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImZpbGVzIl1bZmlsZVR5cGVdLmhhc093blByb3BlcnR5KGZpbGVJRCkgPT0gdHJ1ZSkgewogICAgICAgIHZhciBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWxlcyJdW2ZpbGVUeXBlXVtmaWxlSURdOwogICAgICAgIHJldHVybiBkYXRhW2tleV07CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gc2V0WG1sdHZDaGFubmVsKGVwZ01hcElkLCB4bWxUdkZpbGVTZWxlY3QpIHsKICAgIGNvbnN0IHhtbFR2ID0gbmV3IFhNTFRWRmlsZSgpOwogICAgY29uc3QgbmV3WG1sVHZGaWxlID0geG1sVHZGaWxlU2VsZWN0LnZhbHVlOwogICAgLy8gUmVtb3ZlIG9sZCBYTUxUViBJRCBzZWxlY3Rpb24gYm94CiAgICBjb25zdCB4bWxUdklkUGlja2VyUGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3htbHR2LWlkLXBpY2tlci1jb250YWluZXInKS5wYXJlbnRFbGVtZW50OwogICAgeG1sVHZJZFBpY2tlclBhcmVudC5pbm5lckhUTUwgPSAnJzsKICAgIC8vIENyZWF0ZSBuZXcgWE1MVFYgSUQgc2VsZWN0aW9uIGJveAogICAgY29uc3QgdHZnSWQgPSBTRVJWRVJbJ3hlcGcnXVsnZXBnTWFwcGluZyddW2VwZ01hcElkXVsndHZnLWlkJ107CiAgICBjb25zdCBbeG1sVHZJZENvbnRhaW5lciwgeG1sVHZJZElucHV0LCB4bWxUdklkRGF0YWxpc3RdID0geG1sVHYubmV3WG1sVHZJZFBpY2tlcihuZXdYbWxUdkZpbGUsIHR2Z0lkKTsKICAgIHhtbFR2SWRDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItY29udGFpbmVyJyk7CiAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCdsaXN0JywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgeG1sVHZJZElucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsICd4LW1hcHBpbmcnKTsgLy8gU2hvdWxkIHN0YXkgeC1tYXBwaW5nIGFzIGl0IHdpbGwgYmUgdXNlZCBpbiBkb25lUG9wdXBEYXRhIHRvIG1ha2UgYSBzZXJ2ZXIgcmVxdWVzdAogICAgeG1sVHZJZElucHV0LnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWlucHV0Jyk7CiAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsIGBqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgY2hlY2tYbWx0dkNoYW5uZWwoJyR7ZXBnTWFwSWR9JywgdGhpcy52YWx1ZSwgJyR7bmV3WG1sVHZGaWxlfScpO2ApOwogICAgeG1sVHZJZElucHV0LmNsYXNzTGlzdC5hZGQoJ2NoYW5nZWQnKTsKICAgIHhtbFR2SWREYXRhbGlzdC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgLy8gQWRkIG5ldyBYTUxUViBJRCBzZWxlY3Rpb24gYm94IHRvIGl0J3MgcGFyZW50CiAgICB4bWxUdklkUGlja2VyUGFyZW50LmFwcGVuZENoaWxkKHhtbFR2SWRDb250YWluZXIpOwogICAgY2hlY2tYbWx0dkNoYW5uZWwoZXBnTWFwSWQsIHhtbFR2SWRJbnB1dC52YWx1ZSwgbmV3WG1sVHZGaWxlKTsKfQpmdW5jdGlvbiBjaGVja1BQVih0aXRsZSwgZWxlbWVudCkgewogICAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTsKICAgIGNvbnNvbGUubG9nKCJEVU1NWSBUWVBFOiAiICsgdmFsdWUpOwogICAgaWYgKHZhbHVlID09ICJQUFYiKSB7CiAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIngtcHB2LWV4dHJhIikucGFyZW50RWxlbWVudDsKICAgICAgICB0ZC5pbm5lckhUTUwgPSAiIjsKICAgICAgICB2YXIgZGJLZXkgPSAieC1wcHYtZXh0cmEiOwogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQiKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBkYktleSk7CiAgICAgICAgLy8gaW5wdXQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlKQogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgInBwdi1leHRyYSIpOwogICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgLy8gQmV6ZWljaG51bmcKICAgICAgICBpZiAodGl0bGUubGVuZ3RoICE9IDApIHsKICAgICAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgdGQuY2xhc3NOYW1lID0gImxlZnQiOwogICAgICAgICAgICB0ZC5pbm5lckhUTUwgPSB0aXRsZSArICI6IjsKICAgICAgICB9CiAgICAgICAgLy8gQ29udGVudAogICAgICAgIHRkLmFwcGVuZENoaWxkKGVsZW1lbnQpOwogICAgICAgIHRoaXMudGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgfQp9CmZ1bmN0aW9uIGNoZWNrWG1sdHZDaGFubmVsKGlkLCBlbGVtZW50LCB4bWxGaWxlKSB7CiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlOwogICAgdmFyIGJvb2w7CiAgICB2YXIgY2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0aXZlJyk7CiAgICB2YXIgY2hhbm5lbCA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl1baWRdOwogICAgdmFyIHVwZGF0ZUxvZ287CiAgICBpZiAodmFsdWUgPT0gIi0iKSB7CiAgICAgICAgYm9vbCA9IGZhbHNlOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgYm9vbCA9IHRydWU7CiAgICB9CiAgICBjaGVja2JveC5jaGVja2VkID0gYm9vbDsKICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9ICJjaGFuZ2VkIjsKICAgIGNvbnNvbGUubG9nKHhtbEZpbGUpOwogICAgLy8gS2FuYWxsb2dvIGFrdHVhbGlzaWVyZW4KICAgIC8qCiAgICB1cGRhdGVMb2dvID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cGRhdGUtaWNvbiIpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQKICAgIGNvbnNvbGUubG9nKHVwZGF0ZUxvZ28pOwogICAgKi8KICAgIGlmICh4bWxGaWxlICE9ICJUaHJlYWRmaW4gRHVtbXkiICYmIGJvb2wgPT0gdHJ1ZSkgewogICAgICAgIC8vKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cGRhdGUtaWNvbiIpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIC8vKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cGRhdGUtaWNvbiIpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNsYXNzTmFtZSA9ICJjaGFuZ2VkIjsKICAgICAgICBjb25zb2xlLmxvZygiSUQiLCBpZCk7CiAgICAgICAgY2hhbmdlQ2hhbm5lbExvZ28oaWQpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh4bWxGaWxlID09ICJUaHJlYWRmaW4gRHVtbXkiKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVwZGF0ZS1pY29uIikuY2hlY2tlZCA9IGZhbHNlOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cGRhdGUtaWNvbiIpLmNsYXNzTmFtZSA9ICJjaGFuZ2VkIjsKICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBjaGFuZ2VDaGFubmVsTG9nbyhlcGdNYXBJZCkgewogICAgY29uc3QgY2hhbm5lbCA9IFNFUlZFUlsneGVwZyddWydlcGdNYXBwaW5nJ11bZXBnTWFwSWRdOwogICAgY29uc3QgeG1sVHZGaWxlU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvcHVwLXhtbHR2Jyk7CiAgICBjb25zdCB4bWxUdkZpbGUgPSB4bWxUdkZpbGVTZWxlY3Qub3B0aW9uc1t4bWxUdkZpbGVTZWxlY3Quc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgICBjb25zdCB4bWxUdklkSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneG1sdHYtaWQtcGlja2VyLWlucHV0Jyk7CiAgICBjb25zdCBuZXdYbWxUdklkID0geG1sVHZJZElucHV0LnZhbHVlOwogICAgY29uc3QgdXBkYXRlTG9nbyA9ICFCVUxLX0VESVQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwZGF0ZS1pY29uJykuY2hlY2tlZDsKICAgIGxldCBsb2dvOwogICAgaWYgKHVwZGF0ZUxvZ28gPT0gdHJ1ZSAmJiB4bWxUdkZpbGUgIT0gJ1RocmVhZGZpbiBEdW1teScpIHsKICAgICAgICBpZiAoU0VSVkVSWyd4ZXBnJ11bJ3htbHR2TWFwJ11beG1sVHZGaWxlXS5oYXNPd25Qcm9wZXJ0eShuZXdYbWxUdklkKSkgewogICAgICAgICAgICBsb2dvID0gU0VSVkVSWyd4ZXBnJ11bJ3htbHR2TWFwJ11beG1sVHZGaWxlXVtuZXdYbWxUdklkXVsnaWNvbiddOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbG9nbyA9IGNoYW5uZWxbJ3R2Zy1sb2dvJ107CiAgICAgICAgfQogICAgfQp9CmZ1bmN0aW9uIHNhdmVQb3B1cERhdGEoZGF0YVR5cGUsIGlkLCByZW1vdmUsIG9wdGlvbikgewogICAgc2hvd0VsZW1lbnQoImxvYWRpbmciLCB0cnVlKTsKICAgIGlmIChkYXRhVHlwZSA9PSAibWFwcGluZyIpIHsKICAgICAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgICAgICBjb25zb2xlLmxvZygiU2F2ZSBtYXBwaW5nIGRhdGEiKTsKICAgICAgICBjbWQgPSAic2F2ZUVwZ01hcHBpbmciOwogICAgICAgIGRhdGFbImVwZ01hcHBpbmciXSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICAgICAgY29uc29sZS5sb2coIlNFTkQgVE8gU0VSVkVSIik7CiAgICAgICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgICAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgICAgICBkZWxldGUgVU5ET1siZXBnTWFwcGluZyJdOwogICAgICAgIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgZmFsc2UpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnNvbGUubG9nKCJTYXZlIHBvcHVwIGRhdGEiKTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXAtY3VzdG9tIik7CiAgICB2YXIgaW5wdXRzID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQUJMRSIpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJTlBVVCIpOwogICAgdmFyIHNlbGVjdHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRBQkxFIilbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlNFTEVDVCIpOwogICAgdmFyIGlucHV0ID0gbmV3IE9iamVjdCgpOwogICAgdmFyIGNvbmZpcm1Nc2c7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgbmFtZTsKICAgICAgICBuYW1lID0gc2VsZWN0c1tpXS5uYW1lOwogICAgICAgIHZhciB2YWx1ZSA9IHNlbGVjdHNbaV0udmFsdWU7CiAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICAgIGNhc2UgInR1bmVyIjoKICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gcGFyc2VJbnQodmFsdWUpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBpbnB1dFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBzd2l0Y2ggKGlucHV0c1tpXS50eXBlKSB7CiAgICAgICAgICAgIGNhc2UgImNoZWNrYm94IjoKICAgICAgICAgICAgICAgIG5hbWUgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gaW5wdXRzW2ldLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidGV4dCI6CiAgICAgICAgICAgIGNhc2UgImhpZGRlbiI6CiAgICAgICAgICAgIGNhc2UgInBhc3N3b3JkIjoKICAgICAgICAgICAgICAgIG5hbWUgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICAgICAgICAgIHN3aXRjaCAobmFtZSkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgInR1bmVyIjoKICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRbbmFtZV0gPSBwYXJzZUludChpbnB1dHNbaV0udmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFtuYW1lXSA9IGlucHV0c1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBjbWQ7CiAgICBpZiAocmVtb3ZlID09IHRydWUpIHsKICAgICAgICBpbnB1dFsiZGVsZXRlIl0gPSB0cnVlOwogICAgfQogICAgc3dpdGNoIChkYXRhVHlwZSkgewogICAgICAgIGNhc2UgInVzZXJzIjoKICAgICAgICAgICAgY29uZmlybU1zZyA9ICJEZWxldGUgdGhpcyB1c2VyPyI7CiAgICAgICAgICAgIGlmIChpZCA9PSAiLSIpIHsKICAgICAgICAgICAgICAgIGNtZCA9ICJzYXZlTmV3VXNlciI7CiAgICAgICAgICAgICAgICBkYXRhWyJ1c2VyRGF0YSJdID0gaW5wdXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBjbWQgPSAic2F2ZVVzZXJEYXRhIjsKICAgICAgICAgICAgICAgIHZhciBkID0gbmV3IE9iamVjdCgpOwogICAgICAgICAgICAgICAgZFtpZF0gPSBpbnB1dDsKICAgICAgICAgICAgICAgIGRhdGFbInVzZXJEYXRhIl0gPSBkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIm0zdSI6CiAgICAgICAgICAgIGNvbmZpcm1Nc2cgPSAiRGVsZXRlIHRoaXMgcGxheWxpc3Q/IjsKICAgICAgICAgICAgc3dpdGNoIChvcHRpb24pIHsKICAgICAgICAgICAgICAgIC8vIFBvcHVwOiBTYXZlCiAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInNhdmVGaWxlc00zVSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAvLyBQb3B1cDogVXBkYXRlCiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInVwZGF0ZUZpbGVNM1UiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRhdGFbImZpbGVzIl0gPSBuZXcgT2JqZWN0OwogICAgICAgICAgICBkYXRhWyJmaWxlcyJdW2RhdGFUeXBlXSA9IG5ldyBPYmplY3Q7CiAgICAgICAgICAgIGRhdGFbImZpbGVzIl1bZGF0YVR5cGVdW2lkXSA9IGlucHV0OwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJoZGhyIjoKICAgICAgICAgICAgY29uZmlybU1zZyA9ICJEZWxldGUgdGhpcyBIREhvbWVSdW4gdHVuZXI/IjsKICAgICAgICAgICAgc3dpdGNoIChvcHRpb24pIHsKICAgICAgICAgICAgICAgIC8vIFBvcHVwOiBTYXZlCiAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInNhdmVGaWxlc0hESFIiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgLy8gUG9wdXA6IFVwZGF0ZQogICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgIGNtZCA9ICJ1cGRhdGVGaWxlSERIUiI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGF0YVsiZmlsZXMiXSA9IG5ldyBPYmplY3Q7CiAgICAgICAgICAgIGRhdGFbImZpbGVzIl1bZGF0YVR5cGVdID0gbmV3IE9iamVjdDsKICAgICAgICAgICAgZGF0YVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdID0gaW5wdXQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInhtbHR2IjoKICAgICAgICAgICAgY29uZmlybU1zZyA9ICJEZWxldGUgdGhpcyBYTUxUViBmaWxlPyI7CiAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uKSB7CiAgICAgICAgICAgICAgICAvLyBQb3B1cDogU2F2ZQogICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgIGNtZCA9ICJzYXZlRmlsZXNYTUxUViI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAvLyBQb3B1cDogVXBkYXRlCiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInVwZGF0ZUZpbGVYTUxUViI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGF0YVsiZmlsZXMiXSA9IG5ldyBPYmplY3Q7CiAgICAgICAgICAgIGRhdGFbImZpbGVzIl1bZGF0YVR5cGVdID0gbmV3IE9iamVjdDsKICAgICAgICAgICAgZGF0YVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdID0gaW5wdXQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICAgIGNvbmZpcm1Nc2cgPSAiRGVsZXRlIHRoaXMgZmlsdGVyPyI7CiAgICAgICAgICAgIGNtZCA9ICJzYXZlRmlsdGVyIjsKICAgICAgICAgICAgZGF0YVsiZmlsdGVyIl0gPSBuZXcgT2JqZWN0OwogICAgICAgICAgICBkYXRhWyJmaWx0ZXIiXVtpZF0gPSBpbnB1dDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YVR5cGUsIGlkKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIGlmIChyZW1vdmUgPT0gdHJ1ZSkgewogICAgICAgIGlmICghY29uZmlybShjb25maXJtTXNnKSkgewogICAgICAgICAgICBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICBjb25zb2xlLmxvZygiU0VORCBUTyBTRVJWRVIiKTsKICAgIGNvbnNvbGUubG9nKGRhdGEpOwogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwogICAgc2hvd0VsZW1lbnQoImxvYWRpbmciLCBmYWxzZSk7Cn0KZnVuY3Rpb24gZG9uZVBvcHVwRGF0YShkYXRhVHlwZSwgaWRzU3RyKSB7CiAgICB2YXIgaWRzID0gaWRzU3RyLnNwbGl0KCcsJyk7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBvcHVwLWN1c3RvbSIpOwogICAgdmFyIGlucHV0cyA9IGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJjaGFuZ2VkIik7CiAgICBpZHMuZm9yRWFjaChpZCA9PiB7CiAgICAgICAgdmFyIGlucHV0ID0gbmV3IE9iamVjdCgpOwogICAgICAgIGlucHV0ID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXVtpZF07CiAgICAgICAgY29uc29sZS5sb2coIklOUFVUOiAiICsgaW5wdXQpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBuYW1lOwogICAgICAgICAgICB2YXIgdmFsdWU7CiAgICAgICAgICAgIHN3aXRjaCAoaW5wdXRzW2ldLnRhZ05hbWUpIHsKICAgICAgICAgICAgICAgIGNhc2UgIklOUFVUIjoKICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGlucHV0c1tpXS50eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImNoZWNrYm94IjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW5wdXRzW2ldLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInRleHQiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGlucHV0c1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnB1dHNbaV0udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiU0VMRUNUIjoKICAgICAgICAgICAgICAgICAgICBuYW1lID0gaW5wdXRzW2ldLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnB1dHNbaV0udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgaW5wdXRbbmFtZV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgICAgICAgICAgIGNhc2UgInR2Zy1sb2dvIjoKICAgICAgICAgICAgICAgICAgICAvLyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1syXS5maXJzdENoaWxkIGFzIEhUTUxFbGVtZW50KS5zZXRBdHRyaWJ1dGUoInNyYyIsIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAieC1jaGFubmVsLXN0YXJ0IjoKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1szXS5maXJzdENoaWxkLmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAieC1uYW1lIjoKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1szXS5maXJzdENoaWxkLmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAieC1jYXRlZ29yeSI6CiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gIndoaXRlIjsKICAgICAgICAgICAgICAgICAgICB2YXIgY2F0Q29sb3JTZXR0aW5ncyA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZXBnQ2F0ZWdvcmllc0NvbG9ycyJdOwogICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnNfc3BsaXQgPSBjYXRDb2xvclNldHRpbmdzLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGNvbG9yc19zcGxpdC5sZW5ndGg7IGlpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhdHNDb2xvcl9zcGxpdCA9IGNvbG9yc19zcGxpdFtpaV0uc3BsaXQoIjoiKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhdHNDb2xvcl9zcGxpdFswXSA9PSB2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBjYXRzQ29sb3Jfc3BsaXRbMV07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbM10uZmlyc3RDaGlsZC5zdHlsZS5ib3JkZXJDb2xvciA9IGNvbG9yOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAieC1ncm91cC10aXRsZSI6CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbNV0uZmlyc3RDaGlsZC5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIngteG1sdHYtZmlsZSI6CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9ICJUaHJlYWRmaW4gRHVtbXkiICYmIHZhbHVlICE9ICItIikgewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldFZhbHVlRnJvbVByb3ZpZGVyRmlsZSh2YWx1ZSwgInhtbHR2IiwgIm5hbWUiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09ICItIikgewogICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFsieC1hY3RpdmUiXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1s2XS5maXJzdENoaWxkLmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAieC1tYXBwaW5nIjoKICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0WyJ4LWFjdGl2ZSJdID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzddLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LWJhY2t1cC1jaGFubmVsIjoKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1s3XS5maXJzdENoaWxkLmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAieC1oaWRlLWNoYW5uZWwiOgogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzddLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB9CiAgICAgICAgICAgIGNyZWF0ZVNlYXJjaE9iaigpOwogICAgICAgICAgICBzZWFyY2hJbk1hcHBpbmcoKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlucHV0WyJ4LWFjdGl2ZSJdID09IGZhbHNlKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jbGFzc05hbWUgPSAibm90QWN0aXZlRVBHIjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jbGFzc05hbWUgPSAiYWN0aXZlRVBHIjsKICAgICAgICB9CiAgICAgICAgY29uc29sZS5sb2coaW5wdXRbInR2Zy1sb2dvIl0pOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzJdLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJzcmMiLCBpbnB1dFsidHZnLWxvZ28iXSk7CiAgICB9KTsKICAgIHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsKICAgIHJldHVybjsKfQpmdW5jdGlvbiBzaG93UHJldmlldyhlbGVtZW50KSB7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15U3RyZWFtc0JveCIpOwogICAgc3dpdGNoIChlbGVtZW50KSB7CiAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICJub3RWaXNpYmxlIjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHZhciBzdHJlYW1zID0gWyJhY3RpdmVTdHJlYW1zIiwgImluYWN0aXZlU3RyZWFtcyJdOwogICAgc3RyZWFtcy5mb3JFYWNoKHByZXZpZXcgPT4gewogICAgICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByZXZpZXcpOwogICAgICAgIHRhYmxlLmlubmVySFRNTCA9ICIiOwogICAgICAgIHZhciBvYmogPSBTRVJWRVJbImRhdGEiXVsiU3RyZWFtUHJldmlld1VJIl1bcHJldmlld107CiAgICAgICAgdmFyIGNhcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJDQVBUSU9OIik7CiAgICAgICAgdmFyIHJlc3VsdCA9IHByZXZpZXcucmVwbGFjZSgvKFtBLVpdKS9nLCAiICQxIik7CiAgICAgICAgdmFyIGZpbmFsUmVzdWx0ID0gcmVzdWx0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcmVzdWx0LnNsaWNlKDEpOwogICAgICAgIGNhcHRpb24uaW5uZXJIVE1MID0gZmluYWxSZXN1bHQ7CiAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoY2FwdGlvbik7CiAgICAgICAgdmFyIHRib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEJPRFkiKTsKICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZCh0Ym9keSk7CiAgICAgICAgb2JqLnNsaWNlKDAsIDEwMDApLmZvckVhY2goY2hhbm5lbCA9PiB7CiAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgIHZhciB0ZEtleSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgIHZhciB0ZFZhbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgIHRkS2V5LmNsYXNzTmFtZSA9ICJ0ZEtleSI7CiAgICAgICAgICAgIHRkVmFsLmNsYXNzTmFtZSA9ICJ0ZFZhbCI7CiAgICAgICAgICAgIHN3aXRjaCAocHJldmlldykgewogICAgICAgICAgICAgICAgY2FzZSAiYWN0aXZlU3RyZWFtcyI6CiAgICAgICAgICAgICAgICAgICAgdGRLZXkuaW5uZXJUZXh0ID0gIkNoYW5uZWw6ICgrKSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJpbmFjdGl2ZVN0cmVhbXMiOgogICAgICAgICAgICAgICAgICAgIHRkS2V5LmlubmVyVGV4dCA9ICJDaGFubmVsOiAoLSkiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRkVmFsLmlubmVyVGV4dCA9IGNoYW5uZWw7CiAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkS2V5KTsKICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGRWYWwpOwogICAgICAgICAgICB0Ym9keS5hcHBlbmRDaGlsZCh0cik7CiAgICAgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRyKTsKICAgICAgICB9KTsKICAgIH0pOwogICAgLy8gc2hvd0VsZW1lbnQoImxvYWRpbmciLCBmYWxzZSkKICAgIGRpdi5jbGFzc05hbWUgPSAidmlzaWJsZSI7CiAgICByZXR1cm47Cn0K" - webUI["html/js/network_ts.js"] = "Y2xhc3MgU2VydmVyIHsKICAgIGNvbnN0cnVjdG9yKGNtZCkgewogICAgICAgIHRoaXMuY21kID0gY21kOwogICAgfQogICAgcmVxdWVzdChkYXRhKSB7CiAgICAgICAgaWYgKFNFUlZFUl9DT05ORUNUSU9OID09IHRydWUpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBTRVJWRVJfQ09OTkVDVElPTiA9IHRydWU7CiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CiAgICAgICAgaWYgKHRoaXMuY21kICE9ICJ1cGRhdGVMb2ciKSB7CiAgICAgICAgICAgIC8vIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgdHJ1ZSkKICAgICAgICAgICAgVU5ETyA9IG5ldyBPYmplY3QoKTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wpIHsKICAgICAgICAgICAgY2FzZSAiaHR0cDoiOgogICAgICAgICAgICAgICAgdGhpcy5wcm90b2NvbCA9ICJ3czovLyI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaHR0cHM6IjoKICAgICAgICAgICAgICAgIHRoaXMucHJvdG9jb2wgPSAid3NzOi8vIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB2YXIgdXJsID0gdGhpcy5wcm90b2NvbCArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICI6IiArIHdpbmRvdy5sb2NhdGlvbi5wb3J0ICsgIi9kYXRhLyIgKyAiP1Rva2VuPSIgKyBnZXRDb29raWUoIlRva2VuIik7CiAgICAgICAgZGF0YVsiY21kIl0gPSB0aGlzLmNtZDsKICAgICAgICB2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7CiAgICAgICAgd3Mub25vcGVuID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICBXU19BVkFJTEFCTEUgPSB0cnVlOwogICAgICAgICAgICBjb25zb2xlLmxvZygiUkVRVUVTVCAoSlMpOiIpOwogICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTsKICAgICAgICAgICAgY29uc29sZS5sb2coIlJFUVVFU1Q6IChKU09OKSIpOwogICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgICAgICAgICAgIHRoaXMuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgICAgICAgfTsKICAgICAgICB3cy5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIk5vIHdlYnNvY2tldCBjb25uZWN0aW9uIHRvIFRocmVhZGZpbiBjb3VsZCBiZSBlc3RhYmxpc2hlZC4gQ2hlY2sgeW91ciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uIik7CiAgICAgICAgICAgIFNFUlZFUl9DT05ORUNUSU9OID0gZmFsc2U7CiAgICAgICAgICAgIGlmIChXU19BVkFJTEFCTEUgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KCJObyB3ZWJzb2NrZXQgY29ubmVjdGlvbiB0byBUaHJlYWRmaW4gY291bGQgYmUgZXN0YWJsaXNoZWQuIENoZWNrIHlvdXIgbmV0d29yayBjb25maWd1cmF0aW9uLiIpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBTRVJWRVJfQ09OTkVDVElPTiA9IGZhbHNlOwogICAgICAgICAgICBzaG93RWxlbWVudCgibG9hZGluZyIsIGZhbHNlKTsKICAgICAgICAgICAgY29uc29sZS5sb2coIlJFU1BPTlNFOiIpOwogICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGUuZGF0YSk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJ0b2tlbiIpKSB7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSAiVG9rZW49IiArIHJlc3BvbnNlWyJ0b2tlbiJdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZVsic3RhdHVzIl0gPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KHJlc3BvbnNlWyJlcnIiXSk7CiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoInJlbG9hZCIpKSB7CiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJwcm9iZUluZm8iKSkgewogICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9iZURldGFpbHMiKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVsicHJvYmVJbmZvIl1bInJlc29sdXRpb24iXSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9iZURldGFpbHMiKS5pbm5lckhUTUwgPSAiPHA+UmVzb2x1dGlvbjogPHNwYW4gY2xhc3M9J3RleHQtcHJpbWFyeSc+IiArIHJlc3BvbnNlWyJwcm9iZUluZm8iXVsicmVzb2x1dGlvbiJdICsgIjwvc3Bhbj48L3A+PHA+RnJhbWUgUmF0ZTogPHNwYW4gY2xhc3M9J3RleHQtcHJpbWFyeSc+IiArIHJlc3BvbnNlWyJwcm9iZUluZm8iXVsiZnJhbWVSYXRlIl0gKyAiIEZQUzwvc3Bhbj48L3A+PHA+QXVkaW86IDxzcGFuIGNsYXNzPSd0ZXh0LXByaW1hcnknPiIgKyByZXNwb25zZVsicHJvYmVJbmZvIl1bImF1ZGlvQ2hhbm5lbCJdICsgIjwvc3Bhbj48L3A+IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJsb2dvVVJMIikpIHsKICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbm5lbC1pY29uIik7CiAgICAgICAgICAgICAgICBkaXYudmFsdWUgPSByZXNwb25zZVsibG9nb1VSTCJdOwogICAgICAgICAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICJjaGFuZ2VkIjsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBzd2l0Y2ggKGRhdGFbImNtZCJdKSB7CiAgICAgICAgICAgICAgICBjYXNlICJ1cGRhdGVMb2ciOgogICAgICAgICAgICAgICAgICAgIFNFUlZFUlsibG9nIl0gPSByZXNwb25zZVsibG9nIl07CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50X2xvZyIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dMb2dzKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwbGF5bGlzdC1jb25uZWN0aW9uLWluZm9ybWF0aW9uIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFjdGl2ZUNsYXNzID0gInRleHQtcHJpbWFyeSI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVsiY2xpZW50SW5mbyJdWyJhY3RpdmVQbGF5bGlzdCJdIC8gcmVzcG9uc2VbImNsaWVudEluZm8iXVsidG90YWxQbGF5bGlzdCJdID49IDAuNiAmJiByZXNwb25zZVsiY2xpZW50SW5mbyJdWyJhY3RpdmVQbGF5bGlzdCJdIC8gcmVzcG9uc2VbImNsaWVudEluZm8iXVsidG90YWxQbGF5bGlzdCJdIDwgMC44KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVDbGFzcyA9ICJ0ZXh0LXdhcm5pbmciOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlWyJjbGllbnRJbmZvIl1bImFjdGl2ZVBsYXlsaXN0Il0gLyByZXNwb25zZVsiY2xpZW50SW5mbyJdWyJ0b3RhbFBsYXlsaXN0Il0gPj0gMC44KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVDbGFzcyA9ICJ0ZXh0LWRhbmdlciI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBsYXlsaXN0LWNvbm5lY3Rpb24taW5mb3JtYXRpb24iKS5pbm5lckhUTUwgPSAiUGxheWxpc3QgQ29ubmVjdGlvbnM6IDxzcGFuIGNsYXNzPSciICsgYWN0aXZlQ2xhc3MgKyAiJz4iICsgcmVzcG9uc2VbImNsaWVudEluZm8iXVsiYWN0aXZlUGxheWxpc3QiXSArICIgLyAiICsgcmVzcG9uc2VbImNsaWVudEluZm8iXVsidG90YWxQbGF5bGlzdCJdICsgIjwvc3Bhbj4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNsaWVudC1jb25uZWN0aW9uLWluZm9ybWF0aW9uIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFjdGl2ZUNsYXNzID0gInRleHQtcHJpbWFyeSI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVsiY2xpZW50SW5mbyJdWyJhY3RpdmVDbGllbnRzIl0gLyByZXNwb25zZVsiY2xpZW50SW5mbyJdWyJ0b3RhbENsaWVudHMiXSA+PSAwLjYgJiYgcmVzcG9uc2VbImNsaWVudEluZm8iXVsiYWN0aXZlQ2xpZW50cyJdIC8gcmVzcG9uc2VbImNsaWVudEluZm8iXVsidG90YWxDbGllbnRzIl0gPCAwLjgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNsYXNzID0gInRleHQtd2FybmluZyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2VbImNsaWVudEluZm8iXVsiYWN0aXZlQ2xpZW50cyJdIC8gcmVzcG9uc2VbImNsaWVudEluZm8iXVsidG90YWxDbGllbnRzIl0gPj0gMC44KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVDbGFzcyA9ICJ0ZXh0LWRhbmdlciI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNsaWVudC1jb25uZWN0aW9uLWluZm9ybWF0aW9uIikuaW5uZXJIVE1MID0gIkNsaWVudCBDb25uZWN0aW9uczogPHNwYW4gY2xhc3M9JyIgKyBhY3RpdmVDbGFzcyArICInPiIgKyByZXNwb25zZVsiY2xpZW50SW5mbyJdWyJhY3RpdmVDbGllbnRzIl0gKyAiIC8gIiArIHJlc3BvbnNlWyJjbGllbnRJbmZvIl1bInRvdGFsQ2xpZW50cyJdICsgIjwvc3Bhbj4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIFNFUlZFUiA9IG5ldyBPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgICBTRVJWRVIgPSByZXNwb25zZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoIm9wZW5NZW51IikpIHsKICAgICAgICAgICAgICAgIHZhciBtZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocmVzcG9uc2VbIm9wZW5NZW51Il0pOwogICAgICAgICAgICAgICAgbWVudS5jbGljaygpOwogICAgICAgICAgICAgICAgc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgib3BlbkxpbmsiKSkgewogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gcmVzcG9uc2VbIm9wZW5MaW5rIl07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJhbGVydCIpKSB7CiAgICAgICAgICAgICAgICBhbGVydChyZXNwb25zZVsiYWxlcnQiXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJyZWxvYWQiKSkgewogICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJ3aXphcmQiKSkgewogICAgICAgICAgICAgICAgY3JlYXRlTGF5b3V0KCk7CiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uV2l6YXJkW3Jlc3BvbnNlWyJ3aXphcmQiXV0uY3JlYXRlV2l6YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3JlYXRlTGF5b3V0KCk7CiAgICAgICAgfTsKICAgIH0KfQpmdW5jdGlvbiBnZXRDb29raWUobmFtZSkgewogICAgdmFyIHZhbHVlID0gIjsgIiArIGRvY3VtZW50LmNvb2tpZTsKICAgIHZhciBwYXJ0cyA9IHZhbHVlLnNwbGl0KCI7ICIgKyBuYW1lICsgIj0iKTsKICAgIGlmIChwYXJ0cy5sZW5ndGggPT0gMikKICAgICAgICByZXR1cm4gcGFydHMucG9wKCkuc3BsaXQoIjsiKS5zaGlmdCgpOwp9Cg==" - webUI["html/login.html"] = "PCFkb2N0eXBlIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPgogIDxsaW5rCiAgICByZWw9InN0eWxlc2hlZXQiCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyIKICAvPgogIDxsaW5rIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIGludGVncml0eT0ic2hhMzg0LWdIMnlJSnFLZE5IUEVxMG40TXFhL0hHS0loU2tJSGVMNUF5aGtZVjhpNTlVNUFSNmNzQnZBcEhITmwvdkkxQngiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9iYXNlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgo8L2hlYWQ+Cgo8Ym9keT4KICA8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWV4cGFuZC1sZyBzdGlja3ktdG9wIG5hdmJhci1kYXJrIGJnLWJsYWNrIj4KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CiAgICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii93ZWIiPgogICAgICAgIDxzcGFuIGlkPSJsb2dvIj48L3NwYW4+CiAgICAgIDwvYT4KICAgIDwvZGl2PgogIDwvbmF2PgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgogICAgICAgIDxkaXYgY2xhc3M9InRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIGNhcmQgdGV4dC1iZy1kYXJrIG1iLTMiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1oZWFkZXIiPgogICAgICAgICAgICA8aDM+e3subG9naW4uaGVhZGxpbmV9fTwvaDM+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+CiAgICAgICAgICAgIDxwIGlkPSJlcnIiIGNsYXNzPSJlcnJvck1zZyBjZW50ZXIiPnt7LmF1dGhlbnRpY2F0aW9uRXJyfX08L3A+CiAgICAgICAgICAgIDxmb3JtIGlkPSJhdXRoZW50aWNhdGlvbiIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICA8aDU+e3subG9naW4udXNlcm5hbWUudGl0bGV9fTo8L2g1PgogICAgICAgICAgICAgIDxpbnB1dCBpZD0idXNlcm5hbWUiIHR5cGU9InRleHQiIG5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0iVXNlcm5hbWUiIHZhbHVlPSIiPgogICAgICAgICAgICAgIDxoNT57ey5sb2dpbi5wYXNzd29yZC50aXRsZX19OjwvaDU+CiAgICAgICAgICAgICAgPGlucHV0IGlkPSJwYXNzd29yZCIgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0iUGFzc3dvcmQiIHZhbHVlPSIiPgogICAgICAgICAgICAgIDxpbnB1dCBpZD0ic3VibWl0IiBjbGFzcz0iIiB0eXBlPSJzdWJtaXQiIG9uc3VibWl0PSJqYXZhc2NyaXB0OmxvZ2luKCk7IiB2YWx1ZT0ie3suYnV0dG9uLmxvZ2lufX0iPgogICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvanMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMiIGludGVncml0eT0ic2hhMzg0LUEzckpEODU2S293U2I3ZHdsWmRZRWtPMzlHYWdpN3ZJc0YwanJSQW9RbURLS3RRQkhVdUxaOUFzU3Y0akQ0WGEiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0PgogIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9jbGlwYm9hcmQuanMvMi4wLjEwL2NsaXBib2FyZC5taW4uanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9uZXR3b3JrX3RzLmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvYXV0aGVudGljYXRpb25fdHMuanMiPjwvc2NyaXB0Pgo8L2JvZHk+Cgo8L2h0bWw+" - webUI["html/video/stream-limit.ts"] = "R0AREABC8CUAAcEAAP8B/wAB/IAUSBIBBkZGbXBlZwlTZXJ2aWNlMDF3fEPK//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQAAQAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABAAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAMAdQAAB7DH4AAAAB4AAAgMAKMQAJEKERAAfYYQAAAAEJ8AAAAAFnZAAorNlAeAIn5YpQAAADABAAAAMDIPGDGWAAAAABaOvjyyLAAAABBgX//6vcRem95tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTY0IHIzMTA4IDMxZTE5ZjkgLSBILjI2NC9NUEVHLTQgQVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDIzIC0gaHR0cDovL3dHAQARd3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2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30X9oT0SBBZCI3AtJaE1scGsmpXrX+6L7ECx+XYakivHzMbORwEAFX6jycIYObFMA8cO1RQbKqBjRSwmV6s3Bvymh1Uy2Q4NYGetxxqA4TS9AAsfEnTWSPnioguTXby9YCaR4TjGhn8NBtHaAqal7fT8Mi6Fx48bLZLUw8vE0oyOXRPPZ7YEaZ8VtCcKvfPmIXDe+CICjSg/14litlDqWjesyqV20kGkxEXxFBxQ6opg8rJ5nrXpJ7Yg7f1kVB6kfioI546wX4WiVIHMnIjolv1sVV16hPOoaheE0P72F7ZHAQAW7HIsDRCfdXPaYJO+kI1KnbprbBU8l9EpUeesa13zPgeLsD/2jy8om6zqqaZBpDO3+joQU+lzMfu74FIaVthokTCHq+okILC+gMpWqJ9gii24CxJR1eAEEaVrQma2Vqt0eRRTQKRgUz3U+yFZEROE+9eX4DBqMlOFD6/RPC32sesdhyOVL9peV/fimBhb4rcmjAOm79hlThrtz/TWGfACtvoNRAwACV66tkmnc4GPMdLg0xEkq+1LSEcBADcNAP///////////////5trYpfJL+GISCBj9FiUkOtbkee6L9I58mjnY1y/WDNqht+Qw3+9i+KfyBbjdz/46xUXVuCItwfw/gdYKyy+IjRZiv53kEqW+PD7lPLLRgAAL2BITMTuwQL79Q01wkomp2ZPIBYiBP6WREAZAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAW9R0EAGAAAAeAAAIDACjEACYEhEQAH9IEAAAABCfAAAAABQZokbEO//qmWAAADAAADAAADAAADAAADAAADAAADAhPyO6dd23w9DkWWQJotXSbxVzBxaMjhfbwK5hWmvMGszdWhoszx1x0hDXN8c9BgYxwvxRZXkmrTPV9ZQAAAAwAAAwAAAwAAAwAKyANRq59GNuA0ghi7BmsDn4KOtIcIHn/KA8ZjXdDU0cUWk7qRZwNMMelaC07cZyBZW9BHAQA5EgD//////////////////////472Ji2hDXNKdWiA/xvCwGEXvTeFAvXO+jhlL6AOli2RGJa+ncBbXMf/Fv/nG9TOUvI8v62JTNsuhHbKPEq9HPF4/Uizrx3rjCTMC69d6+VoYrKv6XxKyvGcL7/QDEDKbwk4eCFgJZJEAlH+N25TWR6KYwzkYYgGuXdrBv3UkeA7VHwdf9Xzh5cuSg4ngVmnfeIpA9JsLqp2wIu9AAADAAADAAAIuEdBADoHEAAAiRx+AAAAAeAAAIDACjEACUjhEQAJEKEAAAABCfAAAAABQZ5CeIX/AAADAAADAAADAAADAAADAAADAAADAnzE28Zci1VBf0H4k1nWmJ0ogyjKdI6LAY1zorGVIRF7G8uwAAADAAADAAADAAADAAADAqrZOCXhGzA4u24KPtb92mgjNUnlvc9Xhr0gBo7u2GDR+aPxP9hnLhhlBtu4gqLkmscLxiv7oXnm033sXadVffC0UcIARwEAO64A//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAwAAAwAAM+FHQAARAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABEAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAPCUA////////////////////////////////////////////////AAAB4AAAgIAFIQAJLMEAAAABCfAAAAABAZ5hdEK/AAADAAADAAADAAADAAADAAADAAADA1/+i67DypGtrhJHPx4hDO6/W1t2QWamAxImT0NjhBVoAAADAAADAAADAAADAAAFMUbvocN9sGd3vACpQrs5+mzAC6i5WG4adCZ7bcVeOzo7AFpOoAAAAwAAAwAAMqBHQQA9QhAAAJcsfgD//////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACWUBEQAJSOEAAAABCfAAAAABAZ5jakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAAF+YuLcI2IxJ27WrhAZp7Yh4CElw5RRRGjq0bAAADAAADAABEwUdBAD4uAP///////////////////////////////////////////////////////////wAAAeAAAIDACjEACfGhEQAJZQEAAAABCfAAAAABQZpoSahBaJlMCHf//qmWAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAK78A5Ntd6FmvObqU2qkO9/nBjO187SEClZ2zAWMgqZxWCxcqvQx+wgAAADAAADAAU1R0AAEgAAsA0AAcEAAAAB8AAqsQSy//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HUAASAAKwEgABwQAA4QDwABvhAPAAFb1NVv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBAD86EAAApTx+AP///////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACblhEQAJgSEAAAABCfAAAAABQZ6GRREsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAB1LjAMsF1v3AJeffDUP0gAbzkVi7LRpW7+1eciThATL+0AAADAAADAAIPR0EAMEYA////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQAJnUEAAAABCfAAAAABAZ6ldEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAOo9u4wKtZ9mouspMor7zADZAcKEUQKmIGN/qFqwAAAMAAAMAA1NHQQAxURAAALNMfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACdWBEQAJuWEAAAABCfAAAAABAZ6nakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdAABMAALANAAHBAAAAAfAAKrEEsv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R1AAEwACsBIAAcEAAOEA8AAb4QDwABW9TVb///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQQAyTgD//////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC2IhEQAJ1YEAAAABCfAAAAABQZqsSahBbJlMCHf//qmWAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAF4+AbzVAAAAwAAAwAAAwBAwEdBADNKEAAAwVx+AP////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAAsp4REACfGhAAAAAQnwAAAAAUGeykUVLC//AAADAAADAAADAAADAAADAAADAAADAAE1849qKzqh1YAAAAMAAAMAAAMAAAMAAPrcuImYkdwSCsiv8h6ss58AAAMAAAMAAM+BR0EANFUA////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQALDcEAAAABCfAAAAABAZ7pdEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAH1fABVCgbyQRhNELHHAAAAMAAAMACyhHQAAUAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABQAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EANVEQAADPbH4A//////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAAtGAREACynhAAAAAQnwAAAAAQGe62pCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpnSFHPivfpgAAAMAAAMAAAMAAAMAAA4qgOic2+XlI15zYQAAAwAAAwAAHTBHQBERAELwJQABwQAA/wH/AAH8gBRIEgEGRkZtcGVnCVNlcnZpY2UwMXd8Q8r//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBADZOAP//////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgMAKMQAL0qERAAtGAQAAAAEJ8AAAAAFBmvBJqEFsmUwIb//+p4QAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAv/sqEpwAAADAAADAAADAMCBR0EAN0oQAADdfH4A/////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC5phEQALYiEAAAABCfAAAAABQZ8ORRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwABAV2OiZ9R3aIKyK/yHqyznwAAAwAAAwAAz4FHQAAVAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABUAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAOFUA////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQALfkEAAAABCfAAAAABAZ8tdEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAICUVFVNgckQRhNELHHAAAAMAAAMACylHQQA5URAAAOuMfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC7aBEQALmmEAAAABCfAAAAABAZ8vakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdBADpRAP//////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgMAKMQANQyERAAu2gQAAAAEJ8AAAAAFBmzRJqEFsmUwIZ//+nhAAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAGVAR0AAFgAAsA0AAcEAAAAB8AAqsQSy//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HUAAWAAKwEgABwQAA4QDwABvhAPAAFb1NVv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBADtMEAAA+Zx+AP///////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADQrhEQAL0qEAAAABCfAAAAABQZ9SRRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAAt+76q5wtAchcd/IOszwAAAMAAAMAAAe1R0EAPFYA/////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAICABSEAC+7BAAAAAQnwAAAAAQGfcXRCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpf51sVkl4rAAAAMAAAMAAAMAAAMAABbufc2kxdx/pBxb4AAAAwAAAwAAU0BHQQA9URAAAQesfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADScBEQANCuEAAAABCfAAAAABAZ9zakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdAABcAALANAAHBAAAAAfAAKrEEsv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R1AAFwACsBIAAcEAAOEA8AAb4QDwABW9TVb///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQQA+UgD///////////////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAA2zoREADScBAAAAAQnwAAAAAUGbeEmoQWyZTAhX//44QAAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABi0dBAD9MEAABFbx+AP///////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADXthEQANQyEAAAABCfAAAAABQZ+WRRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAAt+76q5wtAchcd/IOszwAAAMAAAMAAAe0R0EAMFYA/////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAICABSEADV9BAAAAAQnwAAAAAQGftXRCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpf51sVkl4rAAAAMAAAMAAAMAAAMAABbufc2kxdx/pBxb4AAAAwAAAwAAU0FHQAAYAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABgAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAMVEQAAEjzH4A//////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAA2XgREADXthAAAAAQnwAAAAAQGft2pCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpnSFHPivfpgAAAMAAAMAAAMAAAMAAA4qgOic2+XlI15zYQAAAwAAAwAAHTE=" - webUI["html/img/logo_b_880x200.png"] = "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" + webUI["html/create-first-user.html"] = "PCFkb2N0eXBlIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPgogIDxsaW5rCiAgICByZWw9InN0eWxlc2hlZXQiCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyIKICAvPgogIDxsaW5rIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIGludGVncml0eT0ic2hhMzg0LWdIMnlJSnFLZE5IUEVxMG40TXFhL0hHS0loU2tJSGVMNUF5aGtZVjhpNTlVNUFSNmNzQnZBcEhITmwvdkkxQngiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9iYXNlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgo8L2hlYWQ+Cgo8Ym9keT4KCiAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iaW1nQ2VudGVyIj48L2Rpdj4KCiAgPGRpdiBpZD0iYm94Ij4KCiAgICA8ZGl2IGlkPSJoZWFkbGluZSI+CiAgICAgIDxoMSBpZD0iaGVhZC10ZXh0IiBjbGFzcz0iY2VudGVyIj57ey5hY2NvdW50LmhlYWRsaW5lfX08L2gxPgogICAgPC9kaXY+CgogICAgPHAgaWQ9ImVyciIgY2xhc3M9ImVycm9yTXNnIGNlbnRlciI+PC9wPgoKICAgIDxkaXYgaWQ9ImNvbnRlbnQiPgoKICAgICAgPGZvcm0gaWQ9ImF1dGhlbnRpY2F0aW9uIiBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4KCiAgICAgICAgPGg1Pnt7LmFjY291bnQudXNlcm5hbWUudGl0bGV9fTo8L2g1PgogICAgICAgIDxpbnB1dCBpZD0idXNlcm5hbWUiIHR5cGU9InRleHQiIG5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0iVXNlcm5hbWUiIHZhbHVlPSIiPgogICAgICAgIDxoNT57ey5hY2NvdW50LnBhc3N3b3JkLnRpdGxlfX06PC9oNT4KICAgICAgICA8aW5wdXQgaWQ9InBhc3N3b3JkIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJQYXNzd29yZCIgdmFsdWU9IiI+CiAgICAgICAgPGg1Pnt7LmFjY291bnQuY29uZmlybS50aXRsZX19OjwvaDU+CiAgICAgICAgPGlucHV0IGlkPSJjb25maXJtIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0iY29uZmlybSIgcGxhY2Vob2xkZXI9IkNvbmZpcm0iIHZhbHVlPSIiPgoKICAgICAgPC9mb3JtPgoKICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJveC1mb290ZXIiPgogICAgICA8aW5wdXQgaWQ9InN1Ym1pdCIgY2xhc3M9IiIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0ie3suYnV0dG9uLmNyYWV0ZUFjY291bnR9fSIgb25jbGljaz0iamF2YXNjcmlwdDogbG9naW4oKTsiPgogICAgPC9kaXY+CgoKICA8L2Rpdj4KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9qcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyIgaW50ZWdyaXR5PSJzaGEzODQtQTNySkQ4NTZLb3dTYjdkd2xaZFlFa08zOUdhZ2k3dklzRjBqclJBb1FtREtLdFFCSFV1TFo5QXNTdjRqRDRYYSIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2NsaXBib2FyZC5qcy8yLjAuMTAvY2xpcGJvYXJkLm1pbi5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL25ldHdvcmtfdHMuanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9hdXRoZW50aWNhdGlvbl90cy5qcyI+PC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4=" + webUI["html/img/BC-QR.png"] = "iVBORw0KGgoAAAANSUhEUgAAALoAAADCCAYAAAD+f9hdAAABWGlDQ1BJQ0MgUHJvZmlsZQAAGJVlkL9LQlEUx79KEZlJUUtQcKEhg4qwITAa1EKSBjEDLRqez+eP0NflvSvm3NIf0d5aYwS1NAQtQRAtQS3N0eD6+j5N1Dxw7vmcL9977+EAXmhSVrwTQNVUVioeFZnsgRj5wjD8CCAMj6bbMpJM7oLRqf3RfIXHrS/L7lszi4FGYvvjyHccm1v4bDqD/r4YzRu2zvrNVLq0FODJk+frSrp8Tp62OBT5wuVim69czrX5oeVJp2LkN3Iw18PFHq5Wavrfv+7EfsPc32PNMGdhI4U4ohBIw4IGk0oBBlmgjjIUSqQtkg2JCh0N9kms8Yyzq6JGz0Ao47Slxk5kwyoXS0pEuCVD7Jj6ypIIrYZCHIA7/7/Lrnb2DmzeOY5z29US98D1OuC76WrBDWByDHh8kpqltaQhprdQAH4ugfEsMPXMO4ed2X4BE0hdOlrLnMgAAADQZVhJZk1NACoAAAAIAAUBEgADAAAAAQABAAABGgAFAAAAAQAAAEoBGwAFAAAAAQAAAFIBMQACAAAAGAAAAFqHaQAEAAAAAQAAAHIAAAAAAAAASAAAAAEAAABIAAAAAUFuZHJvaWQgU1AyQS4yMjA1MDUuMDAyAAAFkAMAAgAAABQAAAC0kBEAAgAAAAcAAADIkpEAAgAAAAQ2MzIAoAIABAAAAAEAAAC6oAMABAAAAAEAAADCAAAAADIwMjI6MDU6MTIgMTQ6NTY6NDEALTA1OjAwAABhL1DGAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD82lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPGV4aWY6T2Zmc2V0VGltZU9yaWdpbmFsPi0wNTowMDwvZXhpZjpPZmZzZXRUaW1lT3JpZ2luYWw+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj43ODY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+ODE4PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6U3Vic2VjVGltZU9yaWdpbmFsPjYzMjwvZXhpZjpTdWJzZWNUaW1lT3JpZ2luYWw+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHBob3Rvc2hvcDpEYXRlQ3JlYXRlZD4yMDIyLTA1LTEyVDE0OjU2OjQxLjYzMjwvcGhvdG9zaG9wOkRhdGVDcmVhdGVkPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFuZHJvaWQgU1AyQS4yMjA1MDUuMDAyPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrFqaA/AABAAElEQVR4Ae3dB7wtSVE/8ENOoqCAAcN7KgJGUAREwCUJCvonSjIsSSSIIElEFEVQREmCIgisqIuEBUEQFVlXVMCAOayRRQUlKaIgEvb9+9vv/s7Wmztzzpx7z9146/M5p3u6q6uqq6urw/TMXOxYg8UhHGrgQq6Bi1/I63dYvUMNdA0cGvqhIVwkNHBo6BeJ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" webUI["html/img/m3u.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0yOFQxOTowNzozMTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CumjVbcAAAGWSURBVGgF7VoxTgJRFGTFaGKBFnbEcABjb0fiBego7D2ABYmn8ARKRWFNQ6gx4QRQGWJJoY2VhXGdl7Dkh7Dsx3ns3yXvJ5P97L6d92bmhwYqlcWK43gK5L2enP51NP8F7pN721wPnOITZx9qG6HxI8QIZO+9XCHeL+VQKKm8QMyxb6+iCpH528AQYs58xIQWknV8mhDxCjEXWWJCC8maT55fAmOIudpUXAYhMn8dGEHMTZqYsgiR+U+BAcTcrhNTJiEy/xHQg5jOqpjD1RsBP3+id8u3P8TUoij6SuoLIwRDfWOofjLYtteyHa1UfcvvcUT1jqpGauVuHnyAdragjv/TAkley3uhj9Y5ZhDQa2+Olgmhz4IygSWibChNZ4nQFioTWCLKhtJ0lghtoTKBJaJsKE1nidAWKhNYIsqG0nSWCG2hMoElomwoTWeJ0BYqE1giyobSdJYIbaEygSWibChNZ4nQFioTWCLKhtJ0biJzmi1/guXMrpDn/OegO3bXMuAH0TtgAvwARV3y57Q34AGoJkL+AErKZ9cqbH7AAAAAAElFTkSuQmCC" + webUI["html/index.html"] = "PCFkb2N0eXBlIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDwhLS0tCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4gCiAgICAtLT4KICA8dGl0bGU+VGhyZWFkZmluPC90aXRsZT4KICA8IS0tIGZvbnQtYXdlc29tZSAtLT4KICA8bGluawogICAgcmVsPSJzdHlsZXNoZWV0IgogICAgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvZm9udC1hd2Vzb21lLzUuMTQuMC9jc3MvYWxsLm1pbi5jc3MiCiAgLz4KICA8bGluayBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Jvb3RzdHJhcEA1LjIuMC9kaXN0L2Nzcy9ib290c3RyYXAubWluLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBpbnRlZ3JpdHk9InNoYTM4NC1nSDJ5SUpxS2ROSFBFcTBuNE1xYS9IR0tJaFNrSUhlTDVBeWhrWVY4aTU5VTVBUjZjc0J2QXBISE5sL3ZJMUJ4IiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9zY3JlZW4uY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+CiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYmFzZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KICA8bGluayByZWw9Imljb24iIGhyZWY9ImltZy90aHJlYWRmaW4uaWNvIj4KCjwvaGVhZD4KCjxib2R5IG9ubG9hZD0iamF2YXNjcmlwdDogUGFnZVJlYWR5KCk7Ij4KCiAgPGRpdiBpZD0ibG9hZGluZyIgY2xhc3M9Im1vZGFsIGZhZGUiPgogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIGxvYWRlciI+PC9kaXY+CiAgPC9kaXY+CgogIDxkaXYgaWQ9InBvcHVwIiBjbGFzcz0ibW9kYWwgZmFkZSI+CiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwteGwiPgogICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiIGlkPSJwb3B1cF9oZWFkZXIiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICA8ZGl2IGlkPSJwb3B1cC1jdXN0b20iPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciIgaWQ9InBvcHVwX2Zvb3RlciI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJzZXJ2ZXJfaW5mb3JtYXRpb24iPgogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLXhsIj4KICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KICAgICAgICAgIDxoMyBjbGFzcz0ibW9kYWwtdGl0bGUiPlNlcnZlciBJbmZvcm1hdGlvbjwvaDM+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0bi1jbG9zZSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIHRleHQtYmctZGFyayBtYi0zIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj5TZXJ2ZXIgSW5mb3JtYXRpb248L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InZlcnNpb24iIGNsYXNzPSJmb3JtLWxhYmVsIj5UaHJlYWRmaW4gVmVyc2lvbjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0idmVyc2lvbiIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iYnJhbmNoIiBjbGFzcz0iZm9ybS1sYWJlbCI+VGhyZWFkZmluIEJyYW5jaDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0iYnJhbmNoIiBhcmlhLWRlc2NyaWJlZGJ5PSJiYXNpYy1hZGRvbjMiIHJlYWRvbmx5IGRpc2FibGVkPgogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJlcnJvcnMiIGNsYXNzPSJmb3JtLWxhYmVsIj5FcnJvcnM8L2xhYmVsPgogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9ImVycm9ycyIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0id2FybmluZ3MiIGNsYXNzPSJmb3JtLWxhYmVsIj5XYXJuaW5nczwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0id2FybmluZ3MiIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHkgZGlzYWJsZWQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIHRleHQtYmctZGFyayBtYi0zIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj5TdHJlYW0gSW5mb3JtYXRpb248L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkRWUiIgY2xhc3M9ImZvcm0tbGFiZWwiPkRWUiBJUDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0iRFZSIiBhcmlhLWRlc2NyaWJlZGJ5PSJiYXNpYy1hZGRvbjMiIHJlYWRvbmx5IGRpc2FibGVkPgogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJtM3UtdXJsIiBjbGFzcz0iZm9ybS1sYWJlbCI+TTNVIFVSTCAoU3BlY2lmaWMgZ3JvdXBzOiBbaHR0cDovLy4uLj9ncm91cC10aXRsZT1mb28sYmFyXSk8L2xhYmVsPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJtM3UtdXJsIiBhcmlhLWRlc2NyaWJlZGJ5PSJiYXNpYy1hZGRvbjMiIHJlYWRvbmx5PgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImlucHV0LWdyb3VwLXRleHQgY29weS1idG4iIGRhdGEtY2xpcGJvYXJkLXRhcmdldD0iI20zdS11cmwiIGRhdGEtYnMtdGl0bGU9IkNvcHkgdG8gY2xpcGJvYXJkIiBkYXRhLWJzLXRvZ2dsZT0idG9vbHRpcCIgZGF0YS1icy1wbGFjZW1lbnQ9ImJvdHRvbSI+PGkgY2xhc3M9ImZhciBmYS1jbGlwYm9hcmQiPjwvaT48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InhlcGctdXJsIiBjbGFzcz0iZm9ybS1sYWJlbCI+WE1MVFYgVVJMPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ieGVwZy11cmwiIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHk+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaW5wdXQtZ3JvdXAtdGV4dCBjb3B5LWJ0biIgZGF0YS1jbGlwYm9hcmQtdGFyZ2V0PSIjeGVwZy11cmwiIGRhdGEtYnMtdGl0bGU9IkNvcHkgdG8gY2xpcGJvYXJkIiBkYXRhLWJzLXRvZ2dsZT0idG9vbHRpcCIgZGF0YS1icy1wbGFjZW1lbnQ9ImJvdHRvbSI+PGkgY2xhc3M9ImZhciBmYS1jbGlwYm9hcmQiPjwvaT48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InN0cmVhbXMiIGNsYXNzPSJmb3JtLWxhYmVsIj5GaWx0ZXJlZCBDaGFubmVsczwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ic3RyZWFtcyIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ieGVwZyIgY2xhc3M9ImZvcm0tbGFiZWwiPk1hcHBlZCBDaGFubmVsczwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ieGVwZyIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZXhwYW5kLWxnIHN0aWNreS10b3AgbmF2YmFyLWRhcmsgYmctYmxhY2siPgogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KICAgICAgPGEgY2xhc3M9Im5hdmJhci1icmFuZCIgaHJlZj0iL3dlYiI+CiAgICAgICAgPHNwYW4gaWQ9ImxvZ28iPjwvc3Bhbj4KICAgICAgPC9hPgogICAgICA8YnV0dG9uIGNsYXNzPSJuYXZiYXItdG9nZ2xlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWJzLXRvZ2dsZT0iY29sbGFwc2UiIGRhdGEtYnMtdGFyZ2V0PSIjbmF2YmFyU3VwcG9ydGVkQ29udGVudCIgYXJpYS1jb250cm9scz0ibmF2YmFyU3VwcG9ydGVkQ29udGVudCIgYXJpYS1leHBhbmRlZD0iZmFsc2UiIGFyaWEtbGFiZWw9IlRvZ2dsZSBuYXZpZ2F0aW9uIj4KICAgICAgICA8c3BhbiBjbGFzcz0ibmF2YmFyLXRvZ2dsZXItaWNvbiI+PC9zcGFuPgogICAgICA8L2J1dHRvbj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIiBpZD0ibmF2YmFyU3VwcG9ydGVkQ29udGVudCI+CiAgICAgICAgPHVsIGNsYXNzPSJuYXZiYXItbmF2IG14LWF1dG8gbWItMiBtYi1sZy0wIiBpZD0ibWFpbi1tZW51Ij4KICAgICAgICA8L3VsPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0yIGNvbC1zbS0yIj4KICAgICAgICAgIDxwIGlkPSJwbGF5bGlzdC1jb25uZWN0aW9uLWluZm9ybWF0aW9uIj4KICAgICAgICAgIDwvcD4KICAgICAgICAgIDxwIGlkPSJjbGllbnQtY29ubmVjdGlvbi1pbmZvcm1hdGlvbiI+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHVsIGNsYXNzPSJuYXZiYXItbmF2IG14LWF1dG8gbWItMiBtYi1sZy0wIj4KICAgICAgICAgIDxsaSBjbGFzcz0ibmF2LWxpbmsiIGRhdGEtYnMtdG9nZ2xlPSJtb2RhbCIgZGF0YS1icy10YXJnZXQ9IiNzZXJ2ZXJfaW5mb3JtYXRpb24iPjxpIGNsYXNzPSJmYXMgZmEtaW5mby1jaXJjbGUiPjwvaT4gU2VydmVyIEluZm9ybWF0aW9uPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvbmF2PgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbGV4Ij4KICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIgY29sLXNtLTEyIj4KICAgICAgICAgIDxkaXYgaWQ9ImNvbnRlbnQiIGNsYXNzPSJ0YWJsZS1yZXNwb25zaXZlIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InJvdyIgaWQ9Im15U3RyZWFtc0JveCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTUgY29sLXNtLTEyIHRhYmxlLXJlc3BvbnNpdmUgZmxvYXQtc3RhcnQiPgogICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1kYXJrIHRhYmxlLWJvcmRlcmVkIGNhcHRpb24tdG9wIiBpZD0iYWN0aXZlU3RyZWFtcyI+PC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNSBjb2wtc20tMTIgdGFibGUtcmVzcG9uc2l2ZSBmbG9hdC1lbmQiPgogICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1kYXJrIHRhYmxlLWJvcmRlcmVkIGNhcHRpb24tdG9wIiBpZD0iaW5hY3RpdmVTdHJlYW1zIj48L3RhYmxlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9qcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyIgaW50ZWdyaXR5PSJzaGEzODQtQTNySkQ4NTZLb3dTYjdkd2xaZFlFa08zOUdhZ2k3dklzRjBqclJBb1FtREtLdFFCSFV1TFo5QXNTdjRqRDRYYSIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2NsaXBib2FyZC5qcy8yLjAuMTAvY2xpcGJvYXJkLm1pbi5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL25ldHdvcmtfdHMuanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9tZW51X3RzLmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvc2V0dGluZ3NfdHMuanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9sb2dzX3RzLmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvYmFzZV90cy5qcyI+PC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4=" webUI["html/js/base.js"] = "dmFyIGNvbmZpZyA9IG5ldyBPYmplY3QoKTsKdmFyIG1lbnUgPSBuZXcgT2JqZWN0KCk7CnZhciBzdWJNZW51ID0gbmV3IE9iamVjdCgpOwp2YXIgYWN0aXZlU3RyZWFtcyA9IG5ldyBPYmplY3QoKTsKdmFyIHhFUEcgPSBuZXcgT2JqZWN0KCk7CnZhciB1c2VycyA9IG5ldyBPYmplY3QoKTsKdmFyIGxvZyA9IG5ldyBPYmplY3QoKTsKdmFyIHVuZG8gPSBuZXcgT2JqZWN0KCk7CnZhciB3ZWJTb2NrZXRzID0gdHJ1ZTsKdmFyIGNsb3NlTG9nLCB2ZXJzaW9uLCBhY3RpdmVNZW51Owp2YXIgY29sdW1uVG9Tb3J0ID0gMAoKCmlmICh3aW5kb3cuV2ViU29ja2V0ID09PSB1bmRlZmluZWQpIHsKICBhbGVydCgiWW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgV2ViU29ja2V0cyIpOwogIHdlYlNvY2tldHMgPSBmYWxzZTsKfQoKZnVuY3Rpb24gcGFnZVJlYWR5KCkgewogIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogIGRhdGFbImNtZCJdID0gImdldFNlcnZlckNvbmZpZyI7CiAgVGhyZWFkZmluKGRhdGEpOwogIC8vc2hvd0xvYWRpbmdTY3JlZW4oZmFsc2UpOwoKICB2YXIgcmVzaXplSGFuZGxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm9wZW5TdHJlYW1zIik7CiAgdmFyIGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteVN0cmVhbXNCb3giKTsKICByZXNpemVIYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgaW5pdGlhbGlzZVJlc2l6ZSwgZmFsc2UpOwoKICBmdW5jdGlvbiBpbml0aWFsaXNlUmVzaXplKGUpIHsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCBzdGFydFJlc2l6aW5nLCBmYWxzZSk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHN0b3BSZXNpemluZywgZmFsc2UpOwogIH0KCiAgZnVuY3Rpb24gc3RhcnRSZXNpemluZyhlKSB7CiAgICBib3guc3R5bGUuaGVpZ2h0ID0gKGUuY2xpZW50WSAtIGJveC5vZmZzZXRUb3ApICsgInB4IjsKCiAgICB2YXIgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbFN0cmVhbXMiKTsKICAgIGlmIChlLmNsaWVudFkgPiAxMjApIHsKICAgICAgZWxtLmNsYXNzTmFtZSA9ICJ2aXNpYmxlIjsKICAgIH0gZWxzZSB7CiAgICAgIGVsbS5jbGFzc05hbWUgPSAibm90VmlzaWJsZSI7CiAgICB9CgogICAgY2FsY3VsYXRlV3JhcHBlckhlaWdodCgpOwoKICB9CiAgZnVuY3Rpb24gc3RvcFJlc2l6aW5nKGUpIHsKICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBzdGFydFJlc2l6aW5nLCBmYWxzZSk7CiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHN0b3BSZXNpemluZywgZmFsc2UpOwogICAgY2FsY3VsYXRlV3JhcHBlckhlaWdodCgpOwogIH0KCiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIGZ1bmN0aW9uICgpIHsKICAgIGNhbGN1bGF0ZVdyYXBwZXJIZWlnaHQoKTsKICB9LCB0cnVlKTsKfQoKCmZ1bmN0aW9uIGdldE9iaktleXMob2JqKSB7CiAgdmFyIGtleXMgPSBuZXcgQXJyYXkoKTsKCiAgZm9yICh2YXIgaSBpbiBvYmopIHsKICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaSkpIHsKICAgICAga2V5cy5wdXNoKGkpOwogICAgfQogIH0KCiAgcmV0dXJuIGtleXM7Cn0KCgpmdW5jdGlvbiBjcmVhdGVFbGVtZW50KGl0ZW0pIHsKICAvL2NvbnNvbGUubG9nKGl0ZW0pOwogIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdGVtWyJfZWxlbWVudCJdKTsKICBpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgiX3RleHQiKSkgewogICAgLy9lbGVtZW50LmlubmVySFRNTCA9ICI8cD4iICsgaXRlbVsiX3RleHQiXSArICI8L3A+IjsKICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gaXRlbVsiX3RleHQiXTsKICB9CgogIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhpdGVtKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgIGlmIChrZXlzW2ldLmNoYXJBdCgwKSAhPSAiXyIpIHsKICAgICAgLy9jb25zb2xlLmxvZyhrZXlzW2ldLCBpdGVtW2tleXNbaV1dKTsKICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5c1tpXSwgaXRlbVtrZXlzW2ldXSk7CiAgICB9CiAgfQoKICAvL2NvbnNvbGUubG9nKGVsZW1lbnQpOwogIHJldHVybiBlbGVtZW50Owp9CgpmdW5jdGlvbiBtb2RpZnlPcHRpb24oaWQsIG9wdGlvbnMsIHZhbHVlcykgewogIHZhciBzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CiAgc2VsZWN0LmlubmVySFRNTCA9ICIiOwoKICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHsKCiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk9QVElPTiIpCgogICAgZWxlbWVudC52YWx1ZSA9IHZhbHVlc1tpXTsKICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gb3B0aW9uc1tpXTsKCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CgogIH0KCn0KCgpmdW5jdGlvbiBzdGFydFdlYlNvY2tldCgpIHsKICBpZiAod2ViU29ja2V0cyA9PSBmYWxzZSkgewogICAgcmV0dXJuOwogIH0KCiAgLy93cy5zZW5kKCd7ImNtZCI6ICJnZXRTZXJ2ZXJDb25maWcxIn0nKTsKCn0KCmZ1bmN0aW9uIGNoZWNrRXJyKG9iaikgewogIC8vYWxlcnQob2JqWyJlcnIiXSkKICAvL3NjcmVlbkxvZyhvYmpbImVyciJdLCAiZXJyb3IiKQogIGNvbnNvbGUubG9nKG9iaik7CiAgdmFyIG5ld09iaiA9IG5ldyBPYmplY3QoKTsKICB2YXIgbmV3RXJyID0gbmV3IE9iamVjdCgpOwogIG5ld0Vyclsia2V5Il0gPSAiRXJyb3IiOwogIG5ld0VyclsidmFsdWUiXSA9IG9ialsiZXJyIl07CiAgbmV3RXJyWyJ0eXBlIl0gPSAiZXJyb3IiOwoKICBuZXdPYmpbMF0gPSBuZXdFcnIKICBzaG93TG9nKG5ld09iaik7CiAgcmV0dXJuCn0KCmZ1bmN0aW9uIHNjcmVlbkxvZyhtc2csIG1zZ1R5cGUsIHNob3cpIHsKICByZXR1cm4KICBjbGVhclRpbWVvdXQoY2xvc2VMb2cpCiAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzY3JlZW5Mb2ciKTsKICB2YXIgbmV3TXNnID0gbmV3IE9iamVjdCgpOwoKICBuZXdNc2dbIl9lbGVtZW50Il0gPSAiUCI7CgogIHN3aXRjaCAobXNnVHlwZSkgewogICAgY2FzZSAiZXJyb3IiOiBuZXdNc2dbImNsYXNzIl0gPSAiZXJyb3JNc2ciOyBicmVhazsKICAgIGNhc2UgIndhcm5pbmciOiBuZXdNc2dbImNsYXNzIl0gPSAid2FybmluZ01zZyI7IGJyZWFrOwogICAgLy9kZWZhdWx0OiAgICAgIG5ld01zZ1siY2xhc3MiXSA9ICJpbmZvTXNnIgogIH0KCiAgbmV3TXNnWyJfdGV4dCJdID0gbXNnOwoKICBkaXYuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdNc2cpKTsKCiAgZGl2LnNjcm9sbFRvcCA9IGRpdi5zY3JvbGxIZWlnaHQ7CgogIGlmIChzaG93ID09IGZhbHNlKSB7CiAgICByZXR1cm47CiAgfQoKICBkaXYuY2xhc3NOYW1lID0gIiIKICBjbG9zZUxvZyA9IHNldFRpbWVvdXQoY2xvc2VTY3JlZW5Mb2csIDEwMDAwKTsKfQoKCmZ1bmN0aW9uIGNsb3NlU2NyZWVuTG9nKCkgewogIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2NyZWVuTG9nIik7CiAgZGl2LmNsYXNzTmFtZSA9ICJzY3JlZW5Mb2dIaWRkZW4iCn0KCmZ1bmN0aW9uIHNob3dTY3JlZW5Mb2coKSB7CiAgY2xlYXJUaW1lb3V0KGNsb3NlTG9nKQogIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2NyZWVuTG9nIik7CiAgdmFyIGN1cnJlbnRDbGFzcyA9IGRpdi5jbGFzc05hbWU7CiAgZGl2LmNsYXNzTmFtZSA9ICJzY3JlZW5Mb2dIaWRkZW4iCgogIHN3aXRjaCAoY3VycmVudENsYXNzKSB7CiAgICBjYXNlICJzY3JlZW5Mb2dIaWRkZW4iOiBkaXYuY2xhc3NOYW1lID0gIiI7IGJyZWFrOwogICAgY2FzZSAiIjogZGl2LmNsYXNzTmFtZSA9ICJzY3JlZW5Mb2dIaWRkZW4iOyBicmVhazsKICB9Cn0KCmZ1bmN0aW9uIHNob3dMb2FkaW5nU2NyZWVuKGVsbSkgewogIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZGluZyIpOwogIHN3aXRjaCAoZWxtKSB7CiAgICBjYXNlIHRydWU6IGRpdi5jbGFzc05hbWUgPSAiYmxvY2siOyBicmVhazsKICAgIGNhc2UgZmFsc2U6IGRpdi5jbGFzc05hbWUgPSAibm9uZSI7IGJyZWFrOwoKICAgIC8qCiAgICBjYXNlIHRydWU6IGRpdi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsgYnJlYWs7CiAgICBjYXNlIGZhbHNlOiBkaXYuc3R5bGUuZGlzcGxheSA9ICJub25lIjsgYnJlYWs7CiAgICAqLwogIH0KfQoKZnVuY3Rpb24gY3JlYXRlQ2xpbnRJbmZvKG9iaikgewogIC8vY29uc29sZS5sb2cob2JqKTsKICB2YXIga2V5cyA9IGdldE9iaktleXMob2JqKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrZXlzW2ldKSkgewogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrZXlzW2ldKS5pbm5lckhUTUwgPSBvYmpba2V5c1tpXV07CiAgICB9CiAgfQogIC8vZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNsaWVudEluZm8iKS5jbGFzc05hbWUgPSAidmlzaWJsZSI7Cn0KCmZ1bmN0aW9uIHNob3dFbGVtZW50KGVsbUlELCB0eXBlKSB7CiAgc3dpdGNoICh0eXBlKSB7CiAgICBjYXNlIHRydWU6IGNzc0NsYXNzID0gImJsb2NrIjsgYnJlYWs7CiAgICBjYXNlIGZhbHNlOiBjc3NDbGFzcyA9ICJub25lIjsgYnJlYWs7CiAgfQoKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbG1JRCkuY2xhc3NOYW1lID0gY3NzQ2xhc3M7Cn0KCmZ1bmN0aW9uIHNob3dQb3BVcEVsZW1lbnQoZWxtKSB7CiAgdmFyIGFsbEVsZW1lbnRzID0gbmV3IEFycmF5KCJkZWxldGVVc2VyRGV0YWlsIiwgIm1hcHBpbmctZGV0YWlsIiwgInVzZXItZGV0YWlsIiwgImZpbGUtZGV0YWlsIik7CgogIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsRWxlbWVudHMubGVuZ3RoOyBpKyspIHsKICAgIHNob3dFbGVtZW50KGFsbEVsZW1lbnRzW2ldLCBmYWxzZSkKICB9CgogIHNob3dFbGVtZW50KGVsbSwgdHJ1ZSkKCiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICBzaG93RWxlbWVudCgicG9wdXAiLCB0cnVlKTsKICB9LCAxMCk7Cn0KCi8vIGJvZHkuLi4KCmZ1bmN0aW9uIHNob3dTdHJlYW1zKGZvcmNlKSB7CgogIHZhciBlbG1Cb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlTdHJlYW1zQm94Iik7CiAgdmFyIGVsbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbGxTdHJlYW1zIik7CiAgLy9jb25zb2xlLmxvZyhlbG0pOwogIHNob3cgPSBlbG0uY2xhc3NOYW1lOwoKICBzd2l0Y2ggKGZvcmNlKSB7CiAgICBjYXNlIHRydWU6IHNob3cgPSAibm90VmlzaWJsZSI7IGJyZWFrOwogICAgY2FzZSBmYWxzZTogc2hvdyA9ICJ2aXNpYmxlIjsgYnJlYWs7CiAgfQoKICBzd2l0Y2ggKHNob3cpIHsKICAgIGNhc2UgIm5vdFZpc2libGUiOgogICAgICBlbG0uY2xhc3NOYW1lID0gInZpc2libGUiOwogICAgICBlbG1Cb3guc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgZWxtLmNsYXNzTmFtZSA9ICJub3RWaXNpYmxlIjsKICAgICAgZWxtQm94LnN0eWxlLmhlaWdodCA9ICIyMHB4IjsKICAgICAgYnJlYWs7CiAgfQoKICB2YXIgc2hvdyA9IGVsbS5zdHlsZS5kaXNwbGF5OyB7CiAgICAvL2NvbnNvbGUubG9nKGVsbS5zdHlsZS5kaXNwbGF5KTsKICB9CgogIGNhbGN1bGF0ZVdyYXBwZXJIZWlnaHQoKTsKfQoKZnVuY3Rpb24gVGhyZWFkZmluQmFja3VwKCkgewogIGNvbnNvbGUubG9nKCJUaHJlYWRmaW5CYWNrdXAiKTsKICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICBkYXRhWyJjbWQiXSA9ICJUaHJlYWRmaW5CYWNrdXAiOwoKICBUaHJlYWRmaW4oZGF0YSk7Cn0KCmZ1bmN0aW9uIFRocmVhZGZpblJlc3RvcmUoZWxtKSB7CiAgdmFyIHJlc3RvcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpOwogIHJlc3RvcmUuc2V0QXR0cmlidXRlKCJ0eXBlIiwgImZpbGUiKTsKICByZXN0b3JlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAibm90VmlzaWJsZSIpOwogIHJlc3RvcmUuc2V0QXR0cmlidXRlKCJuYW1lIiwgIiIpOwogIHJlc3RvcmUuaWQgPSAidXBsb2FkIjsKCiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZXN0b3JlKTsKICByZXN0b3JlLmNsaWNrKCk7CgogIHJlc3RvcmUub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIgZmlsZW5hbWUgPSByZXN0b3JlLmZpbGVzWzBdLm5hbWUKICAgIC8vY29uc29sZS5sb2cocmVzdG9yZS5zcmNFbGVtZW50LmZpbGVzWzBdKTsKICAgIHZhciBjaGVjayA9IGNvbmZpcm0oIkZpbGU6ICIgKyBmaWxlbmFtZSArICJcbkFsbCBkYXRhIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aG9zZSBmcm9tIHRoZSBiYWNrdXAuXG5TaG91bGQgdGhlIGZpbGVzIGJlIHJlc3RvcmVkPyIpOwogICAgaWYgKGNoZWNrID09IHRydWUpIHsKICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgIHZhciBmaWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1maWxlXScpLmZpbGVzWzBdOwogICAgICBpZiAoZmlsZSkgewogICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhyZWFkZXIucmVzdWx0KTsKICAgICAgICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgICAgICAgZGF0YVsiY21kIl0gPSAiVGhyZWFkZmluUmVzdG9yZSIKICAgICAgICAgIGRhdGFbImJhc2U2NCJdID0gcmVhZGVyLnJlc3VsdAoKICAgICAgICAgIFRocmVhZGZpbihkYXRhKTsKICAgICAgICAgIHJldHVybgogICAgICAgIH07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWxlcnQoIkZpbGUgY291bGQgbm90IGJlIGxvYWRlZCIpCiAgICAgIH0KICAgIH0KICB9Owp9CgpmdW5jdGlvbiBnZXRCYXNlNjQoZmlsZSkgewogIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICBjb25zb2xlLmxvZyhyZWFkZXIucmVzdWx0KTsKICB9OwogIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24gKGVycm9yKSB7CiAgICBjb25zb2xlLmxvZygnRXJyb3I6ICcsIGVycm9yKTsKICB9Owp9CgpmdW5jdGlvbiBsb2dvdXQoKSB7CiAgZG9jdW1lbnQuY29va2llLnNwbGl0KCc7JykuZm9yRWFjaChmdW5jdGlvbiAoYykgewogICAgZG9jdW1lbnQuY29va2llID0gYy50cmltKCkuc3BsaXQoJz0nKVswXSArICc9OycgKyAnZXhwaXJlcz1UaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAwIFVUQzsnOwogIH0pOwogIGxvY2F0aW9uLnJlbG9hZCgpOwp9CgpmdW5jdGlvbiBnZXRDb29raWUobmFtZSkgewogIHZhciB2YWx1ZSA9ICI7ICIgKyBkb2N1bWVudC5jb29raWU7CiAgdmFyIHBhcnRzID0gdmFsdWUuc3BsaXQoIjsgIiArIG5hbWUgKyAiPSIpOwogIGlmIChwYXJ0cy5sZW5ndGggPT0gMikgcmV0dXJuIHBhcnRzLnBvcCgpLnNwbGl0KCI7Iikuc2hpZnQoKTsKfQoKZnVuY3Rpb24gc2V0Q29va2llKHRva2VuKSB7CiAgLy9jb25zb2xlLmxvZyh0b2tlbik7CiAgZG9jdW1lbnQuY29va2llID0gIlRva2VuPSIgKyB0b2tlbgp9Cgo=" - webUI["html/js/log.js"] = "dmFyIGxvZ0ludGVydmFsCgoKZnVuY3Rpb24gdXBkYXRlTG9nKCkgewogIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogIGRhdGFbImNtZCJdID0gImdldExvZyI7CiAgVGhyZWFkZmluKGRhdGEpOwogIHdyaXRlTG9nSW5EaXYoKTsKICByZXR1cm4KfQoKZnVuY3Rpb24gd3JpdGVMb2dJbkRpdigpIHsKICB2YXIgbG9ncyA9IGxvZ1sibG9nIl07CiAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZXR0aW5ncyIpLmxhc3RDaGlsZC5sYXN0Q2hpbGQ7CiAgZGl2LmlubmVySFRNTCA9ICIiOwoKICB2YXIgbWF4ID0gNTA7CgoKICBmb3IgKHZhciBpID0gMDsgaSA8IGxvZ3MubGVuZ3RoOyBpKyspIHsKICAgIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICAgIG5ld0VudHJ5WyJfZWxlbWVudCJdID0gIlAiOwoKICAgIGlmIChsb2dzW2ldLmluY2x1ZGVzKCJFUlJPUiIpKSB7CiAgICAgIC8vICAgICAgY2FzZSAid2FybmluZ3MiOiAgbXNnVHlwZSA9ICJ3YXJuaW5nTXNnIjsgYnJlYWs7CiAgICAgIG5ld0VudHJ5WyJjbGFzcyJdID0gImVycm9yTXNnIjsKICAgIH0KCiAgICBpZiAobG9nc1tpXS5pbmNsdWRlcygiV0FSTklORyIpKSB7CiAgICAgIC8vICAgICAgY2FzZSAid2FybmluZ3MiOiAgbXNnVHlwZSA9ICJ3YXJuaW5nTXNnIjsgYnJlYWs7CiAgICAgIG5ld0VudHJ5WyJjbGFzcyJdID0gIndhcm5pbmdNc2ciOwogICAgfQoKICAgIG5ld0VudHJ5WyJfdGV4dCJdID0gbG9nc1tpXTsKCiAgICBkaXYuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdFbnRyeSkpOwogIH0KCiAgY2FsY3VsYXRlV3JhcHBlckhlaWdodCgpOwogIHZhciBzY3JvbGxEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm94LXdyYXBwZXIiKTsKICBzY3JvbGxEaXYuc2Nyb2xsVG9wID0gc2Nyb2xsRGl2LnNjcm9sbEhlaWdodDsKfQoKZnVuY3Rpb24gc2hvd0xvZyhvYmopIHsKICAvL2xvZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwodXBkYXRlTG9nLCA1MDAwKTsKCiAgdmFyIGxvZ3MgPSBsb2dbImxvZyJdOwoKICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNldHRpbmdzIik7CgogIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJIUiI7CiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKICAvL2RpdiA9IGRpdi5sYXN0Q2hpbGQ7CgogIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CiAgbmV3RW50cnlbInR5cGUiXSA9ICJidXR0b24iOwogIG5ld0VudHJ5WyJjbGFzcyJdID0gImJ1dHRvbiI7CiAgbmV3RW50cnlbInZhbHVlIl0gPSAiRW1wdHkgTG9nIjsKICBuZXdFbnRyeVsib25jbGljayJdID0gImVtcHR5TG9nKCkiOwogIGRpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CgogIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJjb2RlIjsKICBuZXdFbnRyeVsiX3RleHQiXSA9ICJVcGRhdGUgTG9nOiAiOwogIGRpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CgogIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CiAgbmV3RW50cnlbInR5cGUiXSA9ICJjaGVja2JveCI7CiAgLy9uZXdFbnRyeVsiY2hlY2tlZCJdICAgICA9ICJjaGVja2JveCI7CiAgbmV3RW50cnlbIm9uY2xpY2siXSA9ICJsb2dVcGRhdGVzKHRoaXMpIjsKICBkaXYuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdFbnRyeSkpOwoKICB2YXIgbmV3RW50cnkgPSBuZXcgT2JqZWN0KCk7CiAgbmV3RW50cnlbIl9lbGVtZW50Il0gPSAiSFIiOwogIGRpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CgoKCgoKICB2YXIgbmV3V3JhcHBlciA9IG5ldyBPYmplY3QoKTsKICBuZXdXcmFwcGVyWyJfZWxlbWVudCJdID0gIkRJViI7CiAgbmV3V3JhcHBlclsiaWQiXSA9ICJib3gtd3JhcHBlciI7CiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3V3JhcHBlcikpOwogIGRpdiA9IGRpdi5sYXN0Q2hpbGQ7CgogIHZhciBuZXdQcmUgPSBuZXcgT2JqZWN0KCk7CiAgbmV3UHJlWyJfZWxlbWVudCJdID0gIlBSRSI7CiAgbmV3UHJlWyJpZCJdID0gImxvZ1NjcmVlbiI7CiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3UHJlKSk7CgogIGRpdiA9IGRpdi5sYXN0Q2hpbGQ7CgogIHdyaXRlTG9nSW5EaXYoKQogIHJldHVybgp9CgpmdW5jdGlvbiBlbXB0eUxvZygpIHsKICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICBkYXRhWyJjbWQiXSA9ICJlbXB0eUxvZyI7CiAgVGhyZWFkZmluKGRhdGEpOwogIHJldHVybgp9CgpmdW5jdGlvbiBsb2dVcGRhdGVzKGVsbSkgewogIHN3aXRjaCAoZWxtLmNoZWNrZWQpIHsKICAgIGNhc2UgZmFsc2U6IGNsZWFySW50ZXJ2YWwobG9nSW50ZXJ2YWwpOyBicmVhazsKICAgIGNhc2UgdHJ1ZTogbG9nSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCh1cGRhdGVMb2csIDUwMDApOyBicmVhazsKCiAgfQp9" - webUI["html/js/settings_ts.js"] = "Y2xhc3MgU2V0dGluZ3NDYXRlZ29yeSB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLkRvY3VtZW50SUQgPSAiY29udGVudF9zZXR0aW5ncyI7CiAgICB9CiAgICBjcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHZhbHVlKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJINCIpOwogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVIUigpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkhSIik7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVTZXR0aW5ncyhzZXR0aW5nc0tleSkgewogICAgICAgIHZhciBzZXR0aW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICB2YXIgY29udGVudCA9IG5ldyBQb3B1cENvbnRlbnQoKTsKICAgICAgICB2YXIgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVtzZXR0aW5nc0tleV07CiAgICAgICAgc3dpdGNoIChzZXR0aW5nc0tleSkgewogICAgICAgICAgICAvLyBUZXh0ZWluZ2FiZW4KICAgICAgICAgICAgY2FzZSAidXBkYXRlIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy51cGRhdGUudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInVwZGF0ZSIsIGRhdGEudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLnVwZGF0ZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYmFja3VwLnBhdGgiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmJhY2t1cFBhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImJhY2t1cC5wYXRoIiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLmJhY2t1cFBhdGgucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRlbXAucGF0aCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudGVtcFBhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInRlbXAucGF0aCIsIGRhdGEpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy50bXBQYXRoLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VyLmFnZW50IjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy51c2VyQWdlbnQudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInVzZXIuYWdlbnQiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MudXNlckFnZW50LnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJidWZmZXIudGltZW91dCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuYnVmZmVyVGltZW91dC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAiYnVmZmVyLnRpbWVvdXQiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MuYnVmZmVyVGltZW91dC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmZtcGVnLnBhdGgiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmZmbXBlZ1BhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImZmbXBlZy5wYXRoIiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLmZmbXBlZ1BhdGgucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZmbXBlZy5vcHRpb25zIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5mZm1wZWdPcHRpb25zLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsICJmZm1wZWcub3B0aW9ucyIsIGRhdGEpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5mZm1wZWdPcHRpb25zLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmZm1wZWcuZm9yY2VIdHRwIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5mZm1wZWdGb3JjZUh0dHAudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInZsYy5wYXRoIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy52bGNQYXRoLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsICJ2bGMucGF0aCIsIGRhdGEpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy52bGNQYXRoLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ2bGMub3B0aW9ucyI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudmxjT3B0aW9ucy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAidmxjLm9wdGlvbnMiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MudmxjT3B0aW9ucy5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgLy8gQ2hlY2tib3hlbgogICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi53ZWIiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uV0VCLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5wbXMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uUE1TLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5tM3UiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uTTNVLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi54bWwiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uWE1MLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5hcGkiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uQVBJLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmaWxlcy51cGRhdGUiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmZpbGVzVXBkYXRlLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJjYWNoZS5pbWFnZXMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmNhY2hlSW1hZ2VzLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4ZXBnLnJlcGxhY2UubWlzc2luZy5pbWFnZXMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLnJlcGxhY2VFbXB0eUltYWdlcy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAieGVwZy5yZXBsYWNlLmNoYW5uZWwudGl0bGUiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLnJlcGxhY2VDaGFubmVsVGl0bGUudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInN0b3JlQnVmZmVySW5SQU0iOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLnN0b3JlQnVmZmVySW5SQU0udGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZvcmNlSHR0cHMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmZvcmNlSHR0cHMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImh0dHBzUG9ydCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuaHR0cHNQb3J0LnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsICJodHRwc1BvcnQiLCBkYXRhLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5odHRwc1BvcnQucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImh0dHBzVGhyZWFkZmluRG9tYWluIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5odHRwc1RocmVhZGZpbkRvbWFpbi50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAiaHR0cHNUaHJlYWRmaW5Eb21haW4iLCBkYXRhLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5odHRwc1RocmVhZGZpbkRvbWFpbi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYmluZElwQWRkcmVzcyI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuYmluZElwQWRkcmVzcy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAiYmluZElwQWRkcmVzcyIsIGRhdGEudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLmJpbmRJcEFkZHJlc3MucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImh0dHBUaHJlYWRmaW5Eb21haW4iOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmh0dHBUaHJlYWRmaW5Eb21haW4udGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImh0dHBUaHJlYWRmaW5Eb21haW4iLCBkYXRhLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5odHRwVGhyZWFkZmluRG9tYWluLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlbmFibGVOb25Bc2NpaSI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuZW5hYmxlTm9uQXNjaWkudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVwZ0NhdGVnb3JpZXMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmVwZ0NhdGVnb3JpZXMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImVwZ0NhdGVnb3JpZXMiLCBkYXRhLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdDYXRlZ29yaWVzQ29sb3JzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzQ29sb3JzLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsICJlcGdDYXRlZ29yaWVzQ29sb3JzIiwgZGF0YS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MuZXBnQ2F0ZWdvcmllc0NvbG9ycy5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiVGhyZWFkZmluQXV0b1VwZGF0ZSI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuVGhyZWFkZmluQXV0b1VwZGF0ZS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAic3NkcCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3Muc3NkcC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZHVtbXkiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmR1bW15LnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJkdW1teUNoYW5uZWwiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmR1bW15Q2hhbm5lbC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gWyJQUFYiLCAiMzAgTWludXRlcyIsICI2MCBNaW51dGVzIiwgIjkwIE1pbnV0ZXMiLCAiMTIwIE1pbnV0ZXMiLCAiMTgwIE1pbnV0ZXMiLCAiMjQwIE1pbnV0ZXMiLCAiMzYwIE1pbnV0ZXMiXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbIlBQViIsICIzMF9NaW51dGVzIiwgIjYwX01pbnV0ZXMiLCAiOTBfTWludXRlcyIsICIxMjBfTWludXRlcyIsICIxODBfTWludXRlcyIsICIyNDBfTWludXRlcyIsICIzNjBfTWludXRlcyJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YSwgc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaWdub3JlRmlsdGVycyI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuaWdub3JlRmlsdGVycy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXBpIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hcGkudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIC8vIFNlbGVjdAogICAgICAgICAgICBjYXNlICJ0dW5lciI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudHVuZXIudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMTAwOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0LnB1c2goaSk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goaSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhLCBzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChzZWxlY3QpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmVwZ1NvdXJjZS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gWyJQTVMiLCAiWEVQRyJdOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiUE1TIiwgIlhFUEciXTsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGEsIHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJhY2t1cC5rZWVwIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5iYWNrdXBLZWVwLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIjUiLCAiMTAiLCAiMjAiLCAiMzAiLCAiNDAiLCAiNTAiXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbIjUiLCAiMTAiLCAiMjAiLCAiMzAiLCAiNDAiLCAiNTAiXTsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGEsIHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJ1ZmZlci5zaXplLmtiIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5idWZmZXJTaXplLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIjAuNSBNQiIsICIxIE1CIiwgIjIgTUIiLCAiMyBNQiIsICI0IE1CIiwgIjUgTUIiLCAiNiBNQiIsICI3IE1CIiwgIjggTUIiXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbIjUxMiIsICIxMDI0IiwgIjIwNDgiLCAiMzA3MiIsICI0MDk2IiwgIjUxMjAiLCAiNjE0NCIsICI3MTY4IiwgIjgxOTIiXTsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGEsIHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJ1ZmZlciI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbInt7LnNldHRpbmdzLnN0cmVhbUJ1ZmZlcmluZy5pbmZvX2ZhbHNlfX0iLCAiRkZtcGVnOiAoe3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLmluZm9fZmZtcGVnfX0pIiwgIlZMQzogKHt7LnNldHRpbmdzLnN0cmVhbUJ1ZmZlcmluZy5pbmZvX3ZsY319KSJdOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiLSIsICJmZm1wZWciLCAidmxjIl07CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhLCBzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChzZWxlY3QpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1ZHB4eSI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudWRweHkudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInVkcHh5IiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLnVkcHh5LnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2V0dGluZzsKICAgIH0KICAgIGNyZWF0ZURlc2NyaXB0aW9uKHNldHRpbmdzS2V5KSB7CiAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICB2YXIgdGV4dDsKICAgICAgICBzd2l0Y2ggKHNldHRpbmdzS2V5KSB7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLndlYiI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uV0VCLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLm0zdSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uTTNVLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLnBtcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uUE1TLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLnhtbCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uWE1MLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLmFwaSI6CiAgICAgICAgICAgICAgICBpZiAoU0VSVkVSWyJzZXR0aW5ncyJdWyJhdXRoZW50aWNhdGlvbi53ZWIiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbkFQSS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJUaHJlYWRmaW5BdXRvVXBkYXRlIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuVGhyZWFkZmluQXV0b1VwZGF0ZS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJiYWNrdXAua2VlcCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmJhY2t1cEtlZXAuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYmFja3VwLnBhdGgiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5iYWNrdXBQYXRoLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRlbXAucGF0aCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnRlbXBQYXRoLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJ1ZmZlciI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnN0cmVhbUJ1ZmZlcmluZy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJidWZmZXIuc2l6ZS5rYiI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmJ1ZmZlclNpemUuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAic3RvcmVCdWZmZXJJblJBTSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnN0b3JlQnVmZmVySW5SQU0uZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZm9yY2VIdHRwcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmZvcmNlSHR0cHMuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaHR0cHNQb3J0IjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuaHR0cHNQb3J0LmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImh0dHBzVGhyZWFkZmluRG9tYWluIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuaHR0cHNUaHJlYWRmaW5Eb21haW4uZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYmluZElwQWRkcmVzcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmJpbmRJcEFkZHJlc3MuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaHR0cFRocmVhZGZpbkRvbWFpbiI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmh0dHBUaHJlYWRmaW5Eb21haW4uZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZW5hYmxlTm9uQXNjaWkiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5lbmFibGVOb25Bc2NpaS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdDYXRlZ29yaWVzIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuZXBnQ2F0ZWdvcmllcy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdDYXRlZ29yaWVzQ29sb3JzIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuZXBnQ2F0ZWdvcmllc0NvbG9ycy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJidWZmZXIudGltZW91dCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmJ1ZmZlclRpbWVvdXQuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidXNlci5hZ2VudCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnVzZXJBZ2VudC5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmZm1wZWcucGF0aCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmZmbXBlZ1BhdGguZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmZtcGVnLm9wdGlvbnMiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5mZm1wZWdPcHRpb25zLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZmbXBlZy5mb3JjZUh0dHAiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5mZm1wZWdGb3JjZUh0dHAuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidmxjLnBhdGgiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy52bGNQYXRoLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInZsYy5vcHRpb25zIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MudmxjT3B0aW9ucy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5lcGdTb3VyY2UuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy50dW5lci5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1cGRhdGUiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy51cGRhdGUuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXBpIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYXBpLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInNzZHAiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5zc2RwLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZpbGVzLnVwZGF0ZSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmZpbGVzVXBkYXRlLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImNhY2hlLmltYWdlcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmNhY2hlSW1hZ2VzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInhlcGcucmVwbGFjZS5taXNzaW5nLmltYWdlcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnJlcGxhY2VFbXB0eUltYWdlcy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4ZXBnLnJlcGxhY2UuY2hhbm5lbC50aXRsZSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnJlcGxhY2VDaGFubmVsVGl0bGUuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidWRweHkiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy51ZHB4eS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGV4dCA9ICIiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAiIjsKICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgdmFyIHByZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlBSRSIpOwogICAgICAgIHByZS5pbm5lckhUTUwgPSB0ZXh0OwogICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQocHJlKTsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgIH0KfQpjbGFzcyBTZXR0aW5nc0NhdGVnb3J5SXRlbSBleHRlbmRzIFNldHRpbmdzQ2F0ZWdvcnkgewogICAgY29uc3RydWN0b3IoaGVhZGxpbmUsIHNldHRpbmdzS2V5cykgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5oZWFkbGluZSA9IGhlYWRsaW5lOwogICAgICAgIHRoaXMuc2V0dGluZ3NLZXlzID0gc2V0dGluZ3NLZXlzOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnkoKSB7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gdGhpcy5jcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHRoaXMuaGVhZGxpbmUpOwogICAgICAgIHZhciBzZXR0aW5nc0tleXMgPSB0aGlzLnNldHRpbmdzS2V5czsKICAgICAgICB2YXIgZG9jID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5Eb2N1bWVudElEKTsKICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaGVhZGxpbmUpOwogICAgICAgIC8vIFRhYmVsbGUgZsO8ciBkaWUgS2F0ZWdvcmllIGVyc3RlbGxlbgogICAgICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgdmFyIGtleXMgPSBzZXR0aW5nc0tleXMuc3BsaXQoIiwiKTsKICAgICAgICBrZXlzLmZvckVhY2goc2V0dGluZ3NLZXkgPT4gewogICAgICAgICAgICBzd2l0Y2ggKHNldHRpbmdzS2V5KSB7CiAgICAgICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5wbXMiOgogICAgICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ubTN1IjoKICAgICAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLnhtbCI6CiAgICAgICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5hcGkiOgogICAgICAgICAgICAgICAgICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImF1dGhlbnRpY2F0aW9uLndlYiJdID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLmNyZWF0ZVNldHRpbmdzKHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSB0aGlzLmNyZWF0ZURlc2NyaXB0aW9uKHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChpdGVtKTsKICAgICAgICAgICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChkZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBkb2MuYXBwZW5kQ2hpbGQodGFibGUpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUhSKCkpOwogICAgfQp9CmZ1bmN0aW9uIHNob3dTZXR0aW5ncygpIHsKICAgIGNvbnNvbGUubG9nKCJTRVRUSU5HUyIpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXR0aW5nc0NhdGVnb3J5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgc2V0dGluZ3NDYXRlZ29yeVtpXS5jcmVhdGVDYXRlZ29yeSgpOwogICAgfQp9CmZ1bmN0aW9uIHNhdmVTZXR0aW5ncygpIHsKICAgIGNvbnNvbGUubG9nKCJTYXZlIFNldHRpbmdzIik7CiAgICB2YXIgY21kID0gInNhdmVTZXR0aW5ncyI7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnRfc2V0dGluZ3MiKTsKICAgIHZhciBzZXR0aW5ncyA9IGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJjaGFuZ2VkIik7CiAgICB2YXIgbmV3U2V0dGluZ3MgPSBuZXcgT2JqZWN0KCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNldHRpbmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgdmFyIHZhbHVlOwogICAgICAgIHN3aXRjaCAoc2V0dGluZ3NbaV0udGFnTmFtZSkgewogICAgICAgICAgICBjYXNlICJJTlBVVCI6CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNldHRpbmdzW2ldLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICJjaGVja2JveCI6CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzZXR0aW5nc1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzW2ldLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NldHRpbmdzW25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgInRleHQiOgogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gc2V0dGluZ3NbaV0ubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZXR0aW5nc1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ1cGRhdGUiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoIiwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZTsgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJidWZmZXIudGltZW91dCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJTRUxFQ1QiOgogICAgICAgICAgICAgICAgbmFtZSA9IHNldHRpbmdzW2ldLm5hbWU7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgLy8gV2VubiBkZXIgV2VydCBlaW5lIFphaGwgaXN0LCB3aXJkIGRpZXNlciBhbHMgWmFobCBnZXNwZWljaGVydAogICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIG5ld1NldHRpbmdzW25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHBhcnNlSW50KHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgZGF0YVsic2V0dGluZ3MiXSA9IG5ld1NldHRpbmdzOwogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwp9Cg==" - webUI["html/lang/en.json"] = "ewogICJtYWluTWVudSI6IHsKICAgICJpdGVtIjogewogICAgICAicGxheWxpc3QiOiAiUGxheWxpc3QiLAogICAgICAicG1zSUQiOiAiUE1TIElEIiwKICAgICAgImZpbHRlciI6ICJGaWx0ZXIiLAogICAgICAieG1sdHYiOiAiWE1MVFYiLAogICAgICAibWFwcGluZyI6ICJNYXBwaW5nIiwKICAgICAgInVzZXJzIjogIlVzZXJzIiwKICAgICAgInNldHRpbmdzIjogIlNldHRpbmdzIiwKICAgICAgImxvZyI6ICJMb2ciLAogICAgICAibG9nb3V0IjogIkxvZ291dCIKICAgIH0sCiAgICAiaGVhZGxpbmUiOiB7CiAgICAgICJwbGF5bGlzdCI6ICJMb2NhbCBvciByZW1vdGUgcGxheWxpc3RzIiwKICAgICAgImZpbHRlciI6ICJGaWx0ZXIgcGxheWxpc3QiLAogICAgICAieG1sdHYiOiAiTG9jYWwgb3IgcmVtb3RlIFhNTFRWIGZpbGVzIiwKICAgICAgIm1hcHBpbmciOiAiTWFwIHBsYXlsaXN0IGNoYW5uZWxzIHRvIEVQRyBjaGFubmVscyIsCiAgICAgICJ1c2VycyI6ICJVc2VyIG1hbmFnZW1lbnQiLAogICAgICAic2V0dGluZ3MiOiAiU2V0dGluZ3MiLAogICAgICAibG9nIjogIkxvZyIsCiAgICAgICJsb2dvdXQiOiAiTG9nb3V0IgogICAgfQogIH0sCiAgImNvbmZpcm0iOiB7CiAgICAicmVzdG9yZSI6ICJBbGwgZGF0YSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhvc2UgZnJvbSB0aGUgYmFja3VwLiBTaG91bGQgdGhlIGZpbGVzIGJlIHJlc3RvcmVkPyIKICB9LAogICJhbGVydCI6IHsKICAgICJmaWxlTG9hZGluZ0Vycm9yIjogIkZpbGUgY291bGRuJ3QgYmUgbG9hZGVkIiwKICAgICJpbnZhbGlkQ2hhbm5lbE51bWJlciI6ICJJbnZhbGlkIGNoYW5uZWwgbnVtYmVyIiwKICAgICJtaXNzaW5nSW5wdXQiOiAiTWlzc2luZyBpbnB1dCIKICB9LAogICJidXR0b24iOiB7CiAgICAiYmFjayI6ICJCYWNrIiwKICAgICJiYWNrdXAiOiAiQmFja3VwIiwKICAgICJidWxrRWRpdCI6ICJCdWxrIEVkaXQiLAogICAgImNhbmNlbCI6ICJDYW5jZWwiLAogICAgImRlbGV0ZSI6ICJEZWxldGUiLAogICAgImRvbmUiOiAiRG9uZSIsCiAgICAibG9naW4iOiAiTG9naW4iLAogICAgIm5ldyI6ICJOZXciLAogICAgIm5leHQiOiAiTmV4dCIsCiAgICAicmVzdG9yZSI6ICJSZXN0b3JlIiwKICAgICJzYXZlIjogIlNhdmUiLAogICAgInNlYXJjaCI6ICJTZWFyY2giLAogICAgInVwZGF0ZSI6ICJVcGRhdGUiLAogICAgImNyYWV0ZUFjY291bnQiOiAiQ3JlYXRlIEFjY291bnQiLAogICAgInJlc2V0TG9ncyI6ICJSZXNldCBMb2dzIiwKICAgICJ1cGxvYWRMb2dvIjogIlVwbG9hZCBMb2dvIiwKICAgICJwcm9iZUNoYW5uZWwiOiAiUHJvYmUgQ2hhbm5lbCIsCiAgICAic29ydENoYW5uZWxzQWxwaGEiOiAiU29ydCBDaGFubmVscyBBbHBoYWJldGljYWxseSIsCiAgICAic29ydENoYW5uZWxOdW1iZXJzIjogIlNvcnQgQ2hhbm5lbHMiCiAgfSwKICAiZmlsdGVyIjogewogICAgInRhYmxlIjogewogICAgICAibmFtZSI6ICJGaWx0ZXIgTmFtZSIsCiAgICAgICJ0eXBlIjogIkZpbHRlciBUeXBlIiwKICAgICAgImZpbHRlciI6ICJGaWx0ZXIiCiAgICB9LAogICAgImN1c3RvbSI6ICJDdXN0b20iLAogICAgImdyb3VwIjogIkdyb3VwIiwKICAgICJuYW1lIjogewogICAgICAidGl0bGUiOiAiRmlsdGVyIE5hbWUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsdGVyIG5hbWUiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJzdGFydGluZ251bWJlciI6IHsKICAgICAgInRpdGxlIjogIkZpbHRlciBTdGFydGluZyBOdW1iZXIiLAogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsdGVyIFN0YXJ0aW5nIE51bWJlciIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJTdGFydGluZyBDaGFubmVsIE51bWJlciB0byB1c2UgZm9yIHRoaXMgR3JvdXAgRmlsdGVyIChEZWZhdWx0IGlzIDEwMDApIgogICAgfSwKICAgICJjYXRlZ29yeSI6IHsKICAgICAgInRpdGxlIjogIkZpbHRlciBDYXRlZ29yeSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWx0ZXIgQ2F0ZWdvcnkiLAogICAgICAiZGVzY3JpcHRpb24iOiAiRmlsdGVyIENhdGVnb3J5IHNldHMgYWxsIGNoYW5uZWxzIGluIHRoZSBmaWx0ZXIgdG8gYSBzcGVjaWZpYyBjYXRlZ29yeSAobmV3cywgc3BvcnRzLCBldGMpIgogICAgfSwKICAgICJkZXNjcmlwdGlvbiI6IHsKICAgICAgInRpdGxlIjogIkRlc2NyaXB0aW9uIiwKICAgICAgInBsYWNlaG9sZGVyIjogIkRlc2NyaXB0aW9uIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAidHlwZSI6IHsKICAgICAgInRpdGxlIjogIlR5cGUiLAogICAgICAiZ3JvdXBUaXRsZSI6ICJHcm91cCBUaXRsZSIsCiAgICAgICJjdXN0b21GaWx0ZXIiOiAiQ3VzdG9tIEZpbHRlciIKICAgIH0sCiAgICAibGl2ZUV2ZW50IjogewogICAgICAidGl0bGUiOiAiTGl2ZSBFdmVudCBHcm91cCIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJjYXNlU2Vuc2l0aXZlIjogewogICAgICAidGl0bGUiOiAiQ2FzZSBTZW5zaXRpdmUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAiZmlsdGVyUnVsZSI6IHsKICAgICAgInRpdGxlIjogIkZpbHRlciBSdWxlIiwKICAgICAgInBsYWNlaG9sZGVyIjogIlNwb3J0IHtIRH0gIXtFUyxJVH0iLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJmaWx0ZXJHcm91cCI6IHsKICAgICAgInRpdGxlIjogIkdyb3VwIFRpdGxlIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJTZWxlY3QgYSBNM1UgZ3JvdXAuIChDb3VudGVyKTxicj5DaGFuZ2luZyB0aGUgZ3JvdXAgdGl0bGUgaW4gdGhlIE0zVSBpbnZhbGlkYXRlcyB0aGUgZmlsdGVyLiIKICAgIH0sCiAgICAiaW5jbHVkZSI6IHsKICAgICAgInRpdGxlIjogIkluY2x1ZGUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiRkhELFVIRCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJDaGFubmVsIG5hbWUgbXVzdCBpbmNsdWRlLjxicj4oQ29tbWEgc2VwYXJhdGVkKSBDb21tYSBtZWFucyBvciIKICAgIH0sCiAgICAiZXhjbHVkZSI6IHsKICAgICAgInRpdGxlIjogIkV4Y2x1ZGUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiRVMsSVQiLAogICAgICAiZGVzY3JpcHRpb24iOiAiQ2hhbm5lbCBuYW1lIG11c3Qgbm90IGNvbnRhaW4uPGJyPihDb21tYSBzZXBhcmF0ZWQpIENvbW1hIG1lYW5zIG9yIgogICAgfQogIH0sCiAgInBsYXlsaXN0IjogewogICAgInRhYmxlIjogewogICAgICAicGxheWxpc3QiOiAiUGxheWxpc3QiLAogICAgICAiYnVmZmVyIjogIkJ1ZmZlciIsCiAgICAgICJ0dW5lciI6ICJUdW5lciIsCiAgICAgICJsYXN0VXBkYXRlIjogIkxhc3QgVXBkYXRlIiwKICAgICAgImF2YWlsYWJpbGl0eSI6ICJBdmFpbGFiaWxpdHkiLAogICAgICAidHlwZSI6ICJUeXBlIiwKICAgICAgInN0cmVhbXMiOiAiU3RyZWFtcyIsCiAgICAgICJncm91cFRpdGxlIjogImdyb3VwLXRpdGxlIiwKICAgICAgInR2Z0lEIjogInR2Zy1pZCIsCiAgICAgICJ1bmlxdWVJRCI6ICJVbmlxdWUgSUQiCiAgICB9LAogICAgInBsYXlsaXN0VHlwZSI6IHsKICAgICAgInRpdGxlIjogIlBsYXlsaXN0IHR5cGUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAidHlwZSI6IHsKICAgICAgInRpdGxlIjogIlR5cGUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAibmFtZSI6IHsKICAgICAgInRpdGxlIjogIk5hbWUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiUGxheWxpc3QgbmFtZSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImRlc2NyaXB0aW9uIjogewogICAgICAidGl0bGUiOiAiRGVzY3JpcHRpb24iLAogICAgICAicGxhY2Vob2xkZXIiOiAiRGVzY3JpcHRpb24iLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJmaWxlTTNVIjogewogICAgICAidGl0bGUiOiAiTTNVIEZpbGUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsZSBwYXRoIG9yIFVSTCBvZiB0aGUgTTNVIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAiZmlsZUhESFIiOiB7CiAgICAgICJ0aXRsZSI6ICJIREhvbWVSdW4gSVAiLAogICAgICAicGxhY2Vob2xkZXIiOiAiSVAgYWRkcmVzcyBhbmQgcG9ydCAoMTkyLjE2OC4xLjEwOjUwMDQpIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAiYnVmZmVyIjogewogICAgICAidGl0bGUiOiAiQnVmZmVyIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJCdWZmZXIgZm9yIHRoZSBzdHJlYW1zLiA8YnI+T25seSBhdmFpbGFibGUgd2l0aCBhY3RpdmF0ZWQgdHVuZXIuIgogICAgfSwKICAgICJ0dW5lciI6IHsKICAgICAgInRpdGxlIjogIlR1bmVyIC8gU3RyZWFtcyIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIHBhcmFsbGVsIGNvbm5lY3Rpb25zIHRoYXQgY2FuIGJlIGVzdGFibGlzaGVkIHRvIHRoZSBwcm92aWRlci4gPGJyPk9ubHkgYXZhaWxhYmxlIHdpdGggYWN0aXZhdGVkIGJ1ZmZlci48YnI+TmV3IHNldHRpbmdzIHdpbGwgb25seSBiZSBhcHBsaWVkIGFmdGVyIHF1aXR0aW5nIGFsbCBzdHJlYW1zLiIKICAgIH0sCiAgICAiaHR0cF9wcm94eV9pcCI6IHsKICAgICAgInRpdGxlIjogIkhUVFAgUHJveHkgSVAiLAogICAgICAicGxhY2Vob2xkZXIiOiAiMTkyLjE2OC4wLjIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiSVAgYWRkcmVzcyB0byBiZSB1c2VkIGJ5IEhUVFAgUHJveHkiCiAgICB9LAogICAgImh0dHBfcHJveHlfcG9ydCI6IHsKICAgICAgInRpdGxlIjogIkhUVFAgUHJveHkgUG9ydCIsCiAgICAgICJwbGFjZWhvbGRlciI6ICI4ODg4IiwKICAgICAgImRlc2NyaXB0aW9uIjogIlBvcnQgdG8gYmUgdXNlZCBieSBIVFRQIFByb3h5IgogICAgfQogIH0sCiAgInhtbHR2IjogewogICAgInRhYmxlIjogewogICAgICAiZ3VpZGUiOiAiR3VpZGUiLAogICAgICAibGFzdFVwZGF0ZSI6ICJMYXN0IFVwZGF0ZSIsCiAgICAgICJhdmFpbGFiaWxpdHkiOiAiQXZhaWxhYmlsaXR5IiwKICAgICAgImNoYW5uZWxzIjogIkNoYW5uZWxzIiwKICAgICAgInByb2dyYW1zIjogIlByb2dyYW1zIgogICAgfSwKICAgICJuYW1lIjogewogICAgICAidGl0bGUiOiAiTmFtZSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJHdWlkZSBuYW1lIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAiZGVzY3JpcHRpb24iOiB7CiAgICAgICJ0aXRsZSI6ICJEZXNjcmlwdGlvbiIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJEZXNjcmlwdGlvbiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImZpbGVYTUxUViI6IHsKICAgICAgInRpdGxlIjogIlhNTFRWIEZpbGUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsZSBwYXRoIG9yIFVSTCBvZiB0aGUgWE1MVFYiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJodHRwX3Byb3h5X2lwIjogewogICAgICAidGl0bGUiOiAiSFRUUCBQcm94eSBJUCIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIxOTIuMTY4LjAuMiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJJUCBhZGRyZXNzIHRvIGJlIHVzZWQgYnkgSFRUUCBQcm94eSIKICAgIH0sCiAgICAiaHR0cF9wcm94eV9wb3J0IjogewogICAgICAidGl0bGUiOiAiSFRUUCBQcm94eSBQb3J0IiwKICAgICAgInBsYWNlaG9sZGVyIjogIjg4ODgiLAogICAgICAiZGVzY3JpcHRpb24iOiAiUG9ydCB0byBiZSB1c2VkIGJ5IEhUVFAgUHJveHkiCiAgICB9CiAgfSwKICAibWFwcGluZyI6IHsKICAgICJ0YWJsZSI6IHsKICAgICAgImNoTm8iOiAiQ2guIE5vLiIsCiAgICAgICJsb2dvIjogIkxvZ28iLAogICAgICAiY2hhbm5lbE5hbWUiOiAiQ2hhbm5lbCBOYW1lIiwKICAgICAgInBsYXlsaXN0IjogIlBsYXlsaXN0IiwKICAgICAgImdyb3VwVGl0bGUiOiAiR3JvdXAgVGl0bGUiLAogICAgICAieG1sdHZGaWxlIjogIlhNTFRWIEZpbGUiLAogICAgICAieG1sdHZJRCI6ICJYTUxUViBJRCIKICAgIH0sCiAgICAiYWN0aXZlIjogewogICAgICAidGl0bGUiOiAiQWN0aXZlIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImNoYW5uZWxOYW1lIjogewogICAgICAidGl0bGUiOiAiQ2hhbm5lbCBOYW1lIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImNoYW5uZWxHcm91cFN0YXJ0IjogewogICAgICAidGl0bGUiOiAiQ2hhbm5lbCBHcm91cCBTdGFydCIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJzb3J0Q2hhbm5lbHNBbHBoYSI6IHsKICAgICAgInRpdGxlIjogIlNvcnQgQWxwaGFiZXRpY2FsbHkiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAic29ydENoYW5uZWxzIjogewogICAgICAidGl0bGUiOiAiU29ydCBDaGFubmVscyIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJkZXNjcmlwdGlvbiI6IHsKICAgICAgInRpdGxlIjogIkNoYW5uZWwgRGVzY3JpcHRpb24iLAogICAgICAicGxhY2Vob2xkZXIiOiAiVXNlZCBieSB0aGUgRHVtbXkgYXMgYW4gWE1MIGRlc2NyaXB0aW9uIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAidXBkYXRlQ2hhbm5lbE5hbWUiOiB7CiAgICAgICJ0aXRsZSI6ICJVcGRhdGUgQ2hhbm5lbCBOYW1lIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImNoYW5uZWxMb2dvIjogewogICAgICAidGl0bGUiOiAiTG9nbyBVUkwiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAidXBkYXRlQ2hhbm5lbExvZ28iOiB7CiAgICAgICJ0aXRsZSI6ICJVcGRhdGUgQ2hhbm5lbCBMb2dvIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImVwZ0NhdGVnb3J5IjogewogICAgICAidGl0bGUiOiAiRVBHIENhdGVnb3J5IiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgIm0zdUdyb3VwVGl0bGUiOiB7CiAgICAgICJ0aXRsZSI6ICJHcm91cCBUaXRsZSAodGhyZWFkZmluLm0zdSkiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAieG1sdHZGaWxlIjogewogICAgICAidGl0bGUiOiAiWE1MVFYgRmlsZSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJ4bWx0dkNoYW5uZWwiOiB7CiAgICAgICJ0aXRsZSI6ICJYTUxUViBDaGFubmVsIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgInBwdmV4dHJhIjogewogICAgICAidGl0bGUiOiAiUFBWIEV4dHJhIFRpdGxlIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGlzIHdpbGwgYWRkIGN1c3RvbSB0ZXh0IHRvIHRoZSBQcm9ncmFtbWUgZGF0YSIKICAgIH0sCiAgICAiYmFja3VwQ2hhbm5lbDEiOiB7CiAgICAgICJ0aXRsZSI6ICJCYWNrdXAgQ2hhbm5lbCAxIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImJhY2t1cENoYW5uZWwyIjogewogICAgICAidGl0bGUiOiAiQmFja3VwIENoYW5uZWwgMiIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJiYWNrdXBDaGFubmVsMyI6IHsKICAgICAgInRpdGxlIjogIkJhY2t1cCBDaGFubmVsIDMiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAiaGlkZUNoYW5uZWwiOiB7CiAgICAgICJ0aXRsZSI6ICJIaWRlIEJhY2t1cCBDaGFubmVsIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgInByb2JlRGV0YWlscyI6IHsKICAgICAgInRpdGxlIjogIlByb2JlIERldGFpbHMiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0KICB9LAogICJ1c2VycyI6IHsKICAgICJ0YWJsZSI6IHsKICAgICAgInVzZXJuYW1lIjogIlVzZXJuYW1lIiwKICAgICAgInBhc3N3b3JkIjogIlBhc3N3b3JkIiwKICAgICAgIndlYiI6ICJXRUIiLAogICAgICAicG1zIjogIlBNUyIsCiAgICAgICJtM3UiOiAiTTNVIiwKICAgICAgInhtbCI6ICJYTUwiLAogICAgICAiYXBpIjogIkFQSSIKICAgIH0sCiAgICAidXNlcm5hbWUiOiB7CiAgICAgICJ0aXRsZSI6ICJVc2VybmFtZSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJVc2VybmFtZSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgInBhc3N3b3JkIjogewogICAgICAidGl0bGUiOiAiUGFzc3dvcmQiLAogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJjb25maXJtIjogewogICAgICAidGl0bGUiOiAiQ29uZmlybSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJQYXNzd29yZCBjb25maXJtIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAid2ViIjogewogICAgICAidGl0bGUiOiAiV2ViIEFjY2VzcyIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJwbXMiOiB7CiAgICAgICJ0aXRsZSI6ICJQTVMgQWNjZXNzIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgIm0zdSI6IHsKICAgICAgInRpdGxlIjogIk0zVSBBY2Nlc3MiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAieG1sIjogewogICAgICAidGl0bGUiOiAiWE1MIEFjY2VzcyIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJhcGkiOiB7CiAgICAgICJ0aXRsZSI6ICJBUEkgQWNjZXNzIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9CiAgfSwKICAic2V0dGluZ3MiOiB7CiAgICAiY2F0ZWdvcnkiOiB7CiAgICAgICJnZW5lcmFsIjogIkdlbmVyYWwiLAogICAgICAiZmlsZXMiOiAiRmlsZXMiLAogICAgICAic3RyZWFtaW5nIjogIlN0cmVhbWluZyIsCiAgICAgICJiYWNrdXAiOiAiQmFja3VwIiwKICAgICAgImF1dGhlbnRpY2F0aW9uIjogIkF1dGhlbnRpY2F0aW9uIgogICAgfSwKICAgICJ1cGRhdGUiOiB7CiAgICAgICJ0aXRsZSI6ICJTY2hlZHVsZSBmb3IgdXBkYXRpbmcgKFBsYXlsaXN0LCBYTUxUViwgQmFja3VwKSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIwMDAwLDEwMDAsMjAwMCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaW1lIGluIDI0IGhvdXIgZm9ybWF0ICgwODAwID0gODowMCBhbSkuIE1vcmUgdGltZXMgY2FuIGJlIGVudGVyZWQgY29tbWEgc2VwYXJhdGVkLiBMZWF2ZSB0aGlzIGZpZWxkIGVtcHR5IGlmIG5vIHVwZGF0ZXMgYXJlIHRvIGJlIGNhcnJpZWQgb3V0LiIKICAgIH0sCiAgICAiYXBpIjogewogICAgICAidGl0bGUiOiAiQVBJIEludGVyZmFjZSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJWaWEgQVBJIGludGVyZmFjZSBpdCBpcyBwb3NzaWJsZSB0byBzZW5kIGNvbW1hbmRzIHRvIFRocmVhZGZpbi4gQVBJIGRvY3VtZW50YXRpb24gaXMgPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL1RocmVhZGZpbi9UaHJlYWRmaW4tRG9jdW1lbnRhdGlvbi9ibG9iL21hc3Rlci9lbi9jb25maWd1cmF0aW9uLm1kI2FwaSc+aGVyZTwvYT4iCiAgICB9LAogICAgInNzZHAiOiB7CiAgICAgICJ0aXRsZSI6ICJTU0RQIiwKICAgICAgImRlc2NyaXB0aW9uIjogIlNTRFAgaXMgYSBuZXR3b3JrIHByb3RvY29sIGZvciBzZXJ2aWNlIGRpc2NvdmVyeS4gSXQgaXMgdXNlZCBmb3IgdGhlIGF1dG9tYXRpYyBkZXRlY3Rpb24gb2YgVGhyZWFkZmluIGluIHRoZSBuZXR3b3JrLiIKICAgIH0sCiAgICAiZHVtbXkiOiB7CiAgICAgICJ0aXRsZSI6ICJFbmFibGUgRGVmYXVsdCBEdW1teSBEYXRhIiwKICAgICAgImRlc2NyaXB0aW9uIjogIldoZW4gZW5hYmxlZCwgdGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgbWFwIGluYWN0aXZlIGNoYW5uZWxzIHRvIHRoZSBkdW1teSBkYXRhIGNoYW5uZWwgYmVsb3cuIFVzZSB0aGlzIHRvIGtlZXAgTGl2ZSBFdmVudCBjaGFubmVscyBhY3RpdmUuIgogICAgfSwKICAgICJkdW1teUNoYW5uZWwiOiB7CiAgICAgICJ0aXRsZSI6ICJEdW1teSBEYXRhIENoYW5uZWwiLAogICAgICAiZGVzY3JpcHRpb24iOiAiU2VsZWN0IHRoZSBkZWZhdWx0IGNoYW5uZWwgdG8gdXNlIHdoZW4gbWFwcGluZyBpbmFjdGl2ZSBjaGFubmVscyB0byB0aGUgZHVtbXkgZGF0YS4iCiAgICB9LAogICAgImlnbm9yZUZpbHRlcnMiOiB7CiAgICAgICJ0aXRsZSI6ICJJZ25vcmUgRmlsdGVycyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJJZiBjaGVja2VkLCBmaWx0ZXJpbmcgaXMgY29tcGxldGVseSBpZ25vcmVkLiIKICAgIH0sCiAgICAiZXBnU291cmNlIjogewogICAgICAidGl0bGUiOiAiRVBHIFNvdXJjZSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQTVM6PGJyPi0gVXNlIEVQRyBkYXRhIGZyb20gUGxleCwgRW1ieSBvciBKZWxseWZpbiA8YnI+PGJyPlhFUEc6PGJyPi0gVXNlIG9mIG9uZSBvciBtb3JlIFhNTFRWIGZpbGVzPGJyPi0gQ2hhbm5lbCBtYW5hZ2VtZW50PGJyPi0gTTNVIC8gWE1MVFYgZXhwb3J0IChIVFRQIGxpbmsgZm9yIElQVFYgYXBwcykiCiAgICB9LAogICAgInR1bmVyIjogewogICAgICAidGl0bGUiOiAiTnVtYmVyIG9mIFR1bmVycyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgcGFyYWxsZWwgY29ubmVjdGlvbnMgdGhhdCBjYW4gYmUgZXN0YWJsaXNoZWQgdG8gdGhlIHByb3ZpZGVyLjxicj5BdmFpbGFibGUgZm9yOiBQbGV4LCBFbWJ5LCBKZWxseWZpbiwgTTNVICh3aXRoIGFjdGl2ZSBidWZmZXIpLjxicj5BZnRlciBhIGNoYW5nZSwgVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQbGV4IC8gRW1ieSAvIEplbGx5ZmluIERWUiBzZXR0aW5ncyBhbmQgc2V0IHVwIGFnYWluLiIKICAgIH0sCiAgICAiZmlsZXNVcGRhdGUiOiB7CiAgICAgICJ0aXRsZSI6ICJVcGRhdGVzIGFsbCBmaWxlcyBhdCBzdGFydHVwIiwKICAgICAgImRlc2NyaXB0aW9uIjogIlVwZGF0ZXMgYWxsIHBsYXlsaXN0cywgdHVuZXIgYW5kIFhNTFRWIGZpbGVzIGF0IHN0YXJ0dXAuIgogICAgfSwKICAgICJjYWNoZUltYWdlcyI6IHsKICAgICAgInRpdGxlIjogIkltYWdlIENhY2hpbmciLAogICAgICAiZGVzY3JpcHRpb24iOiAiQWxsIGltYWdlcyBmcm9tIHRoZSBYTUxUViBmaWxlIGFyZSBjYWNoZWQsIGFsbG93aW5nIGZhc3RlciByZW5kZXJpbmcgb2YgdGhlIGdyaWQgaW4gdGhlIGNsaWVudC48YnI+RG93bmxvYWRpbmcgdGhlIGltYWdlcyBtYXkgdGFrZSBhIHdoaWxlIGFuZCB3aWxsIGJlIGRvbmUgaW4gdGhlIGJhY2tncm91bmQuIgogICAgfSwKICAgICJyZXBsYWNlRW1wdHlJbWFnZXMiOiB7CiAgICAgICJ0aXRsZSI6ICJSZXBsYWNlIG1pc3NpbmcgcHJvZ3JhbSBpbWFnZXMiLAogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgdGhlIHBvc3RlciBpbiB0aGUgWE1MVFYgcHJvZ3JhbSBpcyBtaXNzaW5nLCB0aGUgY2hhbm5lbCBsb2dvIHdpbGwgYmUgdXNlZC4iCiAgICB9LAogICAgInJlcGxhY2VDaGFubmVsVGl0bGUiOiB7CiAgICAgICJ0aXRsZSI6ICJSZXBsYWNlIFBQViBjaGFubmVscyB0aXRsZS9kZXNjIiwKICAgICAgImRlc2NyaXB0aW9uIjogIlVzZSB0aGlzIGlmIHlvdXIgcHJvdmlkZXIgbWFwcyB0aGUgUFBWIGV2ZW50IG5hbWUgdG8gdGhlIGNoYW5uZWwgbmFtZSIKICAgIH0sCiAgICAiVGhyZWFkZmluQXV0b1VwZGF0ZSI6IHsKICAgICAgInRpdGxlIjogIkF1dG9tYXRpYyB1cGRhdGUgb2YgVGhyZWFkZmluIiwKICAgICAgImRlc2NyaXB0aW9uIjogIklmIGEgbmV3IHZlcnNpb24gb2YgVGhyZWFkZmluIGlzIGF2YWlsYWJsZSwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZC4gVGhlIHVwZGF0ZXMgYXJlIGRvd25sb2FkZWQgZnJvbSBHaXRIdWIuIgogICAgfSwKICAgICJzdHJlYW1CdWZmZXJpbmciOiB7CiAgICAgICJ0aXRsZSI6ICJTdHJlYW0gQnVmZmVyIiwKICAgICAgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9ucyBvZiB0aGUgYnVmZmVyOjxicj4tIFRoZSBzdHJlYW0gaXMgcGFzc2VkIGZyb20gRkZtcGVnIG9yIFZMQyB0byBQbGV4LCBFbWJ5LCBKZWxseWZpbiBvciBNM1UgUGxheWVyPGJyPi0gU21hbGwgamVya2luZyBvZiB0aGUgc3RyZWFtcyBjYW4gYmUgY29tcGVuc2F0ZWQ8YnI+LSBITFMgLyBNM1U4IHN1cHBvcnQ8YnI+LSBSVFAgLyBSVFBTIHN1cHBvcnQ8YnI+LSBSZS1zdHJlYW1pbmc8YnI+LSBTZXBhcmF0ZSB0dW5lciBsaW1pdCBmb3IgZWFjaCBwbGF5bGlzdCIsCiAgICAgICJpbmZvX2ZhbHNlIjogIk5vIEJ1ZmZlciAoQ2xpZW50IGNvbm5lY3RzIGRpcmVjdGx5IHRvIHRoZSBzdHJlYW1pbmcgc2VydmVyKSIsCiAgICAgICJpbmZvX2ZmbXBlZyI6ICJGRm1wZWcgY29ubmVjdHMgdG8gdGhlIHN0cmVhbWluZyBzZXJ2ZXIiLAogICAgICAiaW5mb192bGMiOiAiVkxDIGNvbm5lY3RzIHRvIHRoZSBzdHJlYW1pbmcgc2VydmVyIgogICAgfSwKICAgICJ1ZHB4eSI6IHsKICAgICAgInRpdGxlIjogIlVEUHh5IGFkZHJlc3MiLAogICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGFkZHJlc3Mgb2YgeW91ciBVRFB4eSBzZXJ2ZXIuIElmIHNldCwgYW5kIHRoZSBjaGFubmVsIFVSTHMgaW4gdGhlIG0zdSBpcyBtdWx0aWNhc3QsIFRocmVhZGZpbiB3aWxsIHJld3JpdGUgaXQgc28gdGhhdCBpdCBpcyBhY2Nlc3NlZCB2aWEgdGhlIFVEUHh5IHNlcnZpY2UuIiwKICAgICAgInBsYWNlaG9sZGVyIjogImhvc3Q6cG9ydCIKICAgIH0sCiAgICAiZmZtcGVnUGF0aCI6IHsKICAgICAgInRpdGxlIjogIkZGbXBlZyBCaW5hcnkgUGF0aCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQYXRoIHRvIEZGbXBlZyBiaW5hcnkuIiwKICAgICAgInBsYWNlaG9sZGVyIjogIi9wYXRoL3RvL2ZmbXBlZyIKICAgIH0sCiAgICAiZmZtcGVnT3B0aW9ucyI6IHsKICAgICAgInRpdGxlIjogIkZGbXBlZyBPcHRpb25zIiwKICAgICAgImRlc2NyaXB0aW9uIjogIkZGbXBlZyBvcHRpb25zLjxicj5Pbmx5IGNoYW5nZSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuPGJyPkxlYXZlIGJsYW5rIHRvIHNldCBkZWZhdWx0IHNldHRpbmdzLiIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJMZWF2ZSBibGFuayB0byBzZXQgZGVmYXVsdCBzZXR0aW5ncyIKICAgIH0sCiAgICAiZmZtcGVnRm9yY2VIdHRwIjogewogICAgICAidGl0bGUiOiAiRm9yY2UgSFRUUCBmb3IgRkZNUEVHIiwKICAgICAgImRlc2NyaXB0aW9uIjogIklmIGNoZWNrZWQsIHdpbGwgcmV3cml0ZSB0aGUgbTN1IHRvIHVzZSBodHRwIGluc3RlYWQgb2YgaHR0cHMuIFVzZSB0aGlzIGZvciBodHRwcyBsaW5rcyBpbiBmZm1wZWciCiAgICB9LAogICAgInZsY1BhdGgiOiB7CiAgICAgICJ0aXRsZSI6ICJWTEMgLyBDVkxDIEJpbmFyeSBQYXRoIiwKICAgICAgImRlc2NyaXB0aW9uIjogIlBhdGggdG8gVkxDIC8gQ1ZMQyBiaW5hcnkuIiwKICAgICAgInBsYWNlaG9sZGVyIjogIi9wYXRoL3RvL2N2bGMiCiAgICB9LAogICAgInZsY09wdGlvbnMiOiB7CiAgICAgICJ0aXRsZSI6ICJWTEMgLyBDVkxDIE9wdGlvbnMiLAogICAgICAiZGVzY3JpcHRpb24iOiAiVkxDIC8gQ1ZMQyBvcHRpb25zLjxicj5Pbmx5IGNoYW5nZSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuPGJyPkxlYXZlIGJsYW5rIHRvIHNldCBkZWZhdWx0IHNldHRpbmdzLiIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJMZWF2ZSBibGFuayB0byBzZXQgZGVmYXVsdCBzZXR0aW5ncyIKICAgIH0sCiAgICAiYnVmZmVyU2l6ZSI6IHsKICAgICAgInRpdGxlIjogIkJ1ZmZlciBTaXplIiwKICAgICAgImRlc2NyaXB0aW9uIjogIkJ1ZmZlciBzaXplIGluIE1CLjxicj5NM1U4OiBJZiB0aGUgVFMgc2VnbWVudCBzbWFsbGVyIHRoZW4gdGhlIGJ1ZmZlciBzaXplLCB0aGUgZmlsZSBzaXplIG9mIHRoZSBzZWdtZW50IGlzIHVzZWQuIgogICAgfSwKICAgICJzdG9yZUJ1ZmZlckluUkFNIjoKICAgIHsKICAgICAgInRpdGxlIjogIlN0b3JlIGJ1ZmZlciBpbiBSQU0iLAogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgY2hlY2tlZCwgd3JpdGUgYnVmZmVyIHRvIFJBTSBpbnN0ZWFkIG9mIHdyaXRpbmcgdG8gZGlzayIKICAgIH0sCiAgICAiZm9yY2VIdHRwcyI6CiAgICB7CiAgICAgICJ0aXRsZSI6ICJGb3JjZSBIVFRQUyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXaXRoIGltYWdlIGNhY2hpbmcgZW5hYmxlZCwgaWYgY2hlY2tlZCwgd2lsbCByZXdyaXRlIE0zVSBhbmQgRVBHIHVybHMgdG8gaW5jbHVkZSBodHRwcyBwcm90b2NvbCBhcyB3ZWxsIGFzIGh0dHBzIHBvcnQgKGRlZmF1bHQgaXMgNDQzKSIKICAgIH0sCiAgICAiaHR0cHNQb3J0IjoKICAgIHsKICAgICAgInRpdGxlIjogIkhUVFBTIFBvcnQiLAogICAgICAiZGVzY3JpcHRpb24iOiAiV2l0aCBpbWFnZSBjYWNoaW5nIGVuYWJsZWQsIHBvcnQgdG8gdXNlIGZvciBmb3JjaW5nIGh0dHBzLiBEZWZhdWx0IGlzIDQ0MyIKICAgIH0sCiAgICAiaHR0cHNUaHJlYWRmaW5Eb21haW4iOgogICAgewogICAgICAidGl0bGUiOiAiSFRUUFMgVGhyZWFkZmluIERvbWFpbiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXaXRoIGltYWdlIGNhY2hpbmcgZW5hYmxlZCwgcmV3cml0ZSB0aGUgdGhyZWFkZmluIGlwIGFkZHJlc3MgaW4gdGhlIG0zdSB0byB1c2UgYSBkb21haW4gZm9yIEhUVFBTIG1vZGUuIERvIE5PVCBpbmNsdWRlIGh0dHBzIChleDogc29tZWRvbWFpbi5jb20pIgogICAgfSwKICAgICJiaW5kSXBBZGRyZXNzIjoKICAgIHsKICAgICAgInRpdGxlIjogIkJpbmQgSVAgQWRkcmVzcyBmb3IgV2ViVUkvQVBJIiwKICAgICAgImRlc2NyaXB0aW9uIjogIlRoaXMgd2lsbCBleHBsaWNpdHkgc2V0IHRoZSBiaW5kIGlwIGFkZHJlc3MgaW5zdGVhZCBvZiB0cnlpbmcgdG8gYXNzdW1lIGl0LiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3lzdGVtcyB3aXRoIG11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlcy4iCiAgICB9LAogICAgImh0dHBUaHJlYWRmaW5Eb21haW4iOgogICAgewogICAgICAidGl0bGUiOiAiSFRUUCBUaHJlYWRmaW4gRG9tYWluIiwKICAgICAgImRlc2NyaXB0aW9uIjogIldpdGggaW1hZ2UgY2FjaGluZyBlbmFibGVkLCByZXdyaXRlIHRoZSB0aHJlYWRmaW4gaXAgYWRkcmVzcyBpbiB0aGUgbTN1IHRvIHVzZSBhIGRvbWFpbiBmb3IgSFRUUCBtb2RlLiBEbyBOT1QgaW5jbHVkZSBodHRwIChleDogc29tZWRvbWFpbi5jb20pIgogICAgfSwKICAgICJlbmFibGVOb25Bc2NpaSI6CiAgICB7CiAgICAgICJ0aXRsZSI6ICJFbmFibGUgTm9uLUFTQ0lJIiwKICAgICAgImRlc2NyaXB0aW9uIjogIklmIGNoZWNrZWQsIHdpbGwgYWxsb3cgc3BlY2lhbCBub24gYXNjaWkgY2hhcmFjdGVycyBpbiB0aGUgTTNVIGFuZCBFUEcuIERlZmF1bHQgaXMgZGlzYWJsZWQiCiAgICB9LAogICAgImVwZ0NhdGVnb3JpZXMiOgogICAgewogICAgICAidGl0bGUiOiAiRVBHIENhdGVnb3JpZXMiLAogICAgICAiZGVzY3JpcHRpb24iOiAiQ3VzdG9taXplIHRoZSBFUEcgQ2F0ZWdvcmllcy4gVGhlIGZvcm1hdCBpcyBrZXk6dmFsdWV8a2V5OnZhbHVlLCBzbyBOZXdzOm5ld3N8U3BvcnRzOnNwb3J0c3xNb3ZpZXM6bW92aWVzIgogICAgfSwKICAgICJlcGdDYXRlZ29yaWVzQ29sb3JzIjoKICAgIHsKICAgICAgInRpdGxlIjogIkVQRyBDYXRlZ29yaWVzIENvbG9ycyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJDdXN0b21pemUgdGhlIEVQRyBDYXRlZ29yeSBjb2xvcnMuIFRoZSBmb3JtYXQgaXMgdmFsdWU6Y29sb3J8dmFsdWU6Y29sb3IsIHNvIG5ld3M6dG9tYXRvfHNwb3J0czp5ZWxsb3dncmVlbnxtb3ZpZXM6cm95YWxibHVlIgogICAgfSwKICAgICJidWZmZXJUaW1lb3V0IjogewogICAgICAidGl0bGUiOiAiVGltZW91dCBmb3IgbmV3IGNsaWVudCBjb25uZWN0aW9ucyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgVGhyZWFkZmluIGJ1ZmZlciB3YWl0cyB1bnRpbCBuZXcgY2xpZW50IGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZC4gSGVscGZ1bCBmb3IgZmFzdCBjaGFubmVsIHN3aXRjaGluZy4gVmFsdWUgaW4gbWlsbGlzZWNvbmRzLiIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIxMDAiCiAgICB9LAogICAgInVzZXJBZ2VudCI6IHsKICAgICAgInRpdGxlIjogIlVzZXIgQWdlbnQiLAogICAgICAiZGVzY3JpcHRpb24iOiAiVXNlciBBZ2VudCBmb3IgSFRUUCByZXF1ZXN0cy4gRm9yIGV2ZXJ5IEhUVFAgY29ubmVjdGlvbiwgdGhpcyB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgdXNlciBhZ2VudC4gU2hvdWxkIG9ubHkgYmUgY2hhbmdlZCBpZiBUaHJlYWRmaW4gaXMgYmxvY2tlZC4iLAogICAgICAicGxhY2Vob2xkZXIiOiAiVGhyZWFkZmluIgogICAgfSwKICAgICJiYWNrdXBQYXRoIjogewogICAgICAidGl0bGUiOiAiTG9jYXRpb24gZm9yIGF1dG9tYXRpYyBiYWNrdXBzIiwKICAgICAgInBsYWNlaG9sZGVyIjogIi9tbnQvZGF0YS9iYWNrdXAvdGhyZWFkZmluLyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJCZWZvcmUgYW55IHVwZGF0ZSBvZiB0aGUgcHJvdmlkZXIgZGF0YSBieSB0aGUgc2NoZWR1bGUsIFRocmVhZGZpbiBjcmVhdGVzIGEgYmFja3VwLiBUaGUgcGF0aCBmb3IgdGhlIGF1dG9tYXRpYyBiYWNrdXBzIGNhbiBiZSBjaGFuZ2VkLiBUaHJlYWRmaW4gcmVxdWlyZXMgd3JpdGUgcGVybWlzc2lvbiBmb3IgdGhpcyBmb2xkZXIuIgogICAgfSwKICAgICJ0ZW1wUGF0aCI6IHsKICAgICAgInRpdGxlIjogIkxvY2F0aW9uIGZvciB0aGUgdGVtcG9yYXJ5IGZpbGVzIiwKICAgICAgInBsYWNlaG9sZGVyIjogIi90bXAvdGhyZWFkZmluLyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2NhdGlvbiBmb3IgdGhlIGJ1ZmZlciBmaWxlcy4iCiAgICB9LAogICAgImJhY2t1cEtlZXAiOiB7CiAgICAgICJ0aXRsZSI6ICJOdW1iZXIgb2YgYmFja3VwcyB0byBrZWVwIiwKICAgICAgImRlc2NyaXB0aW9uIjogIk51bWJlciBvZiBiYWNrdXBzIHRvIGtlZXAuIE9sZGVyIGJhY2t1cHMgYXJlIGF1dG9tYXRpY2FsbHkgZGVsZXRlZC4iCiAgICB9LAogICAgImF1dGhlbnRpY2F0aW9uV0VCIjogewogICAgICAidGl0bGUiOiAiV0VCIEF1dGhlbnRpY2F0aW9uIiwKICAgICAgImRlc2NyaXB0aW9uIjogIkFjY2VzcyB0byB0aGUgd2ViIGludGVyZmFjZSBvbmx5IHBvc3NpYmxlIHdpdGggY3JlZGVudGlhbHMuIgogICAgfSwKICAgICJhdXRoZW50aWNhdGlvblBNUyI6IHsKICAgICAgInRpdGxlIjogIlBNUyBBdXRoZW50aWNhdGlvbiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQbGV4IHJlcXVlc3RzIGFyZSBvbmx5IHBvc3NpYmxlIHdpdGggYXV0aGVudGljYXRpb24uIDxicj48Yj5XYXJuaW5nISEhPC9iPiBBZnRlciBhY3RpdmF0aW5nIHRoaXMgZnVuY3Rpb24gVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQTVMgRFZSIHNldHRpbmdzIGFuZCBzZXQgdXAgYWdhaW4uIgogICAgfSwKICAgICJhdXRoZW50aWNhdGlvbk0zVSI6IHsKICAgICAgInRpdGxlIjogIk0zVSBBdXRoZW50aWNhdGlvbiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJEb3dubG9hZGluZyB0aGUgdGhyZWFkZmluLm0zdSBmaWxlIHZpYSBhbiBIVFRQIHJlcXVlc3QgaXMgb25seSBwb3NzaWJsZSB3aXRoIGF1dGhlbnRpY2F0aW9uLiIKICAgIH0sCiAgICAiYXV0aGVudGljYXRpb25YTUwiOiB7CiAgICAgICJ0aXRsZSI6ICJYTUwgQXV0aGVudGljYXRpb24iLAogICAgICAiZGVzY3JpcHRpb24iOiAiRG93bmxvYWRpbmcgdGhlIHRocmVhZGZpbi54bWwgZmlsZSB2aWEgYW4gSFRUUCByZXF1ZXN0IGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbiIKICAgIH0sCiAgICAiYXV0aGVudGljYXRpb25BUEkiOiB7CiAgICAgICJ0aXRsZSI6ICJBUEkgQXV0aGVudGljYXRpb24iLAogICAgICAiZGVzY3JpcHRpb24iOiAiQWNjZXNzIHRvIHRoZSBBUEkgaW50ZXJmYWNlIGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbi4iCiAgICB9CiAgfSwKICAid2l6YXJkIjogewogICAgImVwZ1NvdXJjZSI6IHsKICAgICAgInRpdGxlIjogIkVQRyBTb3VyY2UiLAogICAgICAiZGVzY3JpcHRpb24iOiAiUE1TOjxicj4tIFVzZSBFUEcgZGF0YSBmcm9tIFBsZXgsIEVtYnkgb3IgSmVsbHlmaW4gPGJyPjxicj5YRVBHOjxicj4tIFVzZSBvZiBvbmUgb3IgbW9yZSBYTUxUViBmaWxlczxicj4tIENoYW5uZWwgbWFuYWdlbWVudDxicj4tIE0zVSAvIFhNTFRWIGV4cG9ydCAoSFRUUCBsaW5rIGZvciBJUFRWIGFwcHMpIgogICAgfSwKICAgICJ0dW5lciI6IHsKICAgICAgInRpdGxlIjogIk51bWJlciBvZiB0dW5lcnMiLAogICAgICAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIHBhcmFsbGVsIGNvbm5lY3Rpb25zIHRoYXQgY2FuIGJlIGVzdGFibGlzaGVkIHRvIHRoZSBwcm92aWRlci48YnI+QXZhaWxhYmxlIGZvcjogUGxleCwgRW1ieSwgSmVsbHlmaW4sIE0zVSAod2l0aCBhY3RpdmUgYnVmZmVyKS48YnI+QWZ0ZXIgYSBjaGFuZ2UsIFRocmVhZGZpbiBtdXN0IGJlIGRlbGV0ZSBpbiB0aGUgUGxleCAvIEVtYnkgLyBKZWxseWZpbiBEVlIgc2V0dGluZ3MgYW5kIHNldCB1cCBhZ2Fpbi4iCiAgICB9LAogICAgIm0zdSI6IHsKICAgICAgInRpdGxlIjogIk0zVSBQbGF5bGlzdCIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWxlIHBhdGggb3IgVVJMIG9mIHRoZSBNM1UiLAogICAgICAiZGVzY3JpcHRpb24iOiAiTG9jYWwgb3IgcmVtb3RlIHBsYXlsaXN0cyIKICAgIH0sCiAgICAieG1sdHYiOiB7CiAgICAgICJ0aXRsZSI6ICJYTUxUViBGaWxlIiwKICAgICAgInBsYWNlaG9sZGVyIjogIkZpbGUgcGF0aCBvciBVUkwgb2YgdGhlIFhNTFRWIiwKICAgICAgImRlc2NyaXB0aW9uIjogIkxvY2FsIG9yIHJlbW90ZSBYTUxUViBmaWxlIgogICAgfQogIH0sCiAgImxvZ2luIjogewogICAgImZhaWxlZCI6ICJVc2VyIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCIsCiAgICAiaGVhZGxpbmUiOiAiTG9naW4iLAogICAgInVzZXJuYW1lIjogewogICAgICAidGl0bGUiOiAiVXNlcm5hbWUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiVXNlcm5hbWUiCiAgICB9LAogICAgInBhc3N3b3JkIjogewogICAgICAidGl0bGUiOiAiUGFzc3dvcmQiLAogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQiCiAgICB9CiAgfSwKICAiYWNjb3VudCI6IHsKICAgICJmYWlsZWQiOiAiUGFzc3dvcmQgZG9lcyBub3QgbWF0Y2giLAogICAgImhlYWRsaW5lIjogIkNyZWF0ZSB1c2VyIGFjY291bnQiLAogICAgInVzZXJuYW1lIjogewogICAgICAidGl0bGUiOiAiVXNlcm5hbWUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiVXNlcm5hbWUiCiAgICB9LAogICAgInBhc3N3b3JkIjogewogICAgICAidGl0bGUiOiAiUGFzc3dvcmQiLAogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQiCiAgICB9LAogICAgImNvbmZpcm0iOiB7CiAgICAgICJ0aXRsZSI6ICJDb25maXJtIiwKICAgICAgInBsYWNlaG9sZGVyIjogIkNvbmZpcm0iCiAgICB9CiAgfQp9" - webUI["html/img/filter.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0yOFQxOTowNzo2OTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cs038OQAAAOISURBVGgF5ZpLSBVRGMfvvfmqCKKiKCqKtE3SQ8haJJm1ctPCZYHrFhXtohcUBLVsU1BRBJKLXpsSKs1aCL1oUUhvMgIloodZKmLZ72+OzNVx7jzOXGfqg/89Z875zv/7f35n7px7vanUP2JptzyGhoYKmK8GW0EZmA/mgW7wHrwDN0BTOp0epPVtxBBnLdgIVoE5YBboBR2gDTTA/5DWn0FeDPaBz8CLdeF0EBR5jYRvKbgABoAXa8Opwit/CudK8NoLs4PPM8ZyBsNnB/jpsD7X0C8cjgDXnaQkqkEPCGMSuGWivxxzx8OQj6xtpHWuPhPloHfEMWzTD0HN2GQY2xuW2Lb+/Fh+VaIQPLE5meh+gmSxFYz+BjBogtjGscfiH26Z2GmbNNltVQAIpwDdP6ZNO2iRYqTpZGhfgWUaiMC2w1kCzkbALcqLvDVvUyK6MW9HFES0b8BvsFwXEZi4F+iBtykCcjtlqf0igr52VJ1eqiIgzzdlrRIZfWfJd3SD8ZbqHvkB4XSDpJNB9V0VcX/cT4Ys/zEzSuSj/3WxW9GpRD7ETpZ/QcOJ6LyfdHugitxNehbob9G7lo4PXWBmQhPqQ/fsDOeUfjqNCU1Csi+TQ5+2luzc3yaRr6elevQZwhZr4bomYam0U41yabYqov5hvSTMjlp6RyuiAarSTLPZmox5246+lVREx/isiuh6NxhUJwF2yEpCWu1bK8WEsjyRgCSa0XrVrjNra2mC7TWD5ilYAuJoA4jSlnppF5dVEU3g0ENTD4b3nsZiZsfGJuGqj8qY+CINGqP2GLZCJ+HjtpblxAJ9k3cPrLfGJrnVUaSCarxw0jFua1lOLNBerANx+byya6IkLM2uLZWpAl6/Mcc1EjvjKtLrJNLqI5HnjfQ+bsVeteb0g2y/t7hGvd7CNjenOL8OkJ40KtOdTF+Cl/nV6Mkf4gxocI9vZPYLLKs9iQrqRIACcM2IXGeSboYrg+rztY5ARaDJWUeo0W+sXudLTFhnApaAW6FkZy/+yuXasLoCrSfwVHAnW0+gK93YawKJMLUIAdNAKwhqnSxcYUpPKB6EBE2mg7VR///EX24jybTQerXnOC70FyVP3gjTPXPTQyaP8NFPNeJrCNTPP667JKOq6VNo/A2hes5ccUjmEmPmDoD5+FMgWCcA+3FG57QJP//kQ1PgGBIOToEDgUn+t4V/AJeGknwARIKLAAAAAElFTkSuQmCC" - webUI["html/img/logo_w_600x200.png"] = "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" - webUI["html/img/mapping.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wOC0wMlQxMjowODo5NzwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CpRxQsEAAAJLSURBVGgF7VoxTgMxEMwBHWlAaeABVCEtBcoD+EBewCdCyQsQtLyAPCBvCBSRIBUPCF1ogqBJjlkrezGr6HTrO98lhy1Z9trr2VmvnbMNjUadUhzHLeQB8hw5LS3QOUbubvIf7X3kKXIZibgS51bCZdWgMT6D8nECgArkngagQN0B8dhbkblalVmLIyheCGUthhjuLBq77MihA0xTjHHBEBBOorHLjjghbNOg4Mg2RYO4hIiEiHiaAV5aSwf8hRgjZdHtTTTc2ZFXpZkY+hMx5k3IZYlr7jgudJHp2JElLaF0K1mirYn8nAWgQB3ibM59ERNCA52d6Nghv9isQiUtn0kURe92I9eBcYA6YZxym8dyDuwRuMw82gjQYQbsPdLDdNCROO0US3uEfp3usTZpjf5J2CNtNFwjl7FHvmBnCB5PCQkQoJudJtGvE23sJEFuI39rQArS7dskXK6nlwkAKiB1VxAxLcyUePAH8cQmlbEul4+UM8LkVjPc2ZHcaFUDBEeqjoC0HyIiZ6RqOUSk6ghI+xyRD9mRQTYfIktPylaX16rhzo48KE29QH8kxjxC/hFtZYiGe70OjWVMW7Dx32bA3iO7//iAC8DOPweZFQhH6O+CmkRvW2f28oV8owEoUHdMPPg70rFJZajTkqT7uZ3ObaHEuuHOjnCpsb8vlKUsur2JhruLA94Y5QEOjuSZPR9jQ0R8zGoezNpFhN5RtUm+/bpgaG1u0jd2OSLDTRopbZ/okxcrLUYKvKprbRfHhXr8m5PK/y1V/gWRKLfiNSmxEAAAAABJRU5ErkJggg==" - webUI["html/maintenance.html"] = "PCFkb2N0eXBlIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9iYXNlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgo8L2hlYWQ+Cgo8Ym9keT4KCiAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iaW1nQ2VudGVyIj48L2Rpdj4KCiAgPGRpdiBpZD0iYm94Ij4KCiAgICA8ZGl2IGlkPSJoZWFkbGluZSI+CiAgICAgIDxoMSBpZD0iaGVhZC10ZXh0IiBjbGFzcz0iY2VudGVyIj5NYWludGVuYW5jZTwvaDE+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJjb250ZW50Ij4KICAgICAgVGhyZWFkZmluIGlzIHVwZGF0aW5nIHRoZSBkYXRhYmFzZSwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJveC1mb290ZXIiPjwvZGl2PgoKICA8L2Rpdj4KCjwvYm9keT4KCjwvaHRtbD4=" - webUI["html/img/log.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0xMC0xNFQxMToxMDo0MjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkP32mEAAANASURBVGgF7ZlPiE1RHMffw1AYhiL5k1HEijJiYaFZiHoyFspW2RFRkkSZGgtFWJIwi9FYmo0VOywkKTbKgjSlWcifRCPX51dv6s2d33md77vvXjfmV9859/7u93x/v98959x73p1KRbAkSargAhgDH0E/qIYkuHYEvAPGvwbmNOEerXM/0Q6BRSFuZj/ix0DaDnvCkGppIucDAe4OhzvkcUO+GaELAf8ux7/b8Zlrr+Pvc3zm6nX8NccXdKmFLHaUPJ/Ruhyu5zNap8Nd6PiCLrUQTyi0Rjy/5/M0Zd+smB7M32XwtgBr07aC6yfSTs7XO77OALfH4VbgHsD/HLytVquJx4nyIdQFBsHftscksK5Z0sGhpuN8Or4Aa5sJFHjtO7G2MjKvvZjN1sglOpSlCMt9LrDZ4S4Hd0Qg24vrK+gAZbPtjMqTdFKhEdkIsYxFWP720JlioUK6pzDL41jtpRIqxOOWxecuB3fhRGT8E85YBK8VygI6GSRTCxlH3TaJgyw4O2678aCxO94LbNPovYDdmOrUukIBN/MqwjJEOwGPOHR31W4VONVCLEBR9lAJpBbSrYhn5K5R+quFnGUOr1ICtMIlxjz6XVb6qot9JeKvCPSAdlQJJHDtd8hOIN0wtRDLxx6Ntr0ulalTq1TJNyYzXUjj3SjD8X87Iva7uR8s5+2bi6FtX1oOgi8g2tSn1g2yPx+t3gIR/c90s1+C1vuO/YkxdWrdjxFtE2dE0VELWaqIZ+QuUfqrhZxmyKUvgEoyE1xizOR4YOI8plXXyAZEbYsyTJvXFsUW+x6wGUSbWogJ237rZHSEgojq1CooLT3MdCH6Pcu3xz8zIq0s9lvc2+sgz6dWH/rnQPB/jlybZGoh99hCHJqk0P6TD0jaI/4b7dVYeXVq2bemokyKpRZiHwWKMimWWshxhryjoEpOKXHUNbIN8WcUc5s2r8Vue7l9oAaiTS3EhDeB6EUYnUlGojq1MobLr3uokB/5hcys7OYWKuRl5nD5Cbi5uYXw0ntPHoay2S8Seuol5RZSJ0r/n/DEc/BdrN9kTZrH7BkwDspgwyQxW6uggU3nHnAXvAG/QZE2SrARsL8hJffwDxM0mNDPvT8IAAAAAElFTkSuQmCC" + webUI["html/video/stream-limit.ts"] = "R0AREABC8CUAAcEAAP8B/wAB/IAUSBIBBkZGbXBlZwlTZXJ2aWNlMDF3fEPK//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQAAQAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABAAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAMAdQAAB7DH4AAAAB4AAAgMAKMQAJEKERAAfYYQAAAAEJ8AAAAAFnZAAorNlAeAIn5YpQAAADABAAAAMDIPGDGWAAAAABaOvjyyLAAAABBgX//6vcRem95tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTY0IHIzMTA4IDMxZTE5ZjkgLSBILjI2NC9NUEVHLTQgQVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDIzIC0gaHR0cDovL3dHAQARd3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2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30X9oT0SBBZCI3AtJaE1scGsmpXrX+6L7ECx+XYakivHzMbORwEAFX6jycIYObFMA8cO1RQbKqBjRSwmV6s3Bvymh1Uy2Q4NYGetxxqA4TS9AAsfEnTWSPnioguTXby9YCaR4TjGhn8NBtHaAqal7fT8Mi6Fx48bLZLUw8vE0oyOXRPPZ7YEaZ8VtCcKvfPmIXDe+CICjSg/14litlDqWjesyqV20kGkxEXxFBxQ6opg8rJ5nrXpJ7Yg7f1kVB6kfioI546wX4WiVIHMnIjolv1sVV16hPOoaheE0P72F7ZHAQAW7HIsDRCfdXPaYJO+kI1KnbprbBU8l9EpUeesa13zPgeLsD/2jy8om6zqqaZBpDO3+joQU+lzMfu74FIaVthokTCHq+okILC+gMpWqJ9gii24CxJR1eAEEaVrQma2Vqt0eRRTQKRgUz3U+yFZEROE+9eX4DBqMlOFD6/RPC32sesdhyOVL9peV/fimBhb4rcmjAOm79hlThrtz/TWGfACtvoNRAwACV66tkmnc4GPMdLg0xEkq+1LSEcBADcNAP///////////////5trYpfJL+GISCBj9FiUkOtbkee6L9I58mjnY1y/WDNqht+Qw3+9i+KfyBbjdz/46xUXVuCItwfw/gdYKyy+IjRZiv53kEqW+PD7lPLLRgAAL2BITMTuwQL79Q01wkomp2ZPIBYiBP6WREAZAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAW9R0EAGAAAAeAAAIDACjEACYEhEQAH9IEAAAABCfAAAAABQZokbEO//qmWAAADAAADAAADAAADAAADAAADAAADAhPyO6dd23w9DkWWQJotXSbxVzBxaMjhfbwK5hWmvMGszdWhoszx1x0hDXN8c9BgYxwvxRZXkmrTPV9ZQAAAAwAAAwAAAwAAAwAKyANRq59GNuA0ghi7BmsDn4KOtIcIHn/KA8ZjXdDU0cUWk7qRZwNMMelaC07cZyBZW9BHAQA5EgD//////////////////////472Ji2hDXNKdWiA/xvCwGEXvTeFAvXO+jhlL6AOli2RGJa+ncBbXMf/Fv/nG9TOUvI8v62JTNsuhHbKPEq9HPF4/Uizrx3rjCTMC69d6+VoYrKv6XxKyvGcL7/QDEDKbwk4eCFgJZJEAlH+N25TWR6KYwzkYYgGuXdrBv3UkeA7VHwdf9Xzh5cuSg4ngVmnfeIpA9JsLqp2wIu9AAADAAADAAAIuEdBADoHEAAAiRx+AAAAAeAAAIDACjEACUjhEQAJEKEAAAABCfAAAAABQZ5CeIX/AAADAAADAAADAAADAAADAAADAAADAnzE28Zci1VBf0H4k1nWmJ0ogyjKdI6LAY1zorGVIRF7G8uwAAADAAADAAADAAADAAADAqrZOCXhGzA4u24KPtb92mgjNUnlvc9Xhr0gBo7u2GDR+aPxP9hnLhhlBtu4gqLkmscLxiv7oXnm033sXadVffC0UcIARwEAO64A//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAwAAAwAAM+FHQAARAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABEAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAPCUA////////////////////////////////////////////////AAAB4AAAgIAFIQAJLMEAAAABCfAAAAABAZ5hdEK/AAADAAADAAADAAADAAADAAADAAADA1/+i67DypGtrhJHPx4hDO6/W1t2QWamAxImT0NjhBVoAAADAAADAAADAAADAAAFMUbvocN9sGd3vACpQrs5+mzAC6i5WG4adCZ7bcVeOzo7AFpOoAAAAwAAAwAAMqBHQQA9QhAAAJcsfgD//////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACWUBEQAJSOEAAAABCfAAAAABAZ5jakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAAF+YuLcI2IxJ27WrhAZp7Yh4CElw5RRRGjq0bAAADAAADAABEwUdBAD4uAP///////////////////////////////////////////////////////////wAAAeAAAIDACjEACfGhEQAJZQEAAAABCfAAAAABQZpoSahBaJlMCHf//qmWAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAK78A5Ntd6FmvObqU2qkO9/nBjO187SEClZ2zAWMgqZxWCxcqvQx+wgAAADAAADAAU1R0AAEgAAsA0AAcEAAAAB8AAqsQSy//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HUAASAAKwEgABwQAA4QDwABvhAPAAFb1NVv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBAD86EAAApTx+AP///////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACblhEQAJgSEAAAABCfAAAAABQZ6GRREsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAB1LjAMsF1v3AJeffDUP0gAbzkVi7LRpW7+1eciThATL+0AAADAAADAAIPR0EAMEYA////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQAJnUEAAAABCfAAAAABAZ6ldEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAOo9u4wKtZ9mouspMor7zADZAcKEUQKmIGN/qFqwAAAMAAAMAA1NHQQAxURAAALNMfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACdWBEQAJuWEAAAABCfAAAAABAZ6nakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdAABMAALANAAHBAAAAAfAAKrEEsv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R1AAEwACsBIAAcEAAOEA8AAb4QDwABW9TVb///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQQAyTgD//////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC2IhEQAJ1YEAAAABCfAAAAABQZqsSahBbJlMCHf//qmWAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAF4+AbzVAAAAwAAAwAAAwBAwEdBADNKEAAAwVx+AP////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAAsp4REACfGhAAAAAQnwAAAAAUGeykUVLC//AAADAAADAAADAAADAAADAAADAAADAAE1849qKzqh1YAAAAMAAAMAAAMAAAMAAPrcuImYkdwSCsiv8h6ss58AAAMAAAMAAM+BR0EANFUA////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQALDcEAAAABCfAAAAABAZ7pdEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAH1fABVCgbyQRhNELHHAAAAMAAAMACyhHQAAUAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABQAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EANVEQAADPbH4A//////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAAtGAREACynhAAAAAQnwAAAAAQGe62pCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpnSFHPivfpgAAAMAAAMAAAMAAAMAAA4qgOic2+XlI15zYQAAAwAAAwAAHTBHQBERAELwJQABwQAA/wH/AAH8gBRIEgEGRkZtcGVnCVNlcnZpY2UwMXd8Q8r//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBADZOAP//////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgMAKMQAL0qERAAtGAQAAAAEJ8AAAAAFBmvBJqEFsmUwIb//+p4QAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAv/sqEpwAAADAAADAAADAMCBR0EAN0oQAADdfH4A/////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC5phEQALYiEAAAABCfAAAAABQZ8ORRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwABAV2OiZ9R3aIKyK/yHqyznwAAAwAAAwAAz4FHQAAVAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABUAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAOFUA////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQALfkEAAAABCfAAAAABAZ8tdEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAICUVFVNgckQRhNELHHAAAAMAAAMACylHQQA5URAAAOuMfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC7aBEQALmmEAAAABCfAAAAABAZ8vakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdBADpRAP//////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgMAKMQANQyERAAu2gQAAAAEJ8AAAAAFBmzRJqEFsmUwIZ//+nhAAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAGVAR0AAFgAAsA0AAcEAAAAB8AAqsQSy//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HUAAWAAKwEgABwQAA4QDwABvhAPAAFb1NVv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBADtMEAAA+Zx+AP///////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADQrhEQAL0qEAAAABCfAAAAABQZ9SRRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAAt+76q5wtAchcd/IOszwAAAMAAAMAAAe1R0EAPFYA/////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAICABSEAC+7BAAAAAQnwAAAAAQGfcXRCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpf51sVkl4rAAAAMAAAMAAAMAAAMAABbufc2kxdx/pBxb4AAAAwAAAwAAU0BHQQA9URAAAQesfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADScBEQANCuEAAAABCfAAAAABAZ9zakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdAABcAALANAAHBAAAAAfAAKrEEsv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R1AAFwACsBIAAcEAAOEA8AAb4QDwABW9TVb///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQQA+UgD///////////////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAA2zoREADScBAAAAAQnwAAAAAUGbeEmoQWyZTAhX//44QAAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABi0dBAD9MEAABFbx+AP///////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADXthEQANQyEAAAABCfAAAAABQZ+WRRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAAt+76q5wtAchcd/IOszwAAAMAAAMAAAe0R0EAMFYA/////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAICABSEADV9BAAAAAQnwAAAAAQGftXRCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpf51sVkl4rAAAAMAAAMAAAMAAAMAABbufc2kxdx/pBxb4AAAAwAAAwAAU0FHQAAYAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABgAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAMVEQAAEjzH4A//////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAA2XgREADXthAAAAAQnwAAAAAQGft2pCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpnSFHPivfpgAAAMAAAMAAAMAAAMAAA4qgOic2+XlI15zYQAAAwAAAwAAHTE=" webUI["html/img/users.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wOC0zMFQxNzowODozODwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CjU01MMAAANJSURBVGgF1ZnLaxNRFMYz2rpoFbW+SCsihaJQRMT6rPhAXAq6c+HChSguRFd1oRtd+A/oWhQ3oiiWFB91UbqRqlXXgoIIQhFbQTTQao2/GzLDZEjIPefO7SQHPjJz55zzfd/MZCa5N8h5ilKptJvWp8FekAed4Bv4Cj6Dh2A4CIJZPpszMHEV2MQ0SZdB0DROENMHjoEzQBoFCpZnbgYR58E/qfpE/kv2F2dmBvJ94G9ClHb3SiZGUBuASa3qGnVzjG3RmFmkKYrVHGB7e2zfdbOdBhc1TVyNnNSQNqg5wVURf/FdjRxpIEpzuIOio9JCtRHO2hrINkgJLfPFt6vaCII2WYrSpPVJi1RGuBrmTbxeSibIX5j3CUauAfOo9BXzNH4nMJ5TXREI1gHzqPQVRtc2zCyxJdAaGbclcMj7zi/jOdt6rZFhCH7akijznknqVEY4U78heSAhUuTekNSojFQIChIiYe57TtZrSY2LkecQzUjIBLljglz3VJ4qg+AXSDNGabbWXZ2wA6Qjabqg136hhHK6y60V8o2EGyl8/qHHpKZPGkYeQzyvIa9RM86XvFhjvOGQsxGIp2B50ZDJLuG2XZqnLO5rM3viGh9o0OZJon1bRLxxdHLcns1jJiYOAu2U0D2P0uStMXJdcVU+UdMlZ/NYgaA28ERg5ge5/R4l6VsjrANMWJiZJWeXnqm60vnxW90ul6u8ByaS4zX2i+S+qjGuGkrdSEWFzT1vlhlSC19Gui0UtnNriSfi6vX1ZWRjPcLEeGrzYqkb4SyvQGxvQnC93cF6BzIfx8gpYBsfSdycuei4AAR1ggugCCRh1lbugIF4vwXbhtisjfSDc+ARSOOf4lv6mNWv1VIj1ouQNF9K851gDzArtWbV1uYxS5o4zB+sp+AuKPC+cVv5RXwPuATMmUpreY1Wopgh+ybYKj4dFHWB+8DMwTZTjCHmsJUhEgfAF9DMcQtx9V8dHMyDqWZ2ENM2FL8yVV92kkY56GM5Lc6Z1vY0jbp5EJQnuqPLg4kdLWTCnIxVIJoDi4wweNYcbbGIfuLEjRxqMRNGbvTvsmyE22oZg70taKQn1BxekXw40GKfK0O9oZHsJ8ZCRbLPaI3xP7YzeQoHxWckAAAAAElFTkSuQmCC" - webUI["html/img/xmltv.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0yOFQyMDowNzozMzwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Co6j9bsAAAGgSURBVGgF7VqxTsNADL0gYGEon8DOwsbAAH8BYmJn6cYIn8DC3h0+oixISFRiYYCJL0AwMMBAeK5w2rpV6uikxHfYknW98+vds18TK21DWGBlWR7CH+BfcEv2AzLP8HP42gLqkyUATuEp2PWEdQjF9ATs1zF/g29Mrxt+vVcUxR3xWxEktzFPJQmivsv8ZSI9DiQyVnxlIonwn6fpiczXpNuVVXH8O+a3Ys3y9NUyuf/NTTbEHZTjUlGSRzSiPhroUIENwB4AS/vS/susDwDhTpYBER9g7wHh5DWyibV9CiitCZbIafDEYUuJHQI3Nr/9ciWsjK6IFSWYhyvClbAyZqOIlYJG84jq7E1Ot97Zm+TinV1TrWwudk9EI3ebGFekzWprzspGEU2ySWCiOrs/s9dr7M/s9fVJJJrNXcsTsfaJc0WsKZINH+/sf1Jqvl1n1f2ZnStRN/pdq646XcSkIh9dkIg4s+IrE3nCpp8RG7f91ns+cCYR/LD4jcAZB42PN+A7/mcQ8ZxJhBYQvMJwBB/BKTFLVoLMC/wCfgyv7BesTKUC2LKM3wAAAABJRU5ErkJggg==" - webUI["html/js/classes_ts.js"] = "dmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkgewogICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikgewogICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwKICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fAogICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTsKICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTsKICAgIH07CiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHsKICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpOwogICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfQogICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTsKICAgIH07Cn0pKCk7CnZhciBNYWluTWVudSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKICAgIGZ1bmN0aW9uIE1haW5NZW51KCkgewogICAgICAgIHRoaXMuRG9jdW1lbnRJRCA9ICJtYWluLW1lbnUiOwogICAgICAgIHRoaXMuSFRNTFRhZyA9ICJMSSI7CiAgICB9CiAgICBNYWluTWVudS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gKCkgewogICAgICAgIGNvbnNvbGUubG9nKHRoaXMuRG9jdW1lbnRJRCk7CiAgICB9OwogICAgcmV0dXJuIE1haW5NZW51Owp9KCkpOwp2YXIgTWFpbk1lbnVJdGVtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgewogICAgX19leHRlbmRzKE1haW5NZW51SXRlbSwgX3N1cGVyKTsKICAgIGZ1bmN0aW9uIE1haW5NZW51SXRlbSgpIHsKICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CiAgICB9CiAgICBNYWluTWVudUl0ZW0ucHJvdG90eXBlLmNyZWF0ZTIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuSFRNTFRhZyk7CiAgICAgICAgZWxlbWVudC5pbm5lclRleHQgPSB0aGlzLlZhbHVlOwogICAgICAgIGNvbnNvbGUubG9nKGVsZW1lbnQpOwogICAgfTsKICAgIHJldHVybiBNYWluTWVudUl0ZW07Cn0oTWFpbk1lbnUpKTsKZnVuY3Rpb24gcGFnZVJlYWR5KCkgewogICAgdmFyIGl0ZW0gPSBuZXcgTWFpbk1lbnVJdGVtKCk7CiAgICBpdGVtLlZhbHVlID0gIlRlc3QiOwogICAgaXRlbS5jcmVhdGUyKCk7Cn0K" - webUI["html/js/configuaration.js"] = "dmFyIGNvbmZpZ01lbnUgPSBuZXcgT2JqZWN0KCk7CnZhciB3aXphcmQgPSBuZXcgQXJyYXkoImtleSIsICJ0dW5lciIsICJlcGdTb3VyY2UiLCAibTN1IiwgImNvbXBsZXRlIik7CnZhciBhY3RpdmVXaXphcmQ7CnZhciBkdnJJUAoKdmFyIGNvbmZpZ01lbnVfdHVuZXIgPSBuZXcgT2JqZWN0KCk7CmNvbmZpZ01lbnVfdHVuZXJbIl9lbGVtZW50Il0gPSAiU0VMRUNUIjsKY29uZmlnTWVudV90dW5lclsiX21lbnVUeXBlIl0gPSAic2luZ2xlSW5wdXQiOwpjb25maWdNZW51X3R1bmVyWyJfY29uZmlnS2V5Il0gPSAidHVuZXIiOwpjb25maWdNZW51X3R1bmVyWyJfbGFiZWwiXSA9ICJBdmFpbGFibGUgdHVuZXJzIjsKY29uZmlnTWVudV90dW5lclsibmFtZSJdID0gInR1bmVyIjsKY29uZmlnTWVudV90dW5lclsiaWQiXSA9ICJUdW5lciI7CmNvbmZpZ01lbnVfdHVuZXJbInBsYWNlaG9sZGVyIl0gPSAiVHVuZXIiOwpjb25maWdNZW51X3R1bmVyWyJfdXNhZ2UiXSA9ICJUaGlzIHNldHRpbmcgaXMgb25seSB1c2VkIGJ5IFBsZXggYW5kIEVtYnkuPGJyPlRoZSBudW1iZXIgb2YgY29uY3VycmVudCBzdHJlYW1zIGFsbG93ZWQgYnkgdGhlIElQVFYgcHJvdmlkZXIuIgoKCnZhciBvcHRpb25WYWx1ZXMgPSBuZXcgQXJyYXkoKTsKZm9yICh2YXIgaSA9IDE7IGkgPD0gMTAwOyBpKyspIHsKICBvcHRpb25WYWx1ZXMucHVzaChpKQp9CmNvbmZpZ01lbnVfdHVuZXJbIl9vcHRpb25WYWx1ZXMiXSA9IG9wdGlvblZhbHVlczsKCnZhciBjb25maWdNZW51X2VwZyA9IG5ldyBPYmplY3QoKTsKY29uZmlnTWVudV9lcGdbIl9lbGVtZW50Il0gPSAiU0VMRUNUIjsKY29uZmlnTWVudV9lcGdbIl9tZW51VHlwZSJdID0gInNpbmdsZUlucHV0IjsKY29uZmlnTWVudV9lcGdbIl9jb25maWdLZXkiXSA9ICJlcGdTb3VyY2UiOwpjb25maWdNZW51X2VwZ1siX2xhYmVsIl0gPSAiU2VsZWN0aW9uIG9mIHRoZSBFUEcgc291cmNlIjsKY29uZmlnTWVudV9lcGdbIm5hbWUiXSA9ICJlcGdTb3VyY2UiOwpjb25maWdNZW51X2VwZ1siaWQiXSA9ICJFUEcgc291cmNlIjsKY29uZmlnTWVudV9lcGdbInBsYWNlaG9sZGVyIl0gPSAiRVBHIHNvdXJjZSI7CmNvbmZpZ01lbnVfZXBnWyJfb3B0aW9uVmFsdWVzIl0gPSBuZXcgQXJyYXkoIlBNUyIsICJYRVBHIik7CmNvbmZpZ01lbnVfZXBnWyJfdXNhZ2UiXSA9ICJQTVM6ICAgVXNlIEVQRyBkYXRhIGZyb20gUGxleCBvciBFbWJ5PGJyPlhFUEc6ICBVc2Ugb2YgZXh0ZXJuYWwgRVBHIGRhdGEgKFhNTFRWKTxicj4gICAgICAgU2V2ZXJhbCBYTUxUViBzb3VyY2VzIHBvc3NpYmxlPGJyPiAgICAgICBBbGxvd3MgZWRpdGluZyBhbmQgb3JkZXIgY2hhbm5lbHM8YnI+ICAgICAgIE0zVSAvIFhNTFRWIGV4cG9ydCAoSFRUUCBsaW5rIGZvciBJUFRWIGFwcHMpIgoKdmFyIGNvbmZpZ01lbnVfbTN1ID0gbmV3IE9iamVjdCgpOwpjb25maWdNZW51X20zdVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CmNvbmZpZ01lbnVfbTN1WyJfbWVudVR5cGUiXSA9ICJpbnB1dEFycmF5IjsKY29uZmlnTWVudV9tM3VbIl9jb25maWdLZXkiXSA9ICJmaWxlIjsKY29uZmlnTWVudV9tM3VbIl9sYWJlbCJdID0gIk0zVSBGaWxlOiBsb2NhbCBvciByZW1vdGUiOwpjb25maWdNZW51X20zdVsibmFtZSJdID0gImZpbGUiOwpjb25maWdNZW51X20zdVsiaWQiXSA9ICJtM3UiOwpjb25maWdNZW51X20zdVsidHlwZSJdID0gInRleHQiOwpjb25maWdNZW51X20zdVsicGxhY2Vob2xkZXIiXSA9ICJNM1UgRmlsZSI7CmNvbmZpZ01lbnVfbTN1WyJfdXNhZ2UiXSA9ICJSZW1vdGUgcGxheWxpc3Q6IGh0dHA6Ly95b3VyLnByb3ZpZGVyLmNvbS9maWxlLm0zdTxicj5Mb2NhbCAgcGxheWxpc3Q6IC9wYXRoL3RvL2ZpbGUubTN1IgoKCmNvbmZpZ01lbnVfbTN1WyJ2YWx1ZSJdID0gImh0dHA6Ly93ZWJzcnYubG9jYWw6ODA4MC9rYWJlbC5tM3UiOwoKdmFyIGNvbmZpZ01lbnVfY29tcGxldGUgPSBuZXcgT2JqZWN0KCk7CmNvbmZpZ01lbnVfY29tcGxldGVbIl9lbGVtZW50Il0gPSAiSDIiOwpjb25maWdNZW51X2NvbXBsZXRlWyJfbWVudVR5cGUiXSA9ICJpbnB1dEFycmF5IjsKY29uZmlnTWVudV9jb21wbGV0ZVsiX2NvbmZpZ0tleSJdID0gImZpbGUiOwpjb25maWdNZW51X2NvbXBsZXRlWyJfdGV4dCJdID0gIlRocmVhZGZpbiB3YXMgc3VjY2Vzc2Z1bGx5IHNldCB1cCI7CmNvbmZpZ01lbnVfY29tcGxldGVbIm5hbWUiXSA9ICJjb21wbGV0ZSI7CmNvbmZpZ01lbnVfY29tcGxldGVbImlkIl0gPSAiY29tcGxldGUiOwpjb25maWdNZW51X2NvbXBsZXRlWyJ0eXBlIl0gPSAidGV4dCI7CmNvbmZpZ01lbnVfY29tcGxldGVbImNsYXNzIl0gPSAiY2VudGVyIjsKCmNvbmZpZ01lbnVbInR1bmVyIl0gPSBjb25maWdNZW51X3R1bmVyOwpjb25maWdNZW51WyJlcGdTb3VyY2UiXSA9IGNvbmZpZ01lbnVfZXBnOwpjb25maWdNZW51WyJtM3UiXSA9IGNvbmZpZ01lbnVfbTN1Owpjb25maWdNZW51WyJjb21wbGV0ZSJdID0gY29uZmlnTWVudV9jb21wbGV0ZTsKCmZ1bmN0aW9uIHJlYWR5Rm9yQ29uZmlndXJhdGlvbigpIHsKICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICBkYXRhWyJjbWQiXSA9ICJnZXRTZXJ2ZXJDb25maWciOwogIFRocmVhZGZpbihkYXRhKTsKICBzaG93TG9hZGluZ1NjcmVlbihmYWxzZSk7Cn0KCmZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oZWxtKSB7CgogIGFjdGl2ZVdpemFyZCA9IGVsbTsKICB2YXIgaXRlbSA9IGNvbmZpZ01lbnVbZWxtXTsKCiAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50Iik7CiAgZGl2LmlubmVySFRNTCA9ICIiOwogIGRpdi5zZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlnS2V5IiwgaXRlbVsiX2NvbmZpZ0tleSJdKTsKICBkaXYuc2V0QXR0cmlidXRlKCJkYXRhLW1lbnVUeXBlIiwgaXRlbVsiX21lbnVUeXBlIl0pOwoKICBzd2l0Y2ggKGl0ZW0uaGFzT3duUHJvcGVydHkoIl9sYWJlbCIpKSB7CiAgICBjYXNlIHRydWU6CiAgICAgIHZhciBuZXdJdGVtID0gbmV3IE9iamVjdCgpOwogICAgICBuZXdJdGVtWyJfZWxlbWVudCJdID0gIkxBQkVMIjsKICAgICAgbmV3SXRlbVsiX3RleHQiXSA9IGl0ZW1bIl9sYWJlbCJdOwogICAgICBuZXdJdGVtWyJmb3IiXSA9IGl0ZW1bImlkIl07CiAgICAgIGRpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0l0ZW0pKTsKICAgICAgYnJlYWsKICB9CgogIHN3aXRjaCAoaXRlbVsiX2VsZW1lbnQiXSkgewogICAgY2FzZSAiU0VMRUNUIjoKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoaXRlbSkpOwogICAgICB2YXIgc2VsZWN0RWxlbWVudCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiU0VMRUNUIilbMF07CiAgICAgIHZhciB2YWx1ZXMgPSBpdGVtWyJfb3B0aW9uVmFsdWVzIl07CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdDsKICAgICAgICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJPUFRJT04iOwogICAgICAgIG5ld0VudHJ5WyJfdGV4dCJdID0gaXRlbVsiaWQiXSArICI6ICIgKyB2YWx1ZXNbaV07CiAgICAgICAgbmV3RW50cnlbInZhbHVlIl0gPSB2YWx1ZXNbaV07CiAgICAgICAgc2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CiAgICAgIH0KICAgICAgLy9yZXR1cm4KICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoaXRlbSkpOwogICAgICBicmVhazsKCgogIH0KICAvL2FsZXJ0KCkKCiAgc3dpdGNoIChpdGVtLmhhc093blByb3BlcnR5KCJfdXNhZ2UiKSkgewogICAgY2FzZSB0cnVlOgogICAgICB2YXIgdXNhZ2VJdGVtID0gbmV3IE9iamVjdCgpOwogICAgICB1c2FnZUl0ZW1bIl9lbGVtZW50Il0gPSAiUFJFIgogICAgICB1c2FnZUl0ZW1bIl90ZXh0Il0gPSBpdGVtWyJfdXNhZ2UiXTsKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQodXNhZ2VJdGVtKSk7CiAgfQoKICBpZiAoYWN0aXZlV2l6YXJkID09ICJjb21wbGV0ZSIpIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuZXh0IikudmFsdWUgPSAiRmluaXNoZWQiCiAgICAvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuZXh0Iikuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImphdmFzY3JpcHQ6IGxvY2F0aW9uLnJlbG9hZCgpOyIpCiAgfQoKICAvL2Rpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KGl0ZW0pKTsKfQoKZnVuY3Rpb24gc2F2ZURhdGEoKSB7CgogIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpOwogIHZhciBpbnB1dHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIik7CiAgdmFyIHNlbGVjdHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlNFTEVDVCIpOwogIHZhciB2YWx1ZTsKICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICB2YXIgdmFsdWVBcnIgPSBuZXcgQXJyYXkoKTsKICB2YXIgbmV3RGF0YSA9IGZhbHNlOwoKICBpZiAoYWN0aXZlV2l6YXJkID09ICJjb21wbGV0ZSIpIHsKICAgIGRhdGFbImNtZCJdID0gIndpemFyZENvbXBsZXRlZCI7CiAgICBzaG93TG9hZGluZ1NjcmVlbih0cnVlKQogICAgVGhyZWFkZmluKGRhdGEpOwogICAgcmV0dXJuCiAgfQoKICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgdmFyIG1lbnVUeXBlID0gaW5wdXRzW2ldLnBhcmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLW1lbnV0eXBlIik7CiAgICBpZiAoaW5wdXRzW2ldLnZhbHVlICE9IHVuZGVmaW5lZCAmJiBpbnB1dHNbaV0udmFsdWUgIT0gIiIpIHsKICAgICAgbmV3RGF0YSA9IHRydWU7CgogICAgICBjb25zb2xlLmxvZyhpbnB1dHNbaV0uaWQpCiAgICAgIHN3aXRjaCAoaW5wdXRzW2ldLmlkKSB7CiAgICAgICAgY2FzZSAibTN1IjoKICAgICAgICAgIHZhciBuZXdQbGF5bGlzdCA9IG5ldyBPYmplY3QoKTsKICAgICAgICAgIG5ld1BsYXlsaXN0WyJmaWxlLnNvdXJjZSJdID0gaW5wdXRzW2ldLnZhbHVlOwogICAgICAgICAgLy9uZXdQbGF5bGlzdFsibmFtZSJdID0gaW5wdXRzW2ldLnZhbHVlOwogICAgICAgICAgbmV3UGxheWxpc3RbInR5cGUiXSA9ICJtM3UiOwogICAgICAgICAgbmV3UGxheWxpc3RbIm5ldyJdID0gdHJ1ZTsKCiAgICAgICAgICBkYXRhWyJmaWxlcyJdID0gbmV3IE9iamVjdCgpOwogICAgICAgICAgZGF0YVsiZmlsZXMiXVsibTN1Il0gPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgICBkYXRhWyJmaWxlcyJdWyJtM3UiXVsiLSJdID0gbmV3UGxheWxpc3Q7CgogICAgICAgICAgZGF0YVsiY21kIl0gPSAic2F2ZUZpbGVzTTNVIjsKICAgICAgICAgIFRocmVhZGZpbihkYXRhKQogICAgICAgICAgcmV0dXJuCiAgICAgIH0KICAgICAgLyoKICAgICAgc3dpdGNoKG1lbnVUeXBlKSB7CiAgICAgICAgY2FzZSAic2luZ2xlSW5wdXQiOgogICAgICAgICAgZGF0YVtpbnB1dHNbaV0ubmFtZV0gPSBpbnB1dHNbaV0udmFsdWU7IGJyZWFrOwogICAgICAgIGNhc2UgImlucHV0QXJyYXkiOiAKICAgICAgICAgIHZhbHVlQXJyLnB1c2goaW5wdXRzW2ldLnZhbHVlKTsKICAgICAgICAgIGRhdGFbaW5wdXRzW2ldLm5hbWVdID0gdmFsdWVBcnI7IGJyZWFrCgogICAgICB9CiAgICAgICovCiAgICB9IGVsc2UgewogICAgICBpbnB1dHNbaV0uc3R5bGUuYm9yZGVyQm90dG9tQ29sb3IgPSAicmVkIjsKICAgICAgcmV0dXJuOwogICAgfQogIH0KCgogIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0cy5sZW5ndGg7IGkrKykgewogICAgdmFyIHZhbHVlID0gc2VsZWN0c1tpXS5vcHRpb25zW3NlbGVjdHNbaV0uc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgICBpZiAoaXNOYU4odmFsdWUpID09IGZhbHNlKSB7CiAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpOwogICAgICBkYXRhW3NlbGVjdHNbaV0ubmFtZV0gPSB2YWx1ZTsKICAgICAgbmV3RGF0YSA9IHRydWU7CiAgICAgIGJyZWFrOwogICAgfQogICAgZGF0YVtzZWxlY3RzW2ldLm5hbWVdID0gdmFsdWU7CiAgICBuZXdEYXRhID0gdHJ1ZTsKICB9CgoKICAvL2NvbnNvbGUubG9nKGRhdGEsIG5ld0RhdGEpOwogIGlmIChuZXdEYXRhID09IHRydWUpIHsKICAgIGNvbmZpZyA9IGRhdGEKICAgIGRhdGFbImNtZCJdID0gInNhdmVDb25maWciOwogICAgVGhyZWFkZmluKGRhdGEpOwogIH0KfQoKZnVuY3Rpb24gVGhyZWFkZmluKGRhdGEpIHsKCiAgaWYgKHdlYlNvY2tldHMgPT0gZmFsc2UpIHsKICAgIGFsZXJ0KCJZb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBXZWJTb2NrZXRzIik7CiAgICByZXR1cm47CiAgfQoKICBpZiAoYWN0aXZlV2l6YXJkID09ICJtM3UiIHx8IGFjdGl2ZVdpemFyZCA9PSAiZXBnU291cmNlIikgewogICAgc2hvd0xvYWRpbmdTY3JlZW4odHJ1ZSk7CiAgfQoKICB2YXIgcHJvdG9jb2xXUwogIHN3aXRjaCAod2luZG93LmxvY2F0aW9uLnByb3RvY29sKSB7CiAgICBjYXNlICJodHRwOiI6IHByb3RvY29sV1MgPSAid3M6Ly8iOyBicmVhazsKICAgIGNhc2UgImh0dHBzOiI6IHByb3RvY29sV1MgPSAid3NzOi8vIjsgYnJlYWs7CiAgfQoKICB2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHByb3RvY29sV1MgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAiOiIgKyB3aW5kb3cubG9jYXRpb24ucG9ydCArICIvZGF0YS8iICsgIj9Ub2tlbj0iICsgZ2V0Q29va2llKCJUb2tlbiIpKTsKCiAgd3Mub25vcGVuID0gZnVuY3Rpb24gKCkgewogICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgfQoKICB3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkgewoKICAgIHZhciByZXNwb25zZSA9IEpTT04ucGFyc2UoZS5kYXRhKTsKCiAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoImNsaWVudEluZm8iKSkgewogICAgICBjcmVhdGVDbGludEluZm8ocmVzcG9uc2VbImNsaWVudEluZm8iXSk7CiAgICB9CgogICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJzdGF0dXMiKSkgewogICAgICBpZiAocmVzcG9uc2VbInN0YXR1cyJdID09IGZhbHNlKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhlYWRsaW5lIikuc3R5bGUuYm9yZGVyQ29sb3IgPSAicmVkIjsKICAgICAgICBzaG93RXJyKHJlc3BvbnNlWyJlcnIiXSk7CiAgICAgICAgc2hvd0xvYWRpbmdTY3JlZW4oZmFsc2UpCiAgICAgICAgcmV0dXJuCiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVyciIpLmlubmVySFRNTCA9ICIiOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoZWFkbGluZSIpLnN0eWxlLmJvcmRlckNvbG9yID0gImxhd25ncmVlbiI7CiAgICAgIH0KCiAgICAgIGR2cklQID0gcmVzcG9uc2VbIkRWUiJdCiAgICAgIHN3aXRjaCAocmVzcG9uc2VbImNvbmZpZ3VyYXRpb25XaXphcmQiXSkgewogICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgIGlmIChhY3RpdmVXaXphcmQgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGFjdGl2ZVdpemFyZCA9IHdpemFyZFswXQogICAgICAgICAgfQogICAgICAgICAgdmFyIG4gPSB3aXphcmQuaW5kZXhPZihhY3RpdmVXaXphcmQpOwogICAgICAgICAgbisrOwogICAgICAgICAgYWN0aXZlV2l6YXJkID0gd2l6YXJkW25dCgogICAgICAgICAgaWYgKGFjdGl2ZVdpemFyZCA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgZGF0YVsiY21kIl0gPSAid2l6YXJkQ29tcGxldGVkIjsKICAgICAgICAgICAgVGhyZWFkZmluKGRhdGEpCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvL2NvbnNvbGUubG9nKGFjdGl2ZVdpemFyZCk7CiAgICAgICAgICAgIGNyZWF0ZUNvbmZpZ3VyYXRpb24oYWN0aXZlV2l6YXJkKTsKICAgICAgICAgIH0KCiAgICAgICAgICBicmVhazsKICAgICAgfQoKICAgICAgc3dpdGNoIChyZXNwb25zZVsicmVsb2FkIl0pIHsKCgogICAgICAgIGNhc2UgdHJ1ZToKCiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICB9LCAxMDApOwoKICAgICAgICAgIC8vbG9jYXRpb24ucmVsb2FkKCk7CgogICAgICAgICAgYnJlYWs7CgogICAgICB9CgoKICAgIH0KCiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2hvd0xvYWRpbmdTY3JlZW4oZmFsc2UpOyB9LCAzMDApOwogIH0KCn0KCmZ1bmN0aW9uIHNob3dFcnIoZWxtKSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVyciIpLmlubmVySFRNTCA9IGVsbTsKfQ==" - webUI["html/img/settings.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wOC0xMFQxODowODo4OTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Ckxt87EAAAS7SURBVGgFzZpdiFVVGIbn5N+IMgVhaRLqWI7mQIJoIVRgOhQZNDAhWcbcVuPV3BRE6I14440iQQSaN0p6kz8zI0k5inUhZSSaYOVYODMo5eiMOOPf+LzH2cPMPmvttdbe53jOBy9rr2+938/ae51vr733qaoqgQwPD68B/wDJfXAP3AE94JMShCy+SxJ9CvSDJFlU7MiPFdsh/hrBdIffBsd48HApJjLPI4tnPThBlFJMZI5HBuWZCIt9AmgEzeAJR6JzHeMadnKI8wbYCz4Fkz18JlNwMgf8BCL5j4O3bVaMdUfEhPZqgv1U7HbEbDvoT7HZOPUYNwAlHheV09a4A3RTgMqtj9QY7JdgeM5i3I4+fDIYrQeq/UnyNYOTlBDtS+BwEjk2doz+KyO2OY5bwVCME+/qylTHT4C1D3k+uB33Yul3ov/eMuajlu1RH+II5wtT4hNNSnQ6U/kzbRkfq351bCfF8apAm7kmvq38njWRK0S305SHcSK5XO4U5O9MBmXWbSe3E6YccialdKzH2TTnQEF10XgZ5DdivsxEhkyxjVdERAwu03xmMiqD7hYx19km4cyHq6KyeHKkWpSz+ciVrHVpRYZk/wLHp0H2bULkNKzt4Eq86TKxLq3IECf6nXwV9QPbAfjHQSfoD7SN6L63gYhvbrkiTwKf/dPYpbdPVxKMnigdg0VAG8FQye8AzBl6aIk2A+wPiNoHd63LNZx3wbUAvz/CfTzJb/43AmkGpLfAi0DPE/NALQgtve+xFPdi5xRiNkHa5ySOJ/TR7RrBJdqL4AAxL+p+8ToYAFklNCnF3pM1KPba2L6v8vons5oPsko9ZyZoa0PsOoKezxoY+y5N5DYHWSvDTXzUMJH7IUkRW0tbyyV0CcfDDKmqDMe1KfqnQyehGNgo9q8p4hWYFGsiBY4fsSK/BRkkaPgj5PhMy720BnVFesfnlKo3Das0bw8XYJf196GEuzWRLSDoRypLg2w06FyqTS6Cx7iK1eeqGqrnugmuBgvB8+A5UAuqQYiU+oZ4h2T+BV3gAlDp/pai0U1rFpVGMAv8AHzFd4vShMOQLcoB+DNB/sSbM3ZoMV4BQsW0adSJSbNp1Hu1mY40/YZxpPdJaUSfFzrBMXAjjQNsdvll6cHCWVvKJIphdhcny11pqmolCk5aIDif0BKdZBucgPlO8kh/r8O4HtwClSCbk86HtQqQuUrvKVCf5OARjt0lll4H/WKKmbS0tmJQKZNQ7nq9+w0n2LhTN04E8jKMPpZ1hcli8tGTZYEYJwJrZQGzchTGz3a2ifwdkHc73LYAfpx6DcWXQK1LeiDsdpFGx7UOwUGQJKpmGyIjjvWh50iSQWzsZ/ofgvx+jnYp+B/YpJcB7QXDBKPJ4JDF6+/oCwoBuhoL36R+Jp4RJH16u2IgaxJpHhMehsBY3wTjV2YbOuuumLHrwCW6msbSj74O/DHGgV4Ohl8Jw1nSMmsB+tL6Wnw83odzBrhEr2GtgvFE8A74ADxtJZZygMC25cjQqBwqdg62qpUlziUP45Cq6OGuqqoUE/FJ8i+v7MpJYvEsHl1A5gNty2vLmaN3bBLdAvqB3svqXxLRvyEuc9zs7SiA+ACpw05pJx8SoAAAAABJRU5ErkJggg==" - webUI["html/css/screen.css"] = "bmF2IGltZyB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWF4LWhlaWdodDogMjBweDsKICBtYXgtd2lkdGg6IDIwcHg7CiAgZmxvYXQ6IGxlZnQ7Cn0KCm5hdiBwIHsKICB0ZXh0LWFsaWduOiBsZWZ0OwogIHBhZGRpbmc6IDBweCAzMHB4Owp9CgojbGF5b3V0IHsKICBkaXNwbGF5OiBibG9jazsKICBoZWlnaHQ6IDEwMCU7Cn0KCi5mb3JtLWNvbnRyb2w6ZGlzYWJsZWQgewogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Owp9CgoubGF5b3V0LWxlZnQgewogIGRpc3BsYXk6IGJsb2NrOwogIG1pbi13aWR0aDogMTUwcHg7CiAgbWF4LXdpZHRoOiAyMCU7CiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsKICBoZWlnaHQ6IGluaGVyaXQ7CiAgZmxvYXQ6IGxlZnQ7Cn0KCi5sYXlvdXQtcmlnaHQgewogIGRpc3BsYXk6IGJsb2NrOwogIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7Cn0KCiNtZW51LXdyYXBwZXIgewogIGhlaWdodDogMTAwJTsKfQoKCiNsb2dvIHsKICBkaXNwbGF5OiBibG9jazsKICBtaW4td2lkdGg6IDE4MHB4OwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwcHg7CiAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvdGhyZWFkZmluLnBuZyIpOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOwogIGJhY2tncm91bmQtc2l6ZTogMTAwJTsKfQoKCiNwYWdlIHsKICBtYXgtd2lkdGg6IDk1MHB4OwogIG1hcmdpbjogYXV0bzsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0OwoKICAvKgogIGhlaWdodDogLXdlYmtpdC1jYWxjKDEwMCUgLSAxMzBweCk7CiAgaGVpZ2h0OiAtbW96LWNhbGMoMTAwJSAtIDEzMHB4KTsKICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDEzMHB4KTsKICAqLwoKICBtaW4taGVpZ2h0OiAtd2Via2l0LWNhbGMoMTAwJSAtIDEyMHB4KTsKICBtaW4taGVpZ2h0OiAtbW96LWNhbGMoMTAwJSAtIDEyMHB4KTsKICBtaW4taGVpZ2h0OiBjYWxjKDEwMCUgLSAxMjBweCk7CgoKICBib3gtc2hhZG93OiAwcHggNXB4IDVweCAjMjIyOwoKfQoKI3VpU2V0dGluZyB7CiAgZmxvYXQ6IHJpZ2h0OwogIG1hcmdpbi1yaWdodDogMjVweDsKfQoKI2JveCBpbnB1dFt0eXBlPXRleHRdLAojYm94IGlucHV0W3R5cGU9cGFzc3dvcmRdIHsKICB3aWR0aDogLXdlYmtpdC1jYWxjKDEwMCUgLSAyMHB4KTsKICB3aWR0aDogLW1vei1jYWxjKDEwMCUgLSAyMHB4KTsKICB3aWR0aDogY2FsYygxMDAlIC0gMjBweCk7Cn0KCiNib3ggaW5wdXRbdHlwZT1zdWJtaXRdIHsKICBtYXJnaW46IDUwcHggYXV0bzsKfQoKI3NldHRpbmdzIHsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nOiAxMHB4IDEwcHg7Cn0KCiNzZXR0aW5ncyBoNSB7CiAgbWFyZ2luOiA1MHB4IDBweCAxMHB4IDBweDsKfQoKI2NvbnRlbnQtaW50ZXJhY3Rpb24gLnNlYXJjaCB7CiAgd2lkdGg6IDIwMHB4OwogIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7CiAgcGFkZGluZzogOXB4OwogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7CiAgbWFyZ2luOiAxMHB4OwogIGZsb2F0OiByaWdodDsKICBib3JkZXItcmFkaXVzOiAzcHg7Cgp9CgojbXlTdHJlYW1zIHsKICBwb3NpdGlvbjogZml4ZWQ7CiAgYm90dG9tOiAwcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsKICB3aWR0aDogMTAwJTsKICBtYXgtd2lkdGg6IDk1MHB4OwoKICAvKgogIG1heC1oZWlnaHQ6IDEwMHB4OwogICovCiAgbWFyZ2luLWJvdHRvbTogMHB4Owp9CgojbXlTdHJlYW1zIGltZyB7CiAgd2lkdGg6IDQlOwogIHBhZGRpbmc6IDJweCA1cHg7CiAgY3Vyc29yOiBwb2ludGVyOwogIGZsb2F0OiByaWdodDsKfQoKI3NldHRpbmdzLWZvb3RlciB7fQoKLnByb2JlRGV0YWlscyB7CiAgCn0KCgovKiBXaXphcmQqLwojYm94IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0OwogIG1pbi1oZWlnaHQ6IDQwMHB4OwoKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwp9CgojYm94IHAgewogIHBhZGRpbmc6IDEwcHggMHB4Owp9CgojYm94LWZvb3RlciB7CiAgbWFyZ2luLXRvcDogYXV0bzsKfQoKI2JveC1mb290ZXIgewogIG1hcmdpbjogYXV0bzsKICBwYWRkaW5nOiAxMHB4Owp9CgojaGVhZGxpbmUgewogIGJhY2tncm91bmQtY29sb3I6ICMyMjI7CiAgYm9yZGVyLWJvdHRvbTogc29saWQgMnB4ICMyMjI7CiAgdHJhbnNpdGlvbjogYWxsIDAuNXM7CiAgcGFkZGluZzogMTBweCAwcHg7CiAgZGlzcGxheTogYmxvY2s7Cn0KCiNjb250ZW50IHsKICBkaXNwbGF5OiBibG9jazsKICBvdmVyZmxvdzogYXV0bzsKICBwYWRkaW5nOiAxMHB4Owp9CgovKiAtLS0gKi8KCgojY2xpZW50SW5mbywKI2FjdGl2ZVN0cmVhbXMsCiNpbmFjdGl2ZVN0cmVhbXMgewogIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAxMnB4OwogIGNvbG9yOiAjMDBFNkZGOwogIHBhZGRpbmc6IDBweDsKfQoKI2FjdGl2ZVN0cmVhbXMgdGhlYWQsCiNpbmFjdGl2ZVN0cmVhbXMgdGhlYWQgewogIGZvbnQtc2l6ZTogMmVtOwp9Cgojb3BlblN0cmVhbXMgewogIHdpZHRoOiAyMHB4OwogIGhlaWdodDogMjAwcHg7CiAgY3Vyc29yOiBwb2ludGVyOwogIGZsb2F0OiByaWdodDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgcmlnaHQ6IDBweDsKICBib3R0b206IDBweDsKICBiYWNrZ3JvdW5kOiB1cmwoIi4uL2ltZy90b3VjaC5wbmciKTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTExOwoKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBib3R0b20gcmlnaHQ7Cn0KCiNhbGxTdHJlYW1zIHsKICBwYWRkaW5nOiAycHg7Cn0KCiNhY3RpdmVTdHJlYW1zLAojaW5hY3RpdmVTdHJlYW1zIHsKICAvKiB3aWR0aDogNTAlOyAqLwogIC8qIGZsb2F0OiBsZWZ0OyAqLwp9CgojYWN0aXZlU3RyZWFtcyAudGRLZXksCiNpbmFjdGl2ZVN0cmVhbXMgLnRkS2V5IHsKICB3aWR0aDogMTE1cHg7CiAgbGV0dGVyLXNwYWNpbmc6IDBweDsKfQoKY2FwdGlvbiB7CiAgY29sb3I6ICNGRkY7CiAgZm9udC1zaXplOiAyZW07Cn0KCi50ZEtleSB7CiAgdGV4dC1hbGlnbjogbGVmdDsKfQoKLnRkVmFsIHsKICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgoubW9kYWwtaGVhZGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyNTI5Owp9Ci5tb2RhbC1ib2R5IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Owp9CgojaW5hY3RpdmVTdHJlYW1zIC50ZEtleSB7CiAgY29sb3I6IHJlZDsKfQoKI2NsaWVudEluZm8gLnRkVmFsLAojbG9nSW5mbyAudGRWYWwsCiNhY3RpdmVTdHJlYW1zIC50ZFZhbCwKI2luYWN0aXZlU3RyZWFtcyAudGRWYWwsCiNtYXBwaW5nSW5mbyAudGRWYWwgewogIGNvbG9yOiAjYWFhOwogIHdoaXRlLXNwYWNlOiBpbmhlcml0Owp9CgojYm94LXdyYXBwZXIgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICB3aWR0aDogMTAwJTsKCiAgb3ZlcmZsb3cteTogc2Nyb2xsOwp9CgojY29udGVudF90YWJsZSwKI2luYWN0aXZlX2NvbnRlbnRfdGFibGUsCiNtYXBwaW5nLWRldGFpbC10YWJsZSwKI2NvbnRlbnRfdGFibGUgewogIGRpc3BsYXk6IHRhYmxlOwogIC0tYnMtdGFibGUtY29sb3I6IG5vbmU7CiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICBvdmVyZmxvdy15OiBzY3JvbGw7Cn0KCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIHsKICBtYXJnaW4tdG9wOiAyJTsKfQoKCiNjb250ZW50X3RhYmxlIC5jb250ZW50X3RhYmxlX2hlYWRlciwKI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgLmluYWN0aXZlX2NvbnRlbnRfdGFibGVfaGVhZGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOwogIGhlaWdodDogNTBweDsKICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggIzExMTsKICBib3JkZXItbGVmdDogc29saWQgM3B4ICMzMzM7CiAgY3Vyc29yOiBhdXRvOwoKfQoKCnRib2R5IHsKICB3aWR0aDogMTAwJTsKfQoKCi50YWJsZUVsbGlwc2lzIHsKICB3aWR0aDogMTUwcHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgojY29udGVudF90YWJsZSBpbWcsCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIGltZyB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwogIG1heC13aWR0aDogNjBweDsKfQoKI2NvbnRlbnRfdGFibGUgdHIsCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIHRyIHsKICBib3JkZXItbGVmdDogc29saWQgM3B4IDQ0NDsKICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggIzMzMzsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCiNjb250ZW50X3RhYmxlIHRyOmhvdmVyLAojaW5hY3RpdmVfY29udGVudF90YWJsZSB0cjpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsKfQoKI2NvbnRlbnRfdGFibGUgdGQsCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIHRkIHsKCiAgcGFkZGluZzogMHB4IDJweDsKfQoKI2NvbnRlbnRfdGFibGUgaW5wdXRbdHlwZT10ZXh0XSwKI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgaW5wdXRbdHlwZT10ZXh0XSB7CiAgd2lkdGg6IDgwJTsKICBtaW4td2lkdGg6IDM1cHg7CiAgbWF4LXdpZHRoOiA2MHB4OwogIGJvcmRlcjogMHB4OwogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7CiAgbWFyZ2luLWxlZnQ6IDVweDsKICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgojY29udGVudF90YWJsZSBpbnB1dFt0eXBlPWNoZWNrYm94XSwKI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgaW5wdXRbdHlwZT1jaGVja2JveF0gewogIG1heC13aWR0aDogMjVweDsKICBtYXJnaW46IGF1dG87Cn0KCgouc2hvd0J1bGsgewogIGRpc3BsYXk6IGJsb2NrOwp9CgouaGlkZUJ1bGsgewogIGRpc3BsYXk6IG5vbmU7Cn0KCi5ub0J1bGsge30KCiNjb250ZW50X3RhYmxlIHRyLmFjdGl2ZUVQRywKI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgdHIuYWN0aXZlRVBHIHsKICBib3JkZXItbGVmdDogc29saWQgM3B4IGxhd25ncmVlbjsKfQoKI2NvbnRlbnRfdGFibGUgdHIubm90QWN0aXZlRVBHLAojaW5hY3RpdmVfY29udGVudF90YWJsZSB0ci5ub3RBY3RpdmVFUEcgewogIGJvcmRlci1sZWZ0OiBzb2xpZCAzcHggcmVkOwp9CgoKI2xvZ1NjcmVlbiBwIHsKICB3aGl0ZS1zcGFjZTogcHJlOwogIGZvbnQtc2l6ZTogMTBweDsKICAvKgogIGxpbmUtaGVpZ2h0OiAxLjZlbTsKICBmb250LWZhbWlseTogIkFyaWFsIiwgc2Fucy1zZXJpZjsKICAqLwogIGxldHRlci1zcGFjaW5nOiAxcHg7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtdmFyaWFudDogbm9ybWFsOwogIGxpbmUtaGVpZ2h0OiAxLjZlbTsKfQoKI21hcHBpbmctZGV0YWlsLAojdXNlci1kZXRhaWwsCiNmaWxlLWRldGFpbCB7CiAgYm94LXNoYWRvdzogMHB4IDVweCA0MHB4ICMwMDA7CiAgbWFyZ2luLXRvcDogMjBweDsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBtYXJnaW4tcmlnaHQ6IGF1dG87CgogIG1heC13aWR0aDogNjAwcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsKICBwYWRkaW5nOiAxMHB4OwogIG92ZXJmbG93OiBhdXRvOwp9CgojZmlsZS1kZXRhaWwgaW5wdXRbdHlwZT10ZXh0XSB7CiAgd2lkdGg6IC13ZWJraXQtY2FsYygxMDAlIC0gMjBweCk7CiAgd2lkdGg6IC1tb3otY2FsYygxMDAlIC0gMjBweCk7CiAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOwp9CgojbWFwcGluZy1kZXRhaWwgaW1nIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXgtaGVpZ2h0OiAzMHB4OwogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9CgojbWFwcGluZy1kZXRhaWwgaW5wdXRbdHlwZT10ZXh0XSwKI2NvbnRlbnRfc2V0dGluZ3MgaW5wdXRbdHlwZT10ZXh0XSwKI2NvbnRlbnRfc2V0dGluZ3MgaW5wdXRbdHlwZT1wYXNzd29yZF0gewogIGJvcmRlcjogc29saWQgMXB4OwogIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsKICB0ZXh0LWFsaWduOiBsZWZ0OwogIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDIwcHgpOwogIHdpZHRoOiAtbW96LWNhbGMoMTAwJSAtIDIwcHgpOwogIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKfQoKI21hcHBpbmctZGV0YWlsLXRhYmxlLAojdXNlci1kZXRhaWwtdGFibGUgewogIGRpc3BsYXk6IGlubGluZS10YWJsZTsKICB3aWR0aDogMTAwJTsKfQoKI2NvbnRlbnRfc2V0dGluZ3MgdGFibGUgewogIGRpc3BsYXk6IGlubGluZS10YWJsZTsKICB0YWJsZS1sYXlvdXQ6IGZpeGVkOwogIHdpZHRoOiAxMDAlOwp9CgoKI21hcHBpbmctZGV0YWlsLXRhYmxlIHRkLAojdXNlci1kZXRhaWwtdGFibGUgdGQgewogIHBhZGRpbmc6IDEwcHggMHB4OwoKfQoKI21hcHBpbmctZGV0YWlsLXRhYmxlIHRkLmxlZnQsCiN1c2VyLWRldGFpbC10YWJsZSB0ZC5sZWZ0IHsKICB3aWR0aDogMzglOwp9CgouaW50ZXJhY3Rpb24sCiNpbnRlcmFjdGlvbiB7CiAgbWFyZ2luLXRvcDogMjBweDsKICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICBmbG9hdDogcmlnaHQ7Cn0KCi5pbnRlcmFjdGlvbiBpbnB1dFt0eXBlPWJ1dHRvbl0sCi5pbnRlcmFjdGlvbiBpbnB1dFt0eXBlPXN1Ym1pdF0gewogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7CiAgbWluLXdpZHRoOiAxMDBweDsKICBtYXJnaW46IDBweCAxMHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKI25vdGlmaWNhdGlvbiB7CiAgZGlzcGxheTogYmxvY2s7CiAgcG9zaXRpb246IGZpeGVkOwogIHJpZ2h0OiAwcHg7CiAgaGVpZ2h0OiAxMDAlOwogIHdpZHRoOiAyNTBweDsKCiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsKICBib3gtc2hhZG93OiAwcHggMHB4IDIwcHggIzAwMDsKfQoKI25vdGlmaWNhdGlvbiBoNSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzEyMTIxMjsKICBwYWRkaW5nOiA1cHggMTBweCA1cHggMTBweDsKfQoKI25vdGlmaWNhdGlvbiBwcmUgewogIHBhZGRpbmc6IDBweCAxMHB4IDBweCAxMHB4Owp9Cgojbm90aWZpY2F0aW9uIHAgewogIGZvbnQtc2l6ZTogMTAgcHg7CiAgbWFyZ2luOiAwcHg7CiAgcGFkZGluZzogMHB4IDEwcHggNXB4IDEwcHg7Cn0KCiNub3RpZmljYXRpb24gLmVsZW1lbnQgewogIC8qcGFkZGluZzogMHB4IDVweDsqLwogIG1hcmdpbjogNXB4IDVweDsKICBib3JkZXItcmFkaXVzOiA1cHg7CiAgYmFja2dyb3VuZC1jb2xvcjogIzE4MTgxODsKICBib3JkZXItbGVmdDogMTBweCBzb2xpZCBncmVlbjsKfQoKCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjIwcHgpIHsKICBib2R5IHsKICAgIHdpZHRoOiAxMDAlOwogICAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsKICB9CgogIGgxIHsKICAgIGZvbnQtc2l6ZTogMjZweDsKICAgIGxldHRlci1zcGFjaW5nOiAzcHg7CiAgfQoKICBuYXYgcCB7CiAgICBkaXNwbGF5OiBibG9jazsKICB9CgoKCiAgI2hlYWRlcl9jb25maWcgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBoZWlnaHQ6IDEwMHB4OwogICAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvbG9nb193XzYwMHgyMDAucG5nIik7CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwoKICAgIGJhY2tncm91bmQtc2l6ZTogMzAwcHggMTAwcHg7CiAgfQoKICAjc2NyZWVuTG9nIHsKICAgIG1hcmdpbi1sZWZ0OiAzMDBweDsKCiAgICB0cmFuc2l0aW9uOiBub25lOwogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggdHJhbnNwYXJlbnQ7CiAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCAjMjIyOwogIH0KCiAgI3NldHRpbmdzIHsKICAgIC8qCiAgICBoZWlnaHQ6IC13ZWJraXQtY2FsYygxMDAlIC0gMTAwcHgpOwogICAgaGVpZ2h0OiAtbW96LWNhbGMoMTAwJSAtIDEwMHB4KTsKICAgIGhlaWdodDogY2FsYygxMDAlIC0gMTAwcHgpOwogICAgKi8KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBhdXRvOwogIH0KCgogIC5zY3JlZW5Mb2dIaWRkZW4gewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAwcHgpOwogIH0KCgogICNib3ggewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtaW4taGVpZ2h0OiA1MDBweDsKICAgIG1heC13aWR0aDogNTAwcHg7CiAgICBtYXJnaW46IDEwcHggYXV0bzsKICAgIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7CiAgICBib3gtc2hhZG93OiAwcHggNXB4IDVweCAjMjIyOwoKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogIH0KCiAgI3NldHRpbmdzLAogICNzZXR0aW5ncy1mb290ZXIge30KfQoKLyoKPT09PT09PT09PT09PT09IApTaWRlYmFyCj09PT09PT09PT09PT09PQoqLwo6cm9vdCB7CiAgLyogZGFyayBzaGFkZXMgb2YgcHJpbWFyeSBjb2xvciovCiAgLS1jbHItcHJpbWFyeS0xOiBoc2woMjA1LCA4NiUsIDE3JSk7CiAgLS1jbHItcHJpbWFyeS0yOiBoc2woMjA1LCA3NyUsIDI3JSk7CiAgLS1jbHItcHJpbWFyeS0zOiBoc2woMjA1LCA3MiUsIDM3JSk7CiAgLS1jbHItcHJpbWFyeS00OiBoc2woMjA1LCA2MyUsIDQ4JSk7CiAgLyogcHJpbWFyeS9tYWluIGNvbG9yICovCiAgLS1jbHItcHJpbWFyeS01OiBoc2woMjA1LCA3OCUsIDYwJSk7CiAgLyogbGlnaHRlciBzaGFkZXMgb2YgcHJpbWFyeSBjb2xvciAqLwogIC0tY2xyLXByaW1hcnktNjogaHNsKDIwNSwgODklLCA3MCUpOwogIC0tY2xyLXByaW1hcnktNzogaHNsKDIwNSwgOTAlLCA3NiUpOwogIC0tY2xyLXByaW1hcnktODogaHNsKDIwNSwgODYlLCA4MSUpOwogIC0tY2xyLXByaW1hcnktOTogaHNsKDIwNSwgOTAlLCA4OCUpOwogIC0tY2xyLXByaW1hcnktMTA6IGhzbCgyMDUsIDEwMCUsIDk2JSk7CiAgLyogZGFya2VzdCBncmV5IC0gdXNlZCBmb3IgaGVhZGluZ3MgKi8KICAtLWNsci1ncmV5LTE6IGhzbCgyMDksIDYxJSwgMTYlKTsKICAtLWNsci1ncmV5LTI6IGhzbCgyMTEsIDM5JSwgMjMlKTsKICAtLWNsci1ncmV5LTM6IGhzbCgyMDksIDM0JSwgMzAlKTsKICAtLWNsci1ncmV5LTQ6IGhzbCgyMDksIDI4JSwgMzklKTsKICAvKiBncmV5IHVzZWQgZm9yIHBhcmFncmFwaHMgKi8KICAtLWNsci1ncmV5LTU6IGhzbCgyMTAsIDIyJSwgNDklKTsKICAtLWNsci1ncmV5LTY6IGhzbCgyMDksIDIzJSwgNjAlKTsKICAtLWNsci1ncmV5LTc6IGhzbCgyMTEsIDI3JSwgNzAlKTsKICAtLWNsci1ncmV5LTg6IGhzbCgyMTAsIDMxJSwgODAlKTsKICAtLWNsci1ncmV5LTk6IGhzbCgyMTIsIDMzJSwgODklKTsKICAtLWNsci1ncmV5LTEwOiBoc2woMjEwLCAzNiUsIDk2JSk7CiAgLS1jbHItd2hpdGU6ICNmZmY7CiAgLS1jbHItcmVkLWRhcms6IGhzbCgzNjAsIDY3JSwgNDQlKTsKICAtLWNsci1yZWQtbGlnaHQ6IGhzbCgzNjAsIDcxJSwgNjYlKTsKICAtLWNsci1ncmVlbi1kYXJrOiBoc2woMTI1LCA2NyUsIDQ0JSk7CiAgLS1jbHItZ3JlZW4tbGlnaHQ6IGhzbCgxMjUsIDcxJSwgNjYlKTsKICAtLWNsci1vcmFuZ2U6IGhzbCgxNCw5MyUsNTMlKTsKICAtLWNsci1ibGFjazogIzIyMjsKICAtLWZmLXByaW1hcnk6ICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogIC0tZmYtc2Vjb25kYXJ5OiAnT3BlbiBTYW5zJywgc2Fucy1zZXJpZjsKICAtLXRyYW5zaXRpb246IGFsbCAwLjNzIGxpbmVhcjsKICAtLXNwYWNpbmc6IDAuMXJlbTsKICAtLXJhZGl1czogMC4yNXJlbTsKICAtLWxpZ2h0LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgLS1kYXJrLXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgLS1tYXgtd2lkdGg6IDExNzBweDsKICAtLWZpeGVkLXdpZHRoOiA2MjBweDsKfQoKLnNpZGViYXItdG9nZ2xlIHsKICBwb3NpdGlvbjogZml4ZWQ7CiAgdG9wOiA0NHJlbTsKICBsZWZ0OiAxMXJlbTsKICBmb250LXNpemU6IDJyZW07CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7CiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7CiAgY3Vyc29yOiBwb2ludGVyOwogIC8qIGFuaW1hdGlvbjogYm91bmNlIDEwcyBlYXNlLWluLW91dCBpbmZpbml0ZTsgKi8KfQouc2lkZWJhci10b2dnbGU6aG92ZXIgewogIGNvbG9yOiB2YXIoLS1jbHItb3JhbmdlKTsKICBhbmltYXRpb246IGV4cGFuZCAuNXMgZWFzZS1pbiBmb3J3YXJkczsKfQouc2lkZWJhci10b2dnbGU6bm90KDpob3ZlcikgewogIGNvbG9yOiB2YXIoLS1jbHItb3JhbmdlKTsKICBhbmltYXRpb246IGNvbGxhcHNlIC41cyBlYXNlLW91dCBmb3J3YXJkczsKfQpAa2V5ZnJhbWVzIGV4cGFuZCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS41KTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMjUpOwogIH0KfQpAa2V5ZnJhbWVzIGNvbGxhcHNlIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMjUpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQp9Cgouc2lkZWJhci1oZWFkZXIgewogIGRpc3BsYXk6IGZsZXg7CiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgcGFkZGluZzogMXJlbSAxLjVyZW07Cn0KLmNsb3NlLWJ0biB7CiAgcG9zaXRpb246IGZpeGVkOwogIHRvcDogNDRyZW07CiAgbGVmdDogNzByZW07CiAgZm9udC1zaXplOiAycmVtOwogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOwogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pOwogIGN1cnNvcjogcG9pbnRlcjsKICBkaXNwbGF5OiBub25lOwp9Ci5jbG9zZS1idG46aG92ZXIgewogIGNvbG9yOiB2YXIoLS1jbHItb3JhbmdlKTsKICBhbmltYXRpb246IGV4cGFuZCAuNXMgZWFzZS1pbiBmb3J3YXJkczsKfQouY2xvc2UtYnRuOm5vdCg6aG92ZXIpIHsKICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7CiAgYW5pbWF0aW9uOiBjb2xsYXBzZSAuNXMgZWFzZS1vdXQgZm9yd2FyZHM7Cn0KLmxvZ28gewogIGp1c3RpZnktc2VsZjogY2VudGVyOwogIGhlaWdodDogNDBweDsKfQoKLmxpbmtzIGEgewogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMS41cmVtOwogIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOwogIHBhZGRpbmc6IDFyZW0gMS41cmVtOwogIGNvbG9yOiB2YXIoLS1jbHItZ3JleS01KTsKICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uKTsKfQoubGlua3MgYTpob3ZlciB7CiAgYmFja2dyb3VuZDogdmFyKC0tY2xyLXByaW1hcnktOCk7CiAgY29sb3I6IHZhcigtLWNsci1wcmltYXJ5LTUpOwogIHBhZGRpbmctbGVmdDogMS43NXJlbTsKfQouc29jaWFsLWljb25zIHsKICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjsKICBkaXNwbGF5OiBmbGV4OwogIHBhZGRpbmctYm90dG9tOiAycmVtOwp9Ci5zb2NpYWwtaWNvbnMgYSB7CiAgZm9udC1zaXplOiAxLjVyZW07CiAgbWFyZ2luOiAwIDAuNXJlbTsKICBjb2xvcjogdmFyKC0tY2xyLXByaW1hcnktNSk7CiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7Cn0KLnNvY2lhbC1pY29ucyBhOmhvdmVyIHsKICBjb2xvcjogdmFyKC0tY2xyLXByaW1hcnktMSk7Cn0KCi5zaWRlYmFyIHsKICBwb3NpdGlvbjogZml4ZWQ7CiAgdG9wOiAwOwogIGxlZnQ6IDA7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwogIGJhY2tncm91bmQ6IHZhcigtLWNsci1ibGFjayk7CiAgZGlzcGxheTogZ3JpZDsKICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gMWZyIGF1dG87CiAgcm93LWdhcDogMXJlbTsKICBib3gtc2hhZG93OiB2YXIoLS1jbHItcmVkLWRhcmspOwogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDAlKTsKfQouc2hvdy1zaWRlYmFyIHsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwKTsKfQouc2hvdy1zaWRlYmFyIC5jbG9zZS1idG4gewogIGRpc3BsYXk6IGJsb2NrOwp9CkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY3NnB4KSB7CiAgLnNpZGViYXIgewogICAgd2lkdGg6IDEwMDBweDsKICB9Cn0KCi5zaWRlYmFyIC5jYXJkIHsKICB3aWR0aDogNDRlbTsKICBtYXJnaW46IDNlbTsKfQouY2FyZCB7CiAgLyogY29sb3I6IHZhcigtLWNsci1ibGFjayk7ICovCiAgYm9yZGVyOiA1cHggc29saWQgdmFyKC0tY2xyLW9yYW5nZSk7Cn0KLyogLmNhcmQgaW5wdXRbdHlwZT10ZXh0XSB7CiAgY29sb3I6IHZhcigtLWNsci1ibGFjayk7CiAgb3V0bGluZTogdmFyKC0tY2xyLWJsYWNrKTsKICBib3JkZXI6IHNvbGlkIDFweCB2YXIoLS1jbHItYmxhY2spOwp9ICovCi5jYXJkIGxhYmVsIHsKICBtYXJnaW4tdG9wOiAyZW07Cn0KLmNhcmQgbGFiZWw6Zmlyc3Qtb2YtdHlwZSB7CiAgbWFyZ2luLXRvcDogMWVtOwp9" - webUI["html/img/BC-QR.png"] = "iVBORw0KGgoAAAANSUhEUgAAALoAAADCCAYAAAD+f9hdAAABWGlDQ1BJQ0MgUHJvZmlsZQAAGJVlkL9LQlEUx79KEZlJUUtQcKEhg4qwITAa1EKSBjEDLRqez+eP0NflvSvm3NIf0d5aYwS1NAQtQRAtQS3N0eD6+j5N1Dxw7vmcL9977+EAXmhSVrwTQNVUVioeFZnsgRj5wjD8CCAMj6bbMpJM7oLRqf3RfIXHrS/L7lszi4FGYvvjyHccm1v4bDqD/r4YzRu2zvrNVLq0FODJk+frSrp8Tp62OBT5wuVim69czrX5oeVJp2LkN3Iw18PFHq5Wavrfv+7EfsPc32PNMGdhI4U4ohBIw4IGk0oBBlmgjjIUSqQtkg2JCh0N9kms8Yyzq6JGz0Ao47Slxk5kwyoXS0pEuCVD7Jj6ypIIrYZCHIA7/7/Lrnb2DmzeOY5z29US98D1OuC76WrBDWByDHh8kpqltaQhprdQAH4ugfEsMPXMO4ed2X4BE0hdOlrLnMgAAADQZVhJZk1NACoAAAAIAAUBEgADAAAAAQABAAABGgAFAAAAAQAAAEoBGwAFAAAAAQAAAFIBMQACAAAAGAAAAFqHaQAEAAAAAQAAAHIAAAAAAAAASAAAAAEAAABIAAAAAUFuZHJvaWQgU1AyQS4yMjA1MDUuMDAyAAAFkAMAAgAAABQAAAC0kBEAAgAAAAcAAADIkpEAAgAAAAQ2MzIAoAIABAAAAAEAAAC6oAMABAAAAAEAAADCAAAAADIwMjI6MDU6MTIgMTQ6NTY6NDEALTA1OjAwAABhL1DGAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD82lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPGV4aWY6T2Zmc2V0VGltZU9yaWdpbmFsPi0wNTowMDwvZXhpZjpPZmZzZXRUaW1lT3JpZ2luYWw+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj43ODY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+ODE4PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6U3Vic2VjVGltZU9yaWdpbmFsPjYzMjwvZXhpZjpTdWJzZWNUaW1lT3JpZ2luYWw+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHBob3Rvc2hvcDpEYXRlQ3JlYXRlZD4yMDIyLTA1LTEyVDE0OjU2OjQxLjYzMjwvcGhvdG9zaG9wOkRhdGVDcmVhdGVkPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFuZHJvaWQgU1AyQS4yMjA1MDUuMDAyPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrFqaA/AABAAElEQVR4Ae3dB7wtSVE/8ENOoqCAAcN7KgJGUAREwCUJCvonSjIsSSSIIElEFEVQREmCIgisqIuEBUEQFVlXVMCAOayRRQUlKaIgEvb9+9vv/s7Wmztzzpx7z9146/M5p3u6q6uqq6urw/TMXOxYg8UhHGrgQq6Bi1/I63dYvUMNdA0cGvqhIVwkNHBo6BeJ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" webUI["html/js/base_ts.js"] = "dmFyIFNFUlZFUiA9IG5ldyBPYmplY3QoKTsKdmFyIEJVTEtfRURJVCA9IGZhbHNlOwp2YXIgQ09MVU1OX1RPX1NPUlQ7CnZhciBJTkFDVElWRV9DT0xVTU5fVE9fU09SVDsKdmFyIFNFQVJDSF9NQVBQSU5HID0gbmV3IE9iamVjdCgpOwp2YXIgVU5ETyA9IG5ldyBPYmplY3QoKTsKdmFyIFNFUlZFUl9DT05ORUNUSU9OID0gZmFsc2U7CnZhciBXU19BVkFJTEFCTEUgPSBmYWxzZTsKY29uc3QgdG9vbHRpcFRyaWdnZXJMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtYnMtdG9nZ2xlPSJ0b29sdGlwIl0nKTsKY29uc3QgdG9vbHRpcExpc3QgPSBbLi4udG9vbHRpcFRyaWdnZXJMaXN0XS5tYXAodG9vbHRpcFRyaWdnZXJFbCA9PiBuZXcgYm9vdHN0cmFwLlRvb2x0aXAodG9vbHRpcFRyaWdnZXJFbCkpOwovLyBuZXcgQ2xpcGJvYXJkSlMoJy5jb3B5LWJ0bicpOwp2YXIgY2xpcGJvYXJkID0gbmV3IENsaXBib2FyZEpTKCcuY29weS1idG4nKTsKY2xpcGJvYXJkLm9uKCdzdWNjZXNzJywgZnVuY3Rpb24gKGUpIHsKICAgIGNvbnN0IHRvb2x0aXAgPSBib290c3RyYXAuVG9vbHRpcC5nZXRJbnN0YW5jZShlLnRyaWdnZXIpOwogICAgdG9vbHRpcC5zZXRDb250ZW50KHsgJy50b29sdGlwLWlubmVyJzogJ0NvcGllZCEnIH0pOwp9KTsKY2xpcGJvYXJkLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlKSB7CiAgICBjb25zb2xlLmxvZyhlKTsKfSk7CnZhciBwb3B1cE1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXAiKSwgewogICAga2V5Ym9hcmQ6IHRydWUsCiAgICBmb2N1czogdHJ1ZQp9KTsKdmFyIGxvYWRpbmdNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmciKSwgewogICAga2V5Ym9hcmQ6IHRydWUsCiAgICBmb2N1czogdHJ1ZQp9KTsKLy8gTWVuw7wKdmFyIG1lbnVJdGVtcyA9IG5ldyBBcnJheSgpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJwbGF5bGlzdCIsICJ7ey5tYWluTWVudS5pdGVtLnBsYXlsaXN0fX0iLCAibTN1LnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5wbGF5bGlzdH19IikpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJ4bWx0diIsICJ7ey5tYWluTWVudS5pdGVtLnhtbHR2fX0iLCAieG1sdHYucG5nIiwgInt7Lm1haW5NZW51LmhlYWRsaW5lLnhtbHR2fX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oImZpbHRlciIsICJ7ey5tYWluTWVudS5pdGVtLmZpbHRlcn19IiwgImZpbHRlci5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUuZmlsdGVyfX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oIm1hcHBpbmciLCAie3subWFpbk1lbnUuaXRlbS5tYXBwaW5nfX0iLCAibWFwcGluZy5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUubWFwcGluZ319IikpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJ1c2VycyIsICJ7ey5tYWluTWVudS5pdGVtLnVzZXJzfX0iLCAidXNlcnMucG5nIiwgInt7Lm1haW5NZW51LmhlYWRsaW5lLnVzZXJzfX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oInNldHRpbmdzIiwgInt7Lm1haW5NZW51Lml0ZW0uc2V0dGluZ3N9fSIsICJzZXR0aW5ncy5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUuc2V0dGluZ3N9fSIpKTsKbWVudUl0ZW1zLnB1c2gobmV3IE1haW5NZW51SXRlbSgibG9nIiwgInt7Lm1haW5NZW51Lml0ZW0ubG9nfX0iLCAibG9nLnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5sb2d9fSIpKTsKbWVudUl0ZW1zLnB1c2gobmV3IE1haW5NZW51SXRlbSgibG9nb3V0IiwgInt7Lm1haW5NZW51Lml0ZW0ubG9nb3V0fX0iLCAibG9nb3V0LnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5sb2dvdXR9fSIpKTsKLy8gS2F0ZWdvcmllbiBmw7xyIGRpZSBFaW5zdGVsbHVuZ2VuCnZhciBzZXR0aW5nc0NhdGVnb3J5ID0gbmV3IEFycmF5KCk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmdlbmVyYWx9fSIsICJUaHJlYWRmaW5BdXRvVXBkYXRlLHNzZHAsdHVuZXIsZXBnU291cmNlLGVwZ0NhdGVnb3JpZXMsZXBnQ2F0ZWdvcmllc0NvbG9ycyxkdW1teSxkdW1teUNoYW5uZWwsaWdub3JlRmlsdGVycyxhcGkiKSk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmZpbGVzfX0iLCAidXBkYXRlLGZpbGVzLnVwZGF0ZSx0ZW1wLnBhdGgsY2FjaGUuaW1hZ2VzLGJpbmRJcEFkZHJlc3MsaHR0cFRocmVhZGZpbkRvbWFpbixmb3JjZUh0dHBzLGh0dHBzUG9ydCxodHRwc1RocmVhZGZpbkRvbWFpbix4ZXBnLnJlcGxhY2UubWlzc2luZy5pbWFnZXMseGVwZy5yZXBsYWNlLmNoYW5uZWwudGl0bGUsZW5hYmxlTm9uQXNjaWkiKSk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LnN0cmVhbWluZ319IiwgImJ1ZmZlcix1ZHB4eSxidWZmZXIuc2l6ZS5rYixzdG9yZUJ1ZmZlckluUkFNLGJ1ZmZlci50aW1lb3V0LHVzZXIuYWdlbnQsZmZtcGVnLnBhdGgsZmZtcGVnLm9wdGlvbnMsZmZtcGVnLmZvcmNlSHR0cCx2bGMucGF0aCx2bGMub3B0aW9ucyIpKTsKc2V0dGluZ3NDYXRlZ29yeS5wdXNoKG5ldyBTZXR0aW5nc0NhdGVnb3J5SXRlbSgie3suc2V0dGluZ3MuY2F0ZWdvcnkuYmFja3VwfX0iLCAiYmFja3VwLnBhdGgsYmFja3VwLmtlZXAiKSk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmF1dGhlbnRpY2F0aW9ufX0iLCAiYXV0aGVudGljYXRpb24ud2ViLGF1dGhlbnRpY2F0aW9uLnBtcyxhdXRoZW50aWNhdGlvbi5tM3UsYXV0aGVudGljYXRpb24ueG1sLGF1dGhlbnRpY2F0aW9uLmFwaSIpKTsKZnVuY3Rpb24gc2hvd1BvcFVwRWxlbWVudChlbG0pIHsKICAgIHNob3dFbGVtZW50KGVsbSwgdHJ1ZSk7CiAgICAvLyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgIC8vICAgc2hvd0VsZW1lbnQoInBvcHVwIiwgdHJ1ZSk7CiAgICAvLyB9LCAxMCk7CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gc2hvd0VsZW1lbnQoZWxtSUQsIHR5cGUpIHsKICAgIGlmIChlbG1JRCA9PSAicG9wdXAtY3VzdG9tIiB8fCBlbG1JRCA9PSAicG9wdXAiKSB7CiAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgIHBvcHVwTW9kYWwuc2hvdygpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICBwb3B1cE1vZGFsLmhpZGUoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGlmIChlbG1JRCA9PSAibG9hZGluZyIpIHsKICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgbG9hZGluZ01vZGFsLnNob3coKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICAgICAgbG9hZGluZ01vZGFsLmhpZGUoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KfQpmdW5jdGlvbiBjaGFuZ2VCdXR0b25BY3Rpb24oZWxlbWVudCwgYnV0dG9uSUQsIGF0dHJpYnV0ZSkgewogICAgdmFyIHZhbHVlID0gZWxlbWVudC5vcHRpb25zW2VsZW1lbnQuc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidXR0b25JRCkuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpOwp9CmZ1bmN0aW9uIGdldExvY2FsRGF0YShkYXRhVHlwZSwgaWQpIHsKICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgc3dpdGNoIChkYXRhVHlwZSkgewogICAgICAgIGNhc2UgIm0zdSI6CiAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInNldHRpbmdzIl1bImZpbGVzIl1bZGF0YVR5cGVdW2lkXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiaGRociI6CiAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInNldHRpbmdzIl1bImZpbGVzIl1bZGF0YVR5cGVdW2lkXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiZmlsdGVyIjoKICAgICAgICBjYXNlICJjdXN0b20tZmlsdGVyIjoKICAgICAgICBjYXNlICJncm91cC10aXRsZSI6CiAgICAgICAgICAgIGlmIChpZCA9PSAtMSkgewogICAgICAgICAgICAgICAgZGF0YVsiYWN0aXZlIl0gPSB0cnVlOwogICAgICAgICAgICAgICAgZGF0YVsibGl2ZUV2ZW50Il0gPSBmYWxzZTsKICAgICAgICAgICAgICAgIGRhdGFbImNhc2VTZW5zaXRpdmUiXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgZGF0YVsiZGVzY3JpcHRpb24iXSA9ICIiOwogICAgICAgICAgICAgICAgZGF0YVsiZXhjbHVkZSJdID0gIiI7CiAgICAgICAgICAgICAgICBkYXRhWyJmaWx0ZXIiXSA9ICIiOwogICAgICAgICAgICAgICAgZGF0YVsiaW5jbHVkZSJdID0gIiI7CiAgICAgICAgICAgICAgICBkYXRhWyJuYW1lIl0gPSAiIjsKICAgICAgICAgICAgICAgIGRhdGFbInR5cGUiXSA9ICJncm91cC10aXRsZSI7CiAgICAgICAgICAgICAgICBkYXRhWyJ4LWNhdGVnb3J5Il0gPSAiIjsKICAgICAgICAgICAgICAgIFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsdGVyIl1baWRdID0gZGF0YTsKICAgICAgICAgICAgfQogICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWx0ZXIiXVtpZF07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInhtbHR2IjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJ1c2VycyI6CiAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInVzZXJzIl1baWRdWyJkYXRhIl07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIm1hcHBpbmciOgogICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXVtpZF07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIm0zdUdyb3VwcyI6CiAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbImRhdGEiXVsicGxheWxpc3QiXVsibTN1Il1bImdyb3VwcyJdOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHJldHVybiBkYXRhOwp9CmZ1bmN0aW9uIGdldE9iaktleXMob2JqKSB7CiAgICB2YXIga2V5cyA9IG5ldyBBcnJheSgpOwogICAgZm9yICh2YXIgaSBpbiBvYmopIHsKICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGkpKSB7CiAgICAgICAgICAgIGtleXMucHVzaChpKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4ga2V5czsKfQpmdW5jdGlvbiBnZXRPd25PYmpQcm9wcyhvYmplY3QpIHsKICAgIHJldHVybiBvYmplY3QgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpIDogW107Cn0KZnVuY3Rpb24gZ2V0QWxsU2VsZWN0ZWRDaGFubmVscygpIHsKICAgIHZhciBjaGFubmVscyA9IG5ldyBBcnJheSgpOwogICAgaWYgKEJVTEtfRURJVCA9PSBmYWxzZSkgewogICAgICAgIHJldHVybiBjaGFubmVsczsKICAgIH0KICAgIHZhciB0cnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudF90YWJsZSIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUUiIpOwogICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0cnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodHJzW2ldLnN0eWxlLmRpc3BsYXkgIT0gIm5vbmUiKSB7CiAgICAgICAgICAgIGlmICh0cnNbaV0uZmlyc3RDaGlsZC5maXJzdENoaWxkLmNoZWNrZWQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgY2hhbm5lbHMucHVzaCh0cnNbaV0uaWQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgdmFyIHRyc19pbmFjdGl2ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbmFjdGl2ZV9jb250ZW50X3RhYmxlIikuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRSIik7CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRyc19pbmFjdGl2ZS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh0cnNfaW5hY3RpdmVbaV0uc3R5bGUuZGlzcGxheSAhPSAibm9uZSIpIHsKICAgICAgICAgICAgaWYgKHRyc19pbmFjdGl2ZVtpXS5maXJzdENoaWxkLmZpcnN0Q2hpbGQuY2hlY2tlZCA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICBjaGFubmVscy5wdXNoKHRyc19pbmFjdGl2ZVtpXS5pZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gY2hhbm5lbHM7Cn0KZnVuY3Rpb24gc2VsZWN0QWxsQ2hhbm5lbHModGFibGVfbmFtZSA9ICJjb250ZW50X3RhYmxlIikgewogICAgdmFyIGJ1bGsgPSBmYWxzZTsKICAgIHZhciB0cnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZV9uYW1lKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVFIiKTsKICAgIGlmICh0cnNbMF0uZmlyc3RDaGlsZC5maXJzdENoaWxkLmNoZWNrZWQgPT0gdHJ1ZSkgewogICAgICAgIGJ1bGsgPSB0cnVlOwogICAgfQogICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0cnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodHJzW2ldLnN0eWxlLmRpc3BsYXkgIT0gIm5vbmUiKSB7CiAgICAgICAgICAgIHN3aXRjaCAoYnVsaykgewogICAgICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgICAgIHRyc1tpXS5maXJzdENoaWxkLmZpcnN0Q2hpbGQuY2hlY2tlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICAgICAgICAgIHRyc1tpXS5maXJzdENoaWxkLmZpcnN0Q2hpbGQuY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGJ1bGtFZGl0KCkgewogICAgQlVMS19FRElUID0gIUJVTEtfRURJVDsKICAgIHZhciBjbGFzc05hbWU7CiAgICB2YXIgcm93cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImJ1bGsiKTsKICAgIHN3aXRjaCAoQlVMS19FRElUKSB7CiAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICBjbGFzc05hbWUgPSAiYnVsayBzaG93QnVsayI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgIGNsYXNzTmFtZSA9ICJidWxrIGhpZGVCdWxrIjsKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHsKICAgICAgICByb3dzW2ldLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKICAgICAgICByb3dzW2ldLmNoZWNrZWQgPSBmYWxzZTsKICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBzb3J0VGFibGUoY29sdW1uLCB0YWJsZV9uYW1lID0gImNvbnRlbnRfdGFibGUiKSB7CiAgICAvLyBjb25zb2xlLmxvZygiQ09MVU1OOiAiICsgY29sdW1uKTsKICAgIGlmICgoY29sdW1uID09IENPTFVNTl9UT19TT1JUICYmIHRhYmxlX25hbWUgPT0gImNvbnRlbnRfdGFibGUiKSB8fCAoY29sdW1uID09IElOQUNUSVZFX0NPTFVNTl9UT19TT1JUICYmIHRhYmxlX25hbWUgPT0gImluYWN0aXZlX2NvbnRlbnRfdGFibGUiKSkgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlX25hbWUpOwogICAgdmFyIHRhYmxlSGVhZCA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUUiIpWzBdOwogICAgdmFyIHRhYmxlSXRlbXMgPSB0YWJsZUhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlREIik7CiAgICB2YXIgc29ydE9iaiA9IG5ldyBPYmplY3QoKTsKICAgIHZhciB4LCB4VmFsdWU7CiAgICB2YXIgdGFibGVIZWFkZXI7CiAgICB2YXIgc29ydEJ5U3RyaW5nID0gZmFsc2U7CiAgICBpZiAoY29sdW1uID4gMCAmJiBDT0xVTU5fVE9fU09SVCA+IDAgJiYgdGFibGVfbmFtZSA9PSAiY29udGVudF90YWJsZSIpIHsKICAgICAgICB0YWJsZUl0ZW1zW0NPTFVNTl9UT19TT1JUXS5jbGFzc05hbWUgPSAicG9pbnRlciI7CiAgICAgICAgdGFibGVJdGVtc1tjb2x1bW5dLmNsYXNzTmFtZSA9ICJzb3J0VGhpcyI7CiAgICB9CiAgICBlbHNlIGlmIChjb2x1bW4gPiAwICYmIElOQUNUSVZFX0NPTFVNTl9UT19TT1JUID4gMCAmJiB0YWJsZV9uYW1lID09ICJpbmFjdGl2ZV9jb250ZW50X3RhYmxlIikgewogICAgICAgIHRhYmxlSXRlbXNbSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlRdLmNsYXNzTmFtZSA9ICJwb2ludGVyIjsKICAgICAgICB0YWJsZUl0ZW1zW2NvbHVtbl0uY2xhc3NOYW1lID0gInNvcnRUaGlzIjsKICAgIH0KICAgIGlmICh0YWJsZV9uYW1lID09ICJjb250ZW50X3RhYmxlIikgewogICAgICAgIENPTFVNTl9UT19TT1JUID0gY29sdW1uOwogICAgfQogICAgZWxzZSBpZiAodGFibGVfbmFtZSA9PSAiaW5hY3RpdmVfY29udGVudF90YWJsZSIpIHsKICAgICAgICBJTkFDVElWRV9DT0xVTU5fVE9fU09SVCA9IGNvbHVtbjsKICAgIH0KICAgIHZhciByb3dzID0gdGFibGUucm93czsKICAgIGlmIChyb3dzWzFdICE9IHVuZGVmaW5lZCkgewogICAgICAgIHRhYmxlSGVhZGVyID0gcm93c1swXTsKICAgICAgICB4ID0gcm93c1sxXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEQiKVtjb2x1bW5dOwogICAgICAgIGZvciAoaSA9IDE7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHggPSByb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJURCIpW2NvbHVtbl07CiAgICAgICAgICAgIHN3aXRjaCAoeC5jaGlsZE5vZGVzWzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkgewogICAgICAgICAgICAgICAgY2FzZSAiaW5wdXQiOgogICAgICAgICAgICAgICAgICAgIHhWYWx1ZSA9IHguZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIilbMF0udmFsdWUudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgInAiOgogICAgICAgICAgICAgICAgICAgIHhWYWx1ZSA9IHguZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlAiKVswXS5pbm5lclRleHQudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGNvbnNvbGUubG9nKHguY2hpbGROb2Rlc1swXS50YWdOYW1lKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoeFZhbHVlID09ICIiKSB7CiAgICAgICAgICAgICAgICB4VmFsdWUgPSBpOwogICAgICAgICAgICAgICAgc29ydE9ialtpXSA9IHJvd3NbaV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKGlzTmFOKHhWYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWUgPSBwYXJzZUZsb2F0KHhWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRPYmpbeFZhbHVlXSA9IHJvd3NbaV07CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgICAgICAgICAgc29ydEJ5U3RyaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgc29ydE9ialt4VmFsdWUudG9Mb3dlckNhc2UoKSArIGldID0gcm93c1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgd2hpbGUgKHRhYmxlLmZpcnN0Q2hpbGQpIHsKICAgICAgICAgICAgdGFibGUucmVtb3ZlQ2hpbGQodGFibGUuZmlyc3RDaGlsZCk7CiAgICAgICAgfQogICAgICAgIHZhciBzb3J0VmFsdWVzID0gZ2V0T2JqS2V5cyhzb3J0T2JqKTsKICAgICAgICBpZiAoc29ydEJ5U3RyaW5nID09IHRydWUpIHsKICAgICAgICAgICAgaWYgKGNvbHVtbiA9PSAzKSB7CiAgICAgICAgICAgICAgICB2YXIgY29sbGF0b3IgPSBuZXcgSW50bC5Db2xsYXRvcih1bmRlZmluZWQsIHsgbnVtZXJpYzogdHJ1ZSwgc2Vuc2l0aXZpdHk6ICdiYXNlJyB9KTsKICAgICAgICAgICAgICAgIHNvcnRWYWx1ZXMuc29ydChjb2xsYXRvci5jb21wYXJlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHNvcnRWYWx1ZXMuc29ydCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBmdW5jdGlvbiBzb3J0RmxvYXQoYSwgYikgewogICAgICAgICAgICAgICAgcmV0dXJuIGEgLSBiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNvcnRWYWx1ZXMuc29ydChzb3J0RmxvYXQpOwogICAgICAgIH0KICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZCh0YWJsZUhlYWRlcik7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3J0VmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHNvcnRPYmpbc29ydFZhbHVlc1tpXV0pOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBjcmVhdGVTZWFyY2hPYmooKSB7CiAgICBTRUFSQ0hfTUFQUElORyA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBkYXRhID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXTsKICAgIHZhciBjaGFubmVscyA9IGdldE9iaktleXMoZGF0YSk7CiAgICB2YXIgY2hhbm5lbEtleXMgPSBbIngtYWN0aXZlIiwgIngtY2hhbm5lbElEIiwgIngtbmFtZSIsICJfZmlsZS5tM3UubmFtZSIsICJ4LWdyb3VwLXRpdGxlIiwgIngteG1sdHYtZmlsZSJdOwogICAgY2hhbm5lbHMuZm9yRWFjaChpZCA9PiB7CiAgICAgICAgY2hhbm5lbEtleXMuZm9yRWFjaChrZXkgPT4gewogICAgICAgICAgICBpZiAoa2V5ID09ICJ4LWFjdGl2ZSIpIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YVtpZF1ba2V5XSkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgICAgICAgICAgU0VBUkNIX01BUFBJTkdbaWRdID0gIm9ubGluZSAiOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBTRUFSQ0hfTUFQUElOR1tpZF0gPSAib2ZmbGluZSAiOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gIngteG1sdHYtZmlsZSIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgeG1sdHZGaWxlID0gZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGRhdGFbaWRdW2tleV0sICJ4bWx0diIsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgaWYgKHhtbHR2RmlsZSAhPSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgU0VBUkNIX01BUFBJTkdbaWRdID0gU0VBUkNIX01BUFBJTkdbaWRdICsgeG1sdHZGaWxlICsgIiAiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIFNFQVJDSF9NQVBQSU5HW2lkXSA9IFNFQVJDSF9NQVBQSU5HW2lkXSArIGRhdGFbaWRdW2tleV0gKyAiICI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0pOwogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGVuYWJsZUdyb3VwU2VsZWN0aW9uKHNlbGVjdG9yKSB7CiAgICB2YXIgbGFzdGNoZWNrID0gbnVsbDsgLy8gbm8gY2hlY2tib3hlcyBjbGlja2VkIHlldAogICAgLy8gZ2V0IGRlc2lyZWQgY2hlY2tib3hlcwogICAgdmFyIGNoZWNrYm94ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsKICAgIC8vIGxvb3Agb3ZlciBjaGVja2JveGVzIHRvIGFkZCBldmVudCBsaXN0ZW5lcgogICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChjaGVja2JveGVzLCBmdW5jdGlvbiAoY2J4LCBpZHgpIHsKICAgICAgICBjYnguYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgIC8vIHRlc3QgZm9yIHNoaWZ0IGtleSwgbm90IGZpcnN0IGNoZWNrYm94LCBhbmQgbm90IHNhbWUgY2hlY2tib3gKICAgICAgICAgICAgaWYgKGV2dC5zaGlmdEtleSAmJiBudWxsICE9PSBsYXN0Y2hlY2sgJiYgaWR4ICE9PSBsYXN0Y2hlY2spIHsKICAgICAgICAgICAgICAgIC8vIGdldCByYW5nZSBvZiBjaGVja3MgYmV0d2VlbiBsYXN0LWNoZWNrYm94IGFuZCBzaGlmdC1jaGVja2JveAogICAgICAgICAgICAgICAgLy8gTWF0aC5taW4vbWF4IGRvZXMgb3VyIHNvcnRpbmcgZm9yIHVzCiAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjaGVja2JveGVzLCBNYXRoLm1pbihsYXN0Y2hlY2ssIGlkeCksIE1hdGgubWF4KGxhc3RjaGVjaywgaWR4KSkKICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbG9vcCBvdmVyIGVhY2gKICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAoY2NieCkgewogICAgICAgICAgICAgICAgICAgIGNjYnguY2hlY2tlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBsYXN0Y2hlY2sgPSBpZHg7IC8vIHNldCB0aGlzIGNoZWNrYm94IGFzIGxhc3QtY2hlY2tlZCBmb3IgbGF0ZXIKICAgICAgICB9KTsKICAgIH0pOwp9CmZ1bmN0aW9uIHNlYXJjaEluTWFwcGluZygpIHsKICAgIHZhciBzZWFyY2hWYWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWFyY2hNYXBwaW5nIikudmFsdWU7CiAgICB2YXIgdHJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnRfdGFibGUiKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVFIiKTsKICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdHJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIGlkID0gdHJzW2ldLmdldEF0dHJpYnV0ZSgiaWQiKTsKICAgICAgICB2YXIgZWxlbWVudCA9IFNFQVJDSF9NQVBQSU5HW2lkXTsKICAgICAgICBzd2l0Y2ggKGVsZW1lbnQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKSkgewogICAgICAgICAgICBjYXNlIHRydWU6CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBjaGFuZ2VDaGFubmVsTnVtYmVycyhlbGVtZW50cykgewogICAgdmFyIHN0YXJ0aW5nX251bWJlcl9lbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIngtY2hhbm5lbHMtc3RhcnQiKVswXTsKICAgIHZhciBlbGVtcyA9IGVsZW1lbnRzLnNwbGl0KCIsIik7CiAgICB2YXIgc3RhcnRpbmdfbnVtYmVyID0gcGFyc2VGbG9hdChzdGFydGluZ19udW1iZXJfZWxlbWVudC52YWx1ZSk7CiAgICB2YXIgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICBlbGVtcy5mb3JFYWNoKGVsZW1lbnQgPT4gewogICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudCk7CiAgICAgICAgdmFyIGlucHV0ID0gZWxlbS5jaGlsZE5vZGVzWzFdLmZpcnN0Q2hpbGQ7CiAgICAgICAgaW5wdXQudmFsdWUgPSBzdGFydGluZ19udW1iZXIudG9TdHJpbmcoKTsKICAgICAgICBkYXRhW2VsZW1lbnRdWyJ4LWNoYW5uZWxJRCJdID0gc3RhcnRpbmdfbnVtYmVyLnRvU3RyaW5nKCk7CiAgICAgICAgc3RhcnRpbmdfbnVtYmVyKys7CiAgICB9KTsKICAgIGlmIChDT0xVTU5fVE9fU09SVCA9PSAxKSB7CiAgICAgICAgQ09MVU1OX1RPX1NPUlQgPSAtMTsKICAgICAgICBzb3J0VGFibGUoMSk7CiAgICB9CiAgICBpZiAoSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgPT0gMSkgewogICAgICAgIElOQUNUSVZFX0NPTFVNTl9UT19TT1JUID0gLTE7CiAgICAgICAgc29ydFRhYmxlKDEsICJpbmFjdGl2ZV9jb250ZW50X3BhZ2UiKTsKICAgIH0KfQpmdW5jdGlvbiBjaGFuZ2VDaGFubmVsTnVtYmVyKGVsZW1lbnQpIHsKICAgIHZhciBkYklEID0gZWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUuaWQ7CiAgICB2YXIgbmV3TnVtYmVyID0gcGFyc2VGbG9hdChlbGVtZW50LnZhbHVlKTsKICAgIHZhciBjaGFubmVsTnVtYmVycyA9IFtdOwogICAgdmFyIGRhdGEgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdOwogICAgdmFyIGNoYW5uZWxzID0gZ2V0T2JqS2V5cyhkYXRhKTsKICAgIGlmIChpc05hTihuZXdOdW1iZXIpKSB7CiAgICAgICAgYWxlcnQoInt7LmFsZXJ0LmludmFsaWRDaGFubmVsTnVtYmVyfX0iKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBjaGFubmVscy5mb3JFYWNoKGlkID0+IHsKICAgICAgICB2YXIgY2hhbm5lbE51bWJlciA9IHBhcnNlRmxvYXQoZGF0YVtpZF1bIngtY2hhbm5lbElEIl0pOwogICAgICAgIGNoYW5uZWxOdW1iZXJzLnB1c2goY2hhbm5lbE51bWJlcik7CiAgICB9KTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbm5lbE51bWJlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoY2hhbm5lbE51bWJlcnMuaW5kZXhPZihuZXdOdW1iZXIpID09IC0xKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoTWF0aC5mbG9vcihuZXdOdW1iZXIpID09IG5ld051bWJlcikgewogICAgICAgICAgICBuZXdOdW1iZXIgPSBuZXdOdW1iZXIgKyAxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbmV3TnVtYmVyID0gbmV3TnVtYmVyICsgMC4xOwogICAgICAgICAgICBuZXdOdW1iZXIudG9GaXhlZCgxKTsKICAgICAgICAgICAgbmV3TnVtYmVyID0gTWF0aC5yb3VuZChuZXdOdW1iZXIgKiAxMCkgLyAxMDsKICAgICAgICB9CiAgICB9CiAgICBkYXRhW2RiSURdWyJ4LWNoYW5uZWxJRCJdID0gbmV3TnVtYmVyLnRvU3RyaW5nKCk7CiAgICBlbGVtZW50LnZhbHVlID0gbmV3TnVtYmVyOwogICAgaWYgKENPTFVNTl9UT19TT1JUID09IDEpIHsKICAgICAgICBDT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgIHNvcnRUYWJsZSgxKTsKICAgIH0KICAgIGlmIChJTkFDVElWRV9DT0xVTU5fVE9fU09SVCA9PSAxKSB7CiAgICAgICAgSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgPSAtMTsKICAgICAgICBzb3J0VGFibGUoMSwgImluYWN0aXZlX2NvbnRlbnRfcGFnZSIpOwogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGJhY2t1cCgpIHsKICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgY29uc29sZS5sb2coIkJhY2t1cCBkYXRhIik7CiAgICB2YXIgY21kID0gIlRocmVhZGZpbkJhY2t1cCI7CiAgICBjb25zb2xlLmxvZygiU0VORCBUTyBTRVJWRVIiKTsKICAgIGNvbnNvbGUubG9nKGRhdGEpOwogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIHRvZ2dsZUNoYW5uZWxTdGF0dXMoaWQpIHsKICAgIHZhciBlbGVtZW50OwogICAgdmFyIHN0YXR1czsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWN0aXZlIikpIHsKICAgICAgICB2YXIgY2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWN0aXZlIik7CiAgICAgICAgc3RhdHVzID0gKGNoZWNrYm94KS5jaGVja2VkOwogICAgfQogICAgdmFyIGlkcyA9IGdldEFsbFNlbGVjdGVkQ2hhbm5lbHMoKTsKICAgIGlmIChpZHMubGVuZ3RoID09IDApIHsKICAgICAgICBpZHMucHVzaChpZCk7CiAgICB9CiAgICBpZHMuZm9yRWFjaChpZCA9PiB7CiAgICAgICAgdmFyIGNoYW5uZWwgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdW2lkXTsKICAgICAgICBjaGFubmVsWyJ4LWFjdGl2ZSJdID0gc3RhdHVzOwogICAgICAgIHN3aXRjaCAoY2hhbm5lbFsieC1hY3RpdmUiXSkgewogICAgICAgICAgICBjYXNlIHRydWU6CiAgICAgICAgICAgICAgICBpZiAoY2hhbm5lbFsieC14bWx0di1maWxlIl0gPT0gIi0iIHx8IGNoYW5uZWxbIngtbWFwcGluZyJdID09ICItIikgewogICAgICAgICAgICAgICAgICAgIGlmIChCVUxLX0VESVQgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxlcnQoY2hhbm5lbFsieC1uYW1lIl0gKyAiOiBNaXNzaW5nIFhNTFRWIGZpbGUgLyBjaGFubmVsIikKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbIngtYWN0aXZlIl0gPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICAvLyBjb2RlLi4uCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKGNoYW5uZWxbIngtYWN0aXZlIl0gPT0gZmFsc2UpIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsYXNzTmFtZSA9ICJub3RBY3RpdmVFUEciOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsYXNzTmFtZSA9ICJhY3RpdmVFUEciOwogICAgICAgIH0KICAgIH0pOwp9CmZ1bmN0aW9uIHJlc3RvcmUoKSB7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZCcpKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZCcpLnJlbW92ZSgpOwogICAgfQogICAgdmFyIHJlc3RvcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpOwogICAgcmVzdG9yZS5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiZmlsZSIpOwogICAgcmVzdG9yZS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIm5vdFZpc2libGUiKTsKICAgIHJlc3RvcmUuc2V0QXR0cmlidXRlKCJuYW1lIiwgIiIpOwogICAgcmVzdG9yZS5pZCA9ICJ1cGxvYWQiOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZXN0b3JlKTsKICAgIHJlc3RvcmUuY2xpY2soKTsKICAgIHJlc3RvcmUub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGZpbGVuYW1lID0gcmVzdG9yZS5maWxlc1swXS5uYW1lOwogICAgICAgIHZhciBjaGVjayA9IGNvbmZpcm0oIkZpbGU6ICIgKyBmaWxlbmFtZSArICJcbnt7LmNvbmZpcm0ucmVzdG9yZX19Iik7CiAgICAgICAgaWYgKGNoZWNrID09IHRydWUpIHsKICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgICAgICAgIHZhciBmaWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1maWxlXScpLmZpbGVzWzBdOwogICAgICAgICAgICBpZiAoZmlsZSkgewogICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CiAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlYWRlci5yZXN1bHQpOwogICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgICAgICAgICAgICAgICAgIHZhciBjbWQgPSAiVGhyZWFkZmluUmVzdG9yZSI7CiAgICAgICAgICAgICAgICAgICAgZGF0YVsiYmFzZTY0Il0gPSByZWFkZXIucmVzdWx0OwogICAgICAgICAgICAgICAgICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICAgICAgICAgICAgICAgICAgc2VydmVyLnJlcXVlc3QoZGF0YSk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgYWxlcnQoIkZpbGUgY291bGQgbm90IGJlIGxvYWRlZCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlc3RvcmUucmVtb3ZlKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9OwogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIHVwbG9hZExvZ28oKSB7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZCcpKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZCcpLnJlbW92ZSgpOwogICAgfQogICAgdmFyIHVwbG9hZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICB1cGxvYWQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgImZpbGUiKTsKICAgIHVwbG9hZC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIm5vdFZpc2libGUiKTsKICAgIHVwbG9hZC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiIik7CiAgICB1cGxvYWQuaWQgPSAidXBsb2FkIjsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodXBsb2FkKTsKICAgIHVwbG9hZC5jbGljaygpOwogICAgdXBsb2FkLm9uYmx1ciA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBhbGVydCgpOwogICAgfTsKICAgIHVwbG9hZC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZmlsZW5hbWUgPSB1cGxvYWQuZmlsZXNbMF0ubmFtZTsKICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgICB2YXIgZmlsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ZmlsZV0nKS5maWxlc1swXTsKICAgICAgICBpZiAoZmlsZSkgewogICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTsKICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlYWRlci5yZXN1bHQpOwogICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgICAgICAgICB2YXIgY21kID0gInVwbG9hZExvZ28iOwogICAgICAgICAgICAgICAgZGF0YVsiYmFzZTY0Il0gPSByZWFkZXIucmVzdWx0OwogICAgICAgICAgICAgICAgZGF0YVsiZmlsZW5hbWUiXSA9IGZpbGUubmFtZTsKICAgICAgICAgICAgICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICAgICAgICAgICAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgICAgICAgICAgICAgIHZhciB1cGRhdGVMb2dvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwZGF0ZS1pY29uJyk7CiAgICAgICAgICAgICAgICB1cGRhdGVMb2dvLmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHVwZGF0ZUxvZ28uY2xhc3NOYW1lID0gImNoYW5nZWQiOwogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgYWxlcnQoIkZpbGUgY291bGQgbm90IGJlIGxvYWRlZCIpOwogICAgICAgIH0KICAgICAgICB1cGxvYWQucmVtb3ZlKCk7CiAgICAgICAgcmV0dXJuOwogICAgfTsKfQpmdW5jdGlvbiBwcm9iZUNoYW5uZWwodXJsKSB7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2JlRGV0YWlscyIpKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2JlRGV0YWlscyIpLmlubmVySFRNTCA9ICJQcm9iaW5nIENoYW5uZWwgRGV0YWlscy4uLiI7CiAgICB9CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBjbWQgPSAicHJvYmVDaGFubmVsIjsKICAgIGRhdGFbInByb2JlVXJsIl0gPSB1cmw7CiAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcihjbWQpOwogICAgc2VydmVyLnJlcXVlc3QoZGF0YSk7CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gY2hlY2tVbmRvKGtleSkgewogICAgc3dpdGNoIChrZXkpIHsKICAgICAgICBjYXNlICJlcGdNYXBwaW5nIjoKICAgICAgICAgICAgaWYgKFVORE8uaGFzT3duUHJvcGVydHkoa2V5KSkgewogICAgICAgICAgICAgICAgU0VSVkVSWyJ4ZXBnIl1ba2V5XSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoVU5ET1trZXldKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBVTkRPW2tleV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFNFUlZFUlsieGVwZyJdW2tleV0pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBzb3J0U2VsZWN0KGVsZW0pIHsKICAgIHZhciB0bXBBcnkgPSBbXTsKICAgIHZhciBzZWxlY3RlZFZhbHVlID0gZWxlbVtlbGVtLnNlbGVjdGVkSW5kZXhdLnZhbHVlOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtLm9wdGlvbnMubGVuZ3RoOyBpKyspCiAgICAgICAgdG1wQXJ5LnB1c2goZWxlbS5vcHRpb25zW2ldKTsKICAgIHRtcEFyeS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiAoYS50ZXh0IDwgYi50ZXh0KSA/IC0xIDogMTsgfSk7CiAgICB3aGlsZSAoZWxlbS5vcHRpb25zLmxlbmd0aCA+IDApCiAgICAgICAgZWxlbS5vcHRpb25zWzBdID0gbnVsbDsKICAgIHZhciBuZXdTZWxlY3RlZEluZGV4ID0gMDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG1wQXJ5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgZWxlbS5vcHRpb25zW2ldID0gdG1wQXJ5W2ldOwogICAgICAgIGlmIChlbGVtLm9wdGlvbnNbaV0udmFsdWUgPT0gc2VsZWN0ZWRWYWx1ZSkKICAgICAgICAgICAgbmV3U2VsZWN0ZWRJbmRleCA9IGk7CiAgICB9CiAgICBlbGVtLnNlbGVjdGVkSW5kZXggPSBuZXdTZWxlY3RlZEluZGV4OyAvLyBTZXQgbmV3IHNlbGVjdGVkIGluZGV4IGFmdGVyIHNvcnRpbmcKICAgIHJldHVybjsKfQpmdW5jdGlvbiB1cGRhdGVMb2coKSB7CiAgICBjb25zb2xlLmxvZygiVE9LRU4iKTsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKCJ1cGRhdGVMb2ciKTsKICAgIHNlcnZlci5yZXF1ZXN0KG5ldyBPYmplY3QoKSk7Cn0K" - webUI["html/js/configuration_ts.js"] = "Y2xhc3MgV2l6YXJkQ2F0ZWdvcnkgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gImNvbnRlbnQiOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnlIZWFkbGluZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSDQiKTsKICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQp9CmNsYXNzIFdpemFyZEl0ZW0gZXh0ZW5kcyBXaXphcmRDYXRlZ29yeSB7CiAgICBjb25zdHJ1Y3RvcihrZXksIGhlYWRsaW5lKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICB0aGlzLmhlYWRsaW5lID0gaGVhZGxpbmU7CiAgICAgICAgdGhpcy5rZXkgPSBrZXk7CiAgICB9CiAgICBjcmVhdGVXaXphcmQoKSB7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gdGhpcy5jcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHRoaXMuaGVhZGxpbmUpOwogICAgICAgIHZhciBrZXkgPSB0aGlzLmtleTsKICAgICAgICB2YXIgY29udGVudCA9IG5ldyBQb3B1cENvbnRlbnQoKTsKICAgICAgICB2YXIgZGVzY3JpcHRpb247CiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICAgICAgZG9jLmlubmVySFRNTCA9ICIiOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChoZWFkbGluZSk7CiAgICAgICAgc3dpdGNoIChrZXkpIHsKICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGkpOwogICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIjEiLCBrZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAid2l6YXJkIik7CiAgICAgICAgICAgICAgICBzZWxlY3QuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInt7LndpemFyZC50dW5lci5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIlBNUyIsICJYRVBHIl07CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gWyJQTVMiLCAiWEVQRyJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIlhFUEciLCBrZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAid2l6YXJkIik7CiAgICAgICAgICAgICAgICBzZWxlY3QuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInt7LndpemFyZC5lcGdTb3VyY2UuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibTN1IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBrZXksICIiKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sud2l6YXJkLm0zdS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIndpemFyZCIpOwogICAgICAgICAgICAgICAgaW5wdXQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAie3sud2l6YXJkLm0zdS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4bWx0diI6CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0Iiwga2V5LCAiIik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LndpemFyZC54bWx0di5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIndpemFyZCIpOwogICAgICAgICAgICAgICAgaW5wdXQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAie3sud2l6YXJkLnhtbHR2LmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhrZXkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciBwcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQUkUiKTsKICAgICAgICBwcmUuaW5uZXJIVE1MID0gZGVzY3JpcHRpb247CiAgICAgICAgZG9jLmFwcGVuZENoaWxkKHByZSk7CiAgICAgICAgY29uc29sZS5sb2coaGVhZGxpbmUsIGtleSk7CiAgICB9Cn0KZnVuY3Rpb24gcmVhZHlGb3JDb25maWd1cmF0aW9uKHdpemFyZCkgewogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoImdldFNlcnZlckNvbmZpZyIpOwogICAgc2VydmVyLnJlcXVlc3QobmV3IE9iamVjdCgpKTsKICAgIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgZmFsc2UpOwogICAgY29uZmlndXJhdGlvbldpemFyZFt3aXphcmRdLmNyZWF0ZVdpemFyZCgpOwp9CmZ1bmN0aW9uIHNhdmVXaXphcmQoKSB7CiAgICB2YXIgY21kID0gInNhdmVXaXphcmQiOwogICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50Iik7CiAgICB2YXIgY29uZmlnID0gZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIndpemFyZCIpOwogICAgdmFyIHdpemFyZCA9IG5ldyBPYmplY3QoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlnLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgdmFyIHZhbHVlOwogICAgICAgIHN3aXRjaCAoY29uZmlnW2ldLnRhZ05hbWUpIHsKICAgICAgICAgICAgY2FzZSAiU0VMRUNUIjoKICAgICAgICAgICAgICAgIG5hbWUgPSBjb25maWdbaV0ubmFtZTsKICAgICAgICAgICAgICAgIHZhbHVlID0gY29uZmlnW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgLy8gV2VubiBkZXIgV2VydCBlaW5lIFphaGwgaXN0LCB3aXJkIGRpZXNlciBhbHMgWmFobCBnZXNwZWljaGVydAogICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIHdpemFyZFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgd2l6YXJkW25hbWVdID0gcGFyc2VJbnQodmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIklOUFVUIjoKICAgICAgICAgICAgICAgIHN3aXRjaCAoY29uZmlnW2ldLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGNvbmZpZ1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbmZpZ1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXNnID0gbmFtZS50b1VwcGVyQ2FzZSgpICsgIjogIiArICJ7ey5hbGVydC5taXNzaW5nSW5wdXR9fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChtc2cpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHdpemFyZFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgLy8gY29kZS4uLgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICBkYXRhWyJ3aXphcmQiXSA9IHdpemFyZDsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgIGNvbnNvbGUubG9nKGRhdGEpOwp9Ci8vIFdpemFyZAp2YXIgY29uZmlndXJhdGlvbldpemFyZCA9IG5ldyBBcnJheSgpOwpjb25maWd1cmF0aW9uV2l6YXJkLnB1c2gobmV3IFdpemFyZEl0ZW0oInR1bmVyIiwgInt7LndpemFyZC50dW5lci50aXRsZX19IikpOwpjb25maWd1cmF0aW9uV2l6YXJkLnB1c2gobmV3IFdpemFyZEl0ZW0oImVwZ1NvdXJjZSIsICJ7ey53aXphcmQuZXBnU291cmNlLnRpdGxlfX0iKSk7CmNvbmZpZ3VyYXRpb25XaXphcmQucHVzaChuZXcgV2l6YXJkSXRlbSgibTN1IiwgInt7LndpemFyZC5tM3UudGl0bGV9fSIpKTsKY29uZmlndXJhdGlvbldpemFyZC5wdXNoKG5ldyBXaXphcmRJdGVtKCJ4bWx0diIsICJ7ey53aXphcmQueG1sdHYudGl0bGV9fSIpKTsK" - webUI["html/js/files.js"] = "ZnVuY3Rpb24gb3BlbkZpbGVzKGVsbSwgZmlsZVR5cGUpIHsKICAvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZXR0aW5ncyIpLmlubmVySFRNTCA9ICJUZXN0IjsKCiAgY29sdW1uVG9Tb3J0ID0gMDsKICB2YXIgbmV3RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNldHRpbmdzIik7CgogIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJIUiI7CiAgbmV3RGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKCiAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdCgpOwogIG5ld0VudHJ5WyJfZWxlbWVudCJdID0gIklOUFVUIjsKICBuZXdFbnRyeVsidHlwZSJdID0gImJ1dHRvbiI7CiAgbmV3RW50cnlbImNsYXNzIl0gPSAiYnV0dG9uIjsKICBuZXdFbnRyeVsidmFsdWUiXSA9ICJOZXciOwogIG5ld0VudHJ5WyJvbmNsaWNrIl0gPSAnZmlsZURldGFpbCgiLSIsICInICsgZmlsZVR5cGUgKyAnIiknOwogIG5ld0Rpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CgogIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CiAgbmV3RW50cnlbInR5cGUiXSA9ICJidXR0b24iOwogIG5ld0VudHJ5WyJjbGFzcyJdID0gImJ1dHRvbiI7CiAgbmV3RW50cnlbInZhbHVlIl0gPSAiVXBkYXRlIjsKICBuZXdFbnRyeVsib25jbGljayJdID0gImZpbGVEZXRhaWwoMCkiOwogIC8vbmV3RGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKCiAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZXR0aW5ncyIpOwoKICAvLyBCdWlsZCB0YWJsZQogIHZhciBuZXdUYWJsZSA9IG5ldyBPYmplY3QoKTsKICBuZXdUYWJsZVsiX2VsZW1lbnQiXSA9ICJUQUJMRSI7CiAgbmV3VGFibGVbImlkIl0gPSAiaWRfbWFwcGluZyI7CiAgbmV3VGFibGVbImNsYXNzIl0gPSAidGFibGUtbWFwcGluZyI7CiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3VGFibGUpKTsKCiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICBjcmVhdGVGaWxlc1RhYmxlKGZpbGVUeXBlKTsKICB9LCAxMCk7Cgp9CgpmdW5jdGlvbiBjcmVhdGVGaWxlc1RhYmxlKGZpbGVUeXBlKSB7CiAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkX21hcHBpbmciKTsKICB2YXIgYXZhaWxhYmxlRmlsZVR5cGVzID0gbmV3IEFycmF5KCk7CgogIHRhYmxlLmlubmVySFRNTCA9ICIiOwogIHZhciBuZXdUUiA9IG5ldyBPYmplY3QoKTsKICBuZXdUUlsiX2VsZW1lbnQiXSA9ICJUUiI7CiAgbmV3VFJbImNsYXNzIl0gPSAidGFibGUtbWFwcGluZy1oZWFkZXIiOwogIHRhYmxlLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3VFIpKTsKCiAgdmFyIHRyID0gdGFibGUubGFzdENoaWxkOwoKICBzd2l0Y2ggKGZpbGVUeXBlKSB7CiAgICBjYXNlICJ4bWx0diI6CiAgICAgIGF2YWlsYWJsZUZpbGVUeXBlcyA9IG5ldyBBcnJheSgieG1sdHYiKTsKICAgICAgdmFyIHRySGVhZGxpbmVzID0gbmV3IEFycmF5KCJHdWlkZSIsICJMYXN0IFVwZGF0ZSIsICJBdmFpbGFiaWxpdHkgJSIsICJDaGFubmVscyIsICJQcm9ncmFtcyIpCiAgICAgIHZhciBjb21wYXRpYmlsaXR5S2V5cyA9IG5ldyBBcnJheSgieG1sdHYuY2hhbm5lbHMiLCAieG1sdHYucHJvZ3JhbXMiKQogICAgICBicmVhazsKCiAgICBjYXNlICJtM3UiOgogICAgICBhdmFpbGFibGVGaWxlVHlwZXMgPSBuZXcgQXJyYXkoIm0zdSIsICJoZGhyIik7CiAgICAgIHZhciB0ckhlYWRsaW5lcyA9IG5ldyBBcnJheSgiUGxheWxpc3QiLCAiTGFzdCBVcGRhdGUiLCAiQXZhaWxhYmlsaXR5ICUiLCAiVHlwZSIsICJTdHJlYW1zIiwgImdyb3VwLXRpdGxlICUiLCAidHZnLWlkICUiLCAiVW5pcXVlIElEICUiKTsKICAgICAgdmFyIGNvbXBhdGliaWxpdHlLZXlzID0gbmV3IEFycmF5KCJzdHJlYW1zIiwgImdyb3VwLnRpdGxlIiwgInR2Zy5pZCIsICJzdHJlYW0uaWQiKTsKICAgICAgYnJlYWs7CiAgfQoKICBmb3IgKHZhciBpID0gMDsgaSA8IHRySGVhZGxpbmVzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgbmV3VEQgPSBuZXcgT2JqZWN0KCk7CiAgICBuZXdURFsiX2VsZW1lbnQiXSA9ICJURCI7CiAgICBuZXdURFsiX3RleHQiXSA9IHRySGVhZGxpbmVzW2ldOwogICAgdHIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdURCkpOwogIH0KCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdmFpbGFibGVGaWxlVHlwZXMubGVuZ3RoOyBpKyspIHsKCiAgICB2YXIgZmlsZVR5cGUgPSBhdmFpbGFibGVGaWxlVHlwZXNbaV0KCiAgICB2YXIgZGF0YSA9IGNvbmZpZ1siZmlsZXMiXVtmaWxlVHlwZV07CgogICAgdmFyIGFsbEZpbGVzID0gZ2V0T2JqS2V5cyhkYXRhKQoKICAgIGZvciAodmFyIGYgPSAwOyBmIDwgYWxsRmlsZXMubGVuZ3RoOyBmKyspIHsKICAgICAgdmFyIGVsbSA9IGRhdGFbYWxsRmlsZXNbZl1dOwogICAgICB2YXIgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRfbWFwcGluZyIpOwogICAgICB2YXIgZmlsZUlEID0gZWxtWyJpZC5wcm92aWRlciJdOwogICAgICB2YXIgbmFtZSA9IGVsbVsibmFtZSJdOwogICAgICB2YXIgbGFzdFVwZGF0ZSA9IGVsbVsibGFzdC51cGRhdGUiXTsKICAgICAgdmFyIGF2YWlsYWJpbGl0eSA9IGVsbVsicHJvdmlkZXIuYXZhaWxhYmlsaXR5Il07CiAgICAgIHZhciB0eXBlID0gZWxtWyJ0eXBlIl0udG9VcHBlckNhc2UoKTsKICAgICAgdmFyIGNvbXBhdGliaWxpdHkgPSBlbG1bImNvbXBhdGliaWxpdHkiXTsKCiAgICAgIC8vIENyZWF0ZSBUUgogICAgICB2YXIgbmV3VFIgPSBuZXcgT2JqZWN0KCk7CiAgICAgIG5ld1RSWyJfZWxlbWVudCJdID0gIlRSIjsKICAgICAgbmV3VFJbImNsYXNzIl0gPSAiIjsKICAgICAgbmV3VFJbImlkIl0gPSBmaWxlSUQ7CiAgICAgIG5ld1RSWyJvbmNsaWNrIl0gPSAnamF2YXNjcmlwdDogZmlsZURldGFpbCgiJyArIGZpbGVJRCArICciLCInICsgZmlsZVR5cGUgKyAnIik7JzsKICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdUUikpOwoKICAgICAgdmFyIHRyID0gdGFibGUubGFzdENoaWxkOwoKICAgICAgLy8gQ3JlYXRlIGZpbGUgbmFtZSBURAogICAgICB2YXIgbmV3VEQgPSBuZXcgT2JqZWN0KCk7CiAgICAgIG5ld1REWyJfZWxlbWVudCJdID0gIlAiOwogICAgICBuZXdURFsiX3RleHQiXSA9IG5hbWU7CiAgICAgIGNyZWF0ZU5ld1REKG5ld1RELCB0cik7CgogICAgICAvLyBDcmVhdGUgbGFzdCB1cGRhdGUgVEQKICAgICAgdmFyIG5ld1REID0gbmV3IE9iamVjdCgpOwogICAgICBuZXdURFsiX2VsZW1lbnQiXSA9ICJQIjsKICAgICAgbmV3VERbIl90ZXh0Il0gPSBsYXN0VXBkYXRlOwogICAgICBjcmVhdGVOZXdURChuZXdURCwgdHIpOwoKICAgICAgLy8gQ3JlYXRlIGF2YWlsYWJpbGl0eSBURAogICAgICB2YXIgbmV3VEQgPSBuZXcgT2JqZWN0KCk7CiAgICAgIG5ld1REWyJfZWxlbWVudCJdID0gIlAiOwogICAgICBuZXdURFsiX3RleHQiXSA9IGF2YWlsYWJpbGl0eTsKICAgICAgY3JlYXRlTmV3VEQobmV3VEQsIHRyKTsKCiAgICAgIGlmIChmaWxlVHlwZSA9PSAibTN1IiB8fCBmaWxlVHlwZSA9PSAiaGRociIpIHsKCiAgICAgICAgLy8gQ3JlYXRlIFR5cGUgVEQKICAgICAgICB2YXIgbmV3VEQgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgbmV3VERbIl9lbGVtZW50Il0gPSAiUCI7CiAgICAgICAgbmV3VERbIl90ZXh0Il0gPSB0eXBlOwogICAgICAgIGNyZWF0ZU5ld1REKG5ld1RELCB0cik7CgogICAgICB9CgogICAgICAvLyBDcmVhdGUgYWxsIGNvbXBhdGliaWxpdHkgVERzCgogICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbXBhdGliaWxpdHlLZXlzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgdmFyIG5ld1REID0gbmV3IE9iamVjdCgpOwogICAgICAgIG5ld1REWyJfZWxlbWVudCJdID0gIlAiOwogICAgICAgIG5ld1REWyJfdGV4dCJdID0gY29tcGF0aWJpbGl0eVtjb21wYXRpYmlsaXR5S2V5c1tqXV07CiAgICAgICAgY3JlYXRlTmV3VEQobmV3VEQsIHRyKTsKICAgICAgfQoKICAgIH0KCiAgfQoKCiAgc29ydFRhYmxlKDApCgogIC8vIHVzYWdlIEluZm8gIAogIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2V0dGluZ3MiKTsKICBzd2l0Y2ggKG1lbnVbYWN0aXZlTWVudS5pZF0uaGFzT3duUHJvcGVydHkoIl91c2FnZSIpKSB7CiAgICBjYXNlIHRydWU6CiAgICAgIHZhciB1c2FnZUl0ZW0gPSBuZXcgT2JqZWN0KCk7CiAgICAgIHVzYWdlSXRlbVsiX2VsZW1lbnQiXSA9ICJQUkUiCiAgICAgIHVzYWdlSXRlbVsiX3RleHQiXSA9IG1lbnVbYWN0aXZlTWVudS5pZF1bIl91c2FnZSJdOwoKICAgICAgdmFyIG5ld0hSID0gbmV3IE9iamVjdCgpOwogICAgICBuZXdIUlsiX2VsZW1lbnQiXSA9ICJIUiIKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3SFIpKTsKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQodXNhZ2VJdGVtKSk7CiAgICAgIGJyZWFrOwogIH0KCiAgY2FsY3VsYXRlV3JhcHBlckhlaWdodCgpOwogIHJldHVybjsKfQoKCmZ1bmN0aW9uIGZpbGVEZXRhaWwoZmlsZUlELCBmaWxlVHlwZSkgewoKICBvcHRpb25zVGV4dCA9IG5ldyBBcnJheSgiTTNVIiwgIkhESG9tZVJ1biAtIFtFeHBlcmltZW50YWxdIikKICBvcHRpb25zVmFsdWUgPSBuZXcgQXJyYXkoIm0zdSIsICJoZGhyIikKCiAgc3dpdGNoIChmaWxlVHlwZSkgewoKICAgIGNhc2UgIm0zdSI6CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYW1lIikuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJQbGF5bGlzdCBuYW1lIik7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZXNjcmlwdGlvbiIpLnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAiRGVzY3JpcHRpb24gb2YgdGhpcyBwbGF5bGlzdCIpOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZS1kZXRhaWwtaGVhZGxpbmUiKS5pbm5lckhUTUwgPSAiTTNVIFBsYXlsaXN0IjsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUtcGF0aCIpLmlubmVySFRNTCA9ICJNM1UgRmlsZToiOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZS5zb3VyY2UiKS5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgIkxvY2FsIG9yIHJlbW90ZSIpOwogICAgICBicmVhazsKCiAgICBjYXNlICJoZGhyIjoKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5hbWUiKS5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgIkhESG9tZVJ1biBuYW1lIik7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZXNjcmlwdGlvbiIpLnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAiRGVzY3JpcHRpb24gb2YgdGhpcyBIREhvbWVSdW4gdHVuZXIiKTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUtZGV0YWlsLWhlYWRsaW5lIikuaW5uZXJIVE1MID0gIkhESG9tZVJ1biI7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlLXBhdGgiKS5pbm5lckhUTUwgPSAiSERIb21lUnVuIElQOiI7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlLnNvdXJjZSIpLnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAiSVAgYWRkcmVzcyBhbmQgcG9ydCBvZiB0aGUgdHVuZXIgKDE5Mi4xNjguMS4xMDo1MDA0KSIpOwogICAgICBicmVhazsKCiAgICBjYXNlICJ4bWx0diI6CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYW1lIikuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJYTUxUViBuYW1lIik7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZXNjcmlwdGlvbiIpLnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAiRGVzY3JpcHRpb24gb2YgdGhpcyBYTUxUViBmaWxlIik7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlLWRldGFpbC1oZWFkbGluZSIpLmlubmVySFRNTCA9ICJYTUxUViBGaWxlIjsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUtcGF0aCIpLmlubmVySFRNTCA9ICJYTUxUViBGaWxlOiI7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlLnNvdXJjZSIpLnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAiTG9jYWwgb3IgcmVtb3RlIik7CgogICAgICBvcHRpb25zVGV4dCA9IG5ldyBBcnJheSgiWE1MVFYiKQogICAgICBvcHRpb25zVmFsdWUgPSBuZXcgQXJyYXkoInhtbHR2IikKICAgICAgYnJlYWs7CiAgfQoKICBtb2RpZnlPcHRpb24oInR5cGUiLCBvcHRpb25zVGV4dCwgb3B0aW9uc1ZhbHVlKQoKICBzaG93UG9wVXBFbGVtZW50KCdmaWxlLWRldGFpbCcpOwoKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2F2ZUZpbGVEZXRhaWwiKS5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2F2ZUZpbGVEZXRhaWwoIicgKyBmaWxlSUQgKyAnIiwiJyArIGZpbGVUeXBlICsgJyIsIGZhbHNlKScpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cGRhdGVGaWxlRGV0YWlsIikuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHVwZGF0ZUZpbGUoIicgKyBmaWxlSUQgKyAnIiwiJyArIGZpbGVUeXBlICsgJyIsIGZhbHNlKScpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZWxldGVGaWxlRGV0YWlsIikuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNhdmVGaWxlRGV0YWlsKCInICsgZmlsZUlEICsgJyIsIicgKyBmaWxlVHlwZSArICciLCB0cnVlKScpOwoKICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKCiAgc3dpdGNoIChmaWxlSUQpIHsKCiAgICBjYXNlICItIjogLy8gTmV3IGZpbGUKICAgICAgZGF0YVsibmFtZSJdID0gIiI7CiAgICAgIGRhdGFbImRlc2NyaXB0aW9uIl0gPSAiIjsKICAgICAgZGF0YVsiZmlsZS5zb3VyY2UiXSA9ICIiOwogICAgICBkYXRhWyJ0eXBlIl0gPSBmaWxlVHlwZTsKCiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZWxldGVGaWxlRGV0YWlsIikuY2xhc3NOYW1lID0gImRlbGV0ZSI7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0eXBlIikuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJjaGFuZ2VGaWxlVHlwZSh0aGlzKTsiKQogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidHlwZSIpLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsIGZpbGVJRCkKCiAgICAgIHNob3dFbGVtZW50KCJkZWxldGVGaWxlRGV0YWlsIiwgZmFsc2UpOwogICAgICBzaG93RWxlbWVudCgidXBkYXRlRmlsZURldGFpbCIsIGZhbHNlKTsKCiAgICAgIGlmIChmaWxlVHlwZSA9PSAieG1sdHYiKSB7CiAgICAgICAgc2hvd0VsZW1lbnQoInR5cGUiLCBmYWxzZSk7CiAgICAgICAgc2hvd0VsZW1lbnQoImZpbGUtdHlwZSIsIGZhbHNlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzaG93RWxlbWVudCgidHlwZSIsIHRydWUpOwogICAgICAgIHNob3dFbGVtZW50KCJmaWxlLXR5cGUiLCB0cnVlKTsKICAgICAgfQoKICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgZGF0YSA9IGNvbmZpZ1siZmlsZXMiXVtmaWxlVHlwZV1bZmlsZUlEXTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlbGV0ZUZpbGVEZXRhaWwiKS5jbGFzc05hbWUgPSAiZGVsZXRlIjsKCiAgICAgIHNob3dFbGVtZW50KCJ1cGRhdGVGaWxlRGV0YWlsIiwgdHJ1ZSk7CiAgICAgIHNob3dFbGVtZW50KCJ0eXBlIiwgZmFsc2UpOwogICAgICBzaG93RWxlbWVudCgiZmlsZS10eXBlIiwgZmFsc2UpOwoKICAgICAgYnJlYWs7CgogIH0KCiAgdmFyIGtleXMgPSBnZXRPYmpLZXlzKGRhdGEpOwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKCiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoa2V5c1tpXSkpIHsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoa2V5c1tpXSkudmFsdWUgPSBkYXRhW2tleXNbaV1dOwogICAgfQoKCiAgfQoKfQoKZnVuY3Rpb24gY2hhbmdlRmlsZVR5cGUoZWxtKSB7CgogIHZhciBmaWxlSUQgPSBlbG0uZ2V0QXR0cmlidXRlKCJkYXRhLWlkIik7CiAgdmFyIGZpbGVUeXBlID0gZWxtLm9wdGlvbnNbZWxtLnNlbGVjdGVkSW5kZXhdLnZhbHVlOwoKICBmaWxlRGV0YWlsKGZpbGVJRCwgZmlsZVR5cGUpCgp9CgoKZnVuY3Rpb24gc2F2ZUZpbGVEZXRhaWwoZmlsZUlELCBmaWxlVHlwZSwgZGVsZXRlRmlsZSkgewoKICBpZiAoZmlsZUlEID09IHVuZGVmaW5lZCkgewogICAgYWxlcnQoIklEIGlzIG1pc3NpbmchISEiKTsKICAgIHJldHVybgogIH0KCiAgdmFyIGlucHV0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlLWRldGFpbCIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJTlBVVCIpOwogIHZhciBzZWxlY3RzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUtZGV0YWlsIikuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlNFTEVDVCIpOwogIHZhciBuZXdGaWxlRGF0YSA9IG5ldyBPYmplY3QoKTsKICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgIHN3aXRjaCAoaW5wdXRzW2ldLnR5cGUpIHsKICAgICAgY2FzZSAidGV4dCI6IG5ld0ZpbGVEYXRhW2lucHV0c1tpXS5uYW1lXSA9IGlucHV0c1tpXS52YWx1ZTsgYnJlYWs7CiAgICB9CiAgfQoKICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdHMubGVuZ3RoOyBpKyspIHsKICAgIG5ld0ZpbGVEYXRhW3NlbGVjdHNbaV0uaWRdID0gc2VsZWN0c1tpXS5vcHRpb25zW3NlbGVjdHNbaV0uc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgfQoKICBpZiAoZGVsZXRlRmlsZSA9PSB0cnVlKSB7CiAgICBzd2l0Y2ggKGZpbGVUeXBlKSB7CiAgICAgIGNhc2UgIm0zdSI6IHZhciBhbGVydFRleHQgPSAiRGVsZXRlIHRoaXMgcGxheWxpc3Q/IjsgYnJlYWs7CiAgICAgIGNhc2UgImhkaHIiOiB2YXIgYWxlcnRUZXh0ID0gIkRlbGV0ZSB0aGlzIEhESG9tZVJ1biB0dW5lcj8iOyBicmVhazsKICAgICAgY2FzZSAieG1sdHYiOiB2YXIgYWxlcnRUZXh0ID0gIkRlbGV0ZSB0aGlzIFhNTFRWIGZpbGU/IjsgYnJlYWs7CiAgICB9CgogICAgaWYgKGNvbmZpcm0oYWxlcnRUZXh0KSkgewogICAgICBuZXdGaWxlRGF0YVsiZGVsZXRlIl0gPSB0cnVlCiAgICAgIGRhdGEgPSBidWlsZEZpbGVzT2JqKGZpbGVUeXBlLCBmaWxlSUQsIG5ld0ZpbGVEYXRhKTsKICAgICAgY29uc29sZS5sb2coZGF0YSk7CgogICAgfSBlbHNlIHsKICAgICAgc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOwogICAgICByZXR1cm4KCiAgICB9CgogIH0gZWxzZSB7CgogICAgc3dpdGNoIChjb25maWdbImZpbGVzIl1bZmlsZVR5cGVdLmhhc093blByb3BlcnR5KGZpbGVJRCkpIHsKCiAgICAgIGNhc2UgdHJ1ZToKICAgICAgICBkYXRhID0gY29uZmlnWyJmaWxlcyJdW2ZpbGVUeXBlXVtmaWxlSURdOwogICAgICAgIGlmIChkYXRhWyJmaWxlLnNvdXJjZSJdICE9IG5ld0ZpbGVEYXRhWyJmaWxlLnNvdXJjZSJdKSB7CiAgICAgICAgICBkYXRhWyJ1cGRhdGUiXSA9IHRydWUKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YVsidXBkYXRlUGxheWxpc3ROYW1lIl0gPSB0cnVlOwogICAgICAgIH0KICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgbmV3RmlsZURhdGFbIm5ldyJdID0gdHJ1ZTsKICAgICAgICBkYXRhID0gYnVpbGRGaWxlc09iaihmaWxlVHlwZSwgZmlsZUlELCBuZXdGaWxlRGF0YSk7CiAgICAgICAgYnJlYWsKCiAgICB9CgogIH0KCiAgc3dpdGNoIChmaWxlVHlwZSkgewoKICAgIGNhc2UgIm0zdSI6IGRhdGFbImNtZCJdID0gInNhdmVGaWxlc00zVSI7IGJyZWFrOwogICAgY2FzZSAiaGRociI6IGRhdGFbImNtZCJdID0gInNhdmVGaWxlc0hESFIiOyBicmVhazsKICAgIGNhc2UgInhtbHR2IjogZGF0YVsiY21kIl0gPSAic2F2ZUZpbGVzWE1MVFYiOyBicmVhazsKCiAgfQogIC8vY29uc29sZS5sb2coZGF0YSk7CiAgVGhyZWFkZmluKGRhdGEpOwogIHJldHVybgp9CgpmdW5jdGlvbiB1cGRhdGVGaWxlKGZpbGVJRCwgZmlsZVR5cGUsIGFsbEZpbGVzKSB7CgogIHN3aXRjaCAoY29uZmlnWyJmaWxlcyJdW2ZpbGVUeXBlXS5oYXNPd25Qcm9wZXJ0eShmaWxlSUQpKSB7CgogICAgY2FzZSB0cnVlOgoKICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgIHZhciBkYXRhID0gYnVpbGRGaWxlc09iaihmaWxlVHlwZSwgZmlsZUlELCBjb25maWdbImZpbGVzIl1bZmlsZVR5cGVdW2ZpbGVJRF0pCiAgICAgIGRhdGFbIm5ldyJdID0gdHJ1ZQoKICAgICAgc3dpdGNoIChmaWxlVHlwZSkgewoKICAgICAgICBjYXNlICJtM3UiOiBkYXRhWyJjbWQiXSA9ICJ1cGRhdGVGaWxlTTNVIjsgYnJlYWs7CiAgICAgICAgY2FzZSAiaGRociI6IGRhdGFbImNtZCJdID0gInVwZGF0ZUZpbGVIREhSIjsgYnJlYWs7CiAgICAgICAgY2FzZSAieG1sdHYiOiBkYXRhWyJjbWQiXSA9ICJ1cGRhdGVGaWxlWE1MVFYiOyBicmVhazsKCiAgICAgIH0KCiAgICAgIFRocmVhZGZpbihkYXRhKTsKCiAgICAgIGJyZWFrOwogIH0KCn0KCmZ1bmN0aW9uIGJ1aWxkRmlsZXNPYmooZmlsZVR5cGUsIGZpbGVJRCwgb2JqKSB7CgogIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogIGRhdGFbImZpbGVzIl0gPSBuZXcgT2JqZWN0KCk7CiAgZGF0YVsiZmlsZXMiXVtmaWxlVHlwZV0gPSBuZXcgT2JqZWN0KCk7CiAgZGF0YVsiZmlsZXMiXVtmaWxlVHlwZV1bZmlsZUlEXSA9IG9iagogIHJldHVybiBkYXRhCgp9" - webUI["html/js/menu.js"] = "CmZ1bmN0aW9uIHNldE1lbnVJdGVtKCkgewoKICBtZW51ID0gbmV3IE9iamVjdCgpOwogIHN1Yk1lbnUgPSBuZXcgT2JqZWN0KCk7CgogIHZhciBtZW51X20zdSA9IG5ldyBPYmplY3QoKTsKICBtZW51X20zdVsiX21lbnVUeXBlIl0gPSAiaW5wdXRBcnJheSI7CiAgbWVudV9tM3VbIl9lbGVtZW50Il0gPSAiTEkiOwogIG1lbnVfbTN1WyJfY29uZmlnS2V5Il0gPSAiZmlsZXMubTN1IjsKICBtZW51X20zdVsiX3RleHQiXSA9ICJQbGF5bGlzdCI7CiAgbWVudV9tM3VbIl9pY29uIl0gPSAiaW1nL20zdS5wbmciOwogIG1lbnVfbTN1WyJfaGVhZGxpbmUiXSA9ICJQbGF5bGlzdHM6IExvY2FsIG9yIHJlbW90ZSI7CiAgbWVudV9tM3VbIl91c2FnZSJdID0gIjxiPkluZm88L2I+PGJyPkF2YWlsYWJpbGl0eTogRmlsZSBhdmFpbGFiaWxpdHkgaW4gcGVyY2VudDxicj5TdHJlYW1zOiAgICAgIE51bWJlciBvZiBzdHJlYW1zIGluIHRoZSBmaWxlLjxicj5ncm91cC10aXRsZTogIFN0cmVhbXMgdGhhdCBhcmUgYXNzaWduZWQgdG8gYSBncm91cC4gU2ltcGxpZmllcyBmaWx0ZXJpbmcgc3RyZWFtczxicj50dmctaWQ6ICAgICAgIFRoaXMgSUQgaXMgdXNlZCBmb3IgYXV0b21hdGljIG1hcHBpbmcsIG11c3QgbWF0Y2ggd2l0aCB0aGUgY2hhbm5lbCBJRCBpbiB0aGUgWE1MVFYgZmlsZS48YnI+VW5pcXVlIElEOiAgICBTdHJlYW1zIHdpdGggYSB1bmlxdWUgSUQgdG8gaWRlbnRpZnkgdGhlbS4gQWxsb3dzIGNoYW5uZWwgbmFtZSBjaGFuZ2VzIGluIHRoZSBNM1Ugd2l0aG91dCBsb3NpbmcgdGhlIFhNTFRWIG1hcHBpbmcgKFBQViAvIGxpdmUgZXZlbnRzKS48YnI+PGJyPjxiPlVzYWdlIE0zVTo8L2I+PGJyPlJlbW90ZSBwbGF5bGlzdDogaHR0cDovL3lvdXIuaXB0di5wcm92aWRlci5jb20vZmlsZS5tM3U8YnI+TG9jYWwgIHBsYXlsaXN0OiAvcGF0aC90by9maWxlLm0zdTxicj48YnI+PGI+VXNhZ2UgSERIb21lUnVuOjwvYj48YnI+SVA6IDE5Mi4xNjguMS4xMDo1MDA0PGJyPiIKICBtZW51X20zdVsibmFtZSJdID0gImZpbGUiOwogIG1lbnVfbTN1WyJpZCJdID0gImZpbGUiOwogIG1lbnVfbTN1WyJ2YWx1ZSJdID0gbWVudV9tM3VbIm5hbWUiXTsKICBtZW51X20zdVsicGxhY2Vob2xkZXIiXSA9ICJQbGF5bGlzdDogbG9jYWwgb3IgcmVtb3RlIjsKICBtZW51X20zdVsib25jbGljayJdID0gImphdmFzY3JpcHQ6IHRvZ2dsZU1lbnUodGhpcyk7IjsKICBtZW51X20zdVsiY2xhc3MiXSA9ICJtZW51LW5vdEFjdGl2ZSI7CgoKICB2YXIgbWVudV9maWx0ZXIgPSBuZXcgT2JqZWN0KCk7CiAgbWVudV9maWx0ZXJbIl9tZW51VHlwZSJdID0gImlucHV0QXJyYXkiOwogIG1lbnVfZmlsdGVyWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2ZpbHRlclsiX2NvbmZpZ0tleSJdID0gImZpbHRlciI7CiAgbWVudV9maWx0ZXJbIl90ZXh0Il0gPSAiRmlsdGVyIjsKICBtZW51X2ZpbHRlclsiX2ljb24iXSA9ICJpbWcvZmlsdGVyLnBuZyI7CiAgbWVudV9maWx0ZXJbIl9oZWFkbGluZSJdID0gIkZpbHRlciBieSBNM1UgcGFyYW1ldGVycywgZS5nLiBncm91cC10aXRsZSI7CiAgbWVudV9maWx0ZXJbIl91c2FnZSJdID0gIjxiPlVzYWdlOjwvYj48YnI+U3BvcnQgLSBBbGwgc3BvcnRzIGNoYW5uZWxzPGJyPlNwb3J0IHtIRH0gLSBBbGwgSEQgc3BvcnRzIGNoYW5uZWxzPGJyPlNwb3J0IHtIRH0gIXtFUyxERX0gLSBBbGwgSEQgc3BvcnRzIGNoYW5uZWxzLCBidXQgbm8gU3BhbmlzaCBhbmQgR2VybWFuPGJyPjxicj5UbyBmaWx0ZXIgdGhlIHN0cmVhbXMgb2YgYSBIREhvbWVSdW4sIHRoZSBwbGF5bGlzdCBuYW1lIGNhbiBiZSBlbnRlcmVkOjxicj5NeSB0dW5lciB7SER9IgogIC8vbWVudV9maWx0ZXJbIl91c2FnZSJdICAgICAgID0gIjxiPlVzYWdlOjwvYj48YnI+QWxsIHNwb3J0cyBjaGFubmVsczogU3BvcnQ8YnI+QWxsIEhEIHNwb3J0cyBjaGFubmVsczogU3BvcnQge0hEfTxicj5BbGwgSEQgc3BvcnRzIGNoYW5uZWxzLCBidXQgbm8gU3BhbmlzaCBhbmQgR2VybWFuOiBTcG9ydCB7SER9ICF7RVMsREV9IgogIG1lbnVfZmlsdGVyWyJuYW1lIl0gPSAiZmlsdGVyIjsKICBtZW51X2ZpbHRlclsiaWQiXSA9ICJNM1UiOwogIG1lbnVfZmlsdGVyWyJ2YWx1ZSJdID0gbWVudV9maWx0ZXJbIm5hbWUiXTsKICBtZW51X2ZpbHRlclsicGxhY2Vob2xkZXIiXSA9ICJGaWx0ZXIgc3RyZWFtczogU3BvcnQiOwogIG1lbnVfZmlsdGVyWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfZmlsdGVyWyJjbGFzcyJdID0gIm1lbnUtbm90QWN0aXZlIjsKCiAgdmFyIG1lbnVfaWQgPSBuZXcgT2JqZWN0KCk7CiAgbWVudV9pZFsiX21lbnVUeXBlIl0gPSAiaW5wdXRBcnJheSI7CiAgbWVudV9pZFsiX2VsZW1lbnQiXSA9ICJMSSI7CiAgbWVudV9pZFsiX2NvbmZpZ0tleSJdID0gImlkIjsKICBtZW51X2lkWyJfdGV4dCJdID0gIlBNUyBJRCI7CiAgbWVudV9pZFsiX2ljb24iXSA9ICJpbWcvbnVtYmVyLnBuZyI7CiAgbWVudV9pZFsiX2hlYWRsaW5lIl0gPSAiU2V0dXAgUE1TIGd1aWRlIG51bWJlciI7CiAgbWVudV9pZFsiX3VzYWdlIl0gPSAnU29tZSBwbGF5bGlzdHMgaGF2ZSB1bmlxdWUgY2hhbm5lbCBJRHMuPGJyPkVudGVyIHRoZSBrZXl3b3JkIG9mIHRoZSBJRC4gVGhlIGNoYW5uZWwgYXNzaWdubWVudCBpbiBQTVMgd2lsbCBjaGFuZ2UgYXMgYSByZXN1bHQuPGJyPjxicj5lLmcuIGNoYW5uZWxJRDxicj4jRVhUSU5GOjAgdHlwZT0ic3RyZWFtIiA8Yj5jaGFubmVsSWQ8L2I+PSI4MSIsIE15IFN0cmVhbWluZyBDaGFubmVsIEhEPGJyPjxicj5Pbmx5IGVudGVyIGhlcmUgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIScKICBtZW51X2lkWyJuYW1lIl0gPSAiaWQiOwogIG1lbnVfaWRbImlkIl0gPSAiaWQiOwogIG1lbnVfaWRbInZhbHVlIl0gPSBtZW51X2lkWyJuYW1lIl07CiAgbWVudV9pZFsicGxhY2Vob2xkZXIiXSA9ICJVbmlxdWUgSUQgZnJvbSB0aGUgTTNVIGZpbGUiOwogIG1lbnVfaWRbIm9uY2xpY2siXSA9ICJqYXZhc2NyaXB0OiB0b2dnbGVNZW51KHRoaXMpOyI7CiAgbWVudV9pZFsiY2xhc3MiXSA9ICJtZW51LW5vdEFjdGl2ZSI7CgoKICB2YXIgbWVudV94bWx0diA9IG5ldyBPYmplY3QoKTsKICBtZW51X3htbHR2WyJfbWVudVR5cGUiXSA9ICJpbnB1dEFycmF5IjsKICBtZW51X3htbHR2WyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X3htbHR2WyJfY29uZmlnS2V5Il0gPSAiZmlsZXMueG1sdHYiOwogIG1lbnVfeG1sdHZbIl90ZXh0Il0gPSAiWE1MVFYiOwogIG1lbnVfeG1sdHZbIl9pY29uIl0gPSAiaW1nL3htbHR2LnBuZyI7CiAgbWVudV94bWx0dlsiX2hlYWRsaW5lIl0gPSAiWE1MVFYgZmlsZXM6IExvY2FsIG9yIHJlbW90ZSI7CiAgbWVudV94bWx0dlsiX3VzYWdlIl0gPSAiPGI+SW5mbzo8L2I+PGJyPkF2YWlsYWJpbGl0eTogRmlsZSBhdmFpbGFiaWxpdHkgaW4gcGVyY2VudDxicj5DaGFubmVsczogICAgIE51bWJlciBvZiBjaGFubmVscyBpbiB0aGUgZmlsZTxicj5Qcm9ncmFtczogICAgIE51bWJlciBvZiBFUEcgZGF0YTxicj48YnI+PGI+VXNhZ2U6PC9iPjxicj5SZW1vdGUgWE1MVFYgZmlsZTogaHR0cDovL3lvdXIuZXBnLnByb3ZpZGVyLmNvbS9ndWlkZS54bWw8YnI+TG9jYWwgIFhNTFRWIGZpbGU6IC9wYXRoL3RvL2d1aWRlLnhtbCIKICBtZW51X3htbHR2WyJuYW1lIl0gPSAieG1sdHYiOwogIG1lbnVfeG1sdHZbImlkIl0gPSAieG1sdHYiOwogIG1lbnVfeG1sdHZbInZhbHVlIl0gPSBtZW51X3htbHR2WyJuYW1lIl07CiAgbWVudV94bWx0dlsicGxhY2Vob2xkZXIiXSA9ICJYTUxUViBGaWxlOiBsb2NhbCBvciByZW1vdGUiOwogIG1lbnVfeG1sdHZbIm9uY2xpY2siXSA9ICJqYXZhc2NyaXB0OiB0b2dnbGVNZW51KHRoaXMpOyI7CiAgbWVudV94bWx0dlsiY2xhc3MiXSA9ICJtZW51LW5vdEFjdGl2ZSI7CgogIG1lbnVfbWFwcGluZyA9IG5ldyBPYmplY3QoKTsKICBtZW51X21hcHBpbmdbIl9lbGVtZW50Il0gPSAiTEkiOwogIG1lbnVfbWFwcGluZ1siX3RleHQiXSA9ICJNYXBwaW5nIjsKICBtZW51X21hcHBpbmdbIl9pY29uIl0gPSAiaW1nL21hcHBpbmcucG5nIjsKICBtZW51X21hcHBpbmdbIl9jb25maWdLZXkiXSA9ICJtYXBwaW5nIjsKICBtZW51X21hcHBpbmdbIl9oZWFkbGluZSJdID0gIlhNTFRWIGFzc2lnbm1lbnQgYW5kIHNvcnRpbmcgb2YgY2hhbm5lbHMiOwogIG1lbnVfbWFwcGluZ1siaWQiXSA9ICJtYXBwaW5nIjsKICBtZW51X21hcHBpbmdbIm9uY2xpY2siXSA9ICJqYXZhc2NyaXB0OiB0b2dnbGVNZW51KHRoaXMpOyI7CiAgbWVudV9tYXBwaW5nWyJjbGFzcyJdID0gIm1lbnUtbm90QWN0aXZlIHBob25lIjsKCiAgbWVudV91c2VycyA9IG5ldyBPYmplY3QoKTsKICBtZW51X3VzZXJzWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X3VzZXJzWyJfdGV4dCJdID0gIlVzZXJzIjsKICBtZW51X3VzZXJzWyJfaWNvbiJdID0gImltZy91c2Vycy5wbmciOwogIG1lbnVfdXNlcnNbIl9jb25maWdLZXkiXSA9ICJ1c2VycyI7CiAgbWVudV91c2Vyc1siX2hlYWRsaW5lIl0gPSAiQWRtaW5pc3RyYXRpb24gb2YgdXNlcnMgYW5kIHBlcm1pc3Npb25zIjsKICBtZW51X3VzZXJzWyJpZCJdID0gInVzZXJzIjsKICBtZW51X3VzZXJzWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfdXNlcnNbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwogIG1lbnVfdXNlcnNbIl91c2FnZSJdID0gIjxiPkF1dGhvcml6YXRpb24gZ3JvdXBzOjwvYj48YnI+V0VCOiBVc2VycyBjYW4gbG9nIGluIHRvIHRoZSB3ZWIgaW50ZXJmYWNlPGJyPlBNUzogUHJvZ3JhbXMgbGlrZSBQbGV4IGNhbiBhY2Nlc3MgdGhlIGNoYW5uZWwgbGlzdC4gTG9naW4gdmlhIERWUiBJUDogdXNlcm5hbWU6cGFzc3dvcmRAdGhyZWFkZmluLmlwOnBvcnQ8YnI+TTNVOiBBbGxvd3MgY2xpZW50cyB0byBkb3dubG9hZCB0aGUgTTNVIHBsYXlsaXN0Ljxicj5YTUw6IEFsbG93cyBjbGllbnRzIHRvIGRvd25sb2FkIHRoZSBYTUxUViBmaWxlLjxicj5BUEk6IEFsbG93cyBjbGllbnRzIHRvIHVzZSB0aGUgQVBJIGludGVyZmFjZS48YnI+PGJyPiEhISBGb3IgUE1TIGF1dGhlbnRpY2F0aW9uLCBvbmx5IHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSB2YWxpZDogISQoKT0uLC06Ozxicj48YnI+VGhlIGluZGl2aWR1YWwgYXV0aGVudGljYXRpb24gZ3JvdXBzIGNhbiBiZSBhY3RpdmF0ZWQgLyBkZWFjdGl2YXRlZCBpbiB0aGUgc2V0dGluZ3MgbWVudS4iCgogIG1lbnVfc2V0dGluZ3MgPSBuZXcgT2JqZWN0KCk7CiAgbWVudV9zZXR0aW5nc1siX2VsZW1lbnQiXSA9ICJMSSI7CiAgbWVudV9zZXR0aW5nc1siX3RleHQiXSA9ICJTZXR0aW5ncyI7CiAgbWVudV9zZXR0aW5nc1siX2ljb24iXSA9ICJpbWcvc2V0dGluZ3MucG5nIjsKICBtZW51X3NldHRpbmdzWyJfY29uZmlnS2V5Il0gPSAic2V0dGluZ3MiOwogIG1lbnVfc2V0dGluZ3NbIl9oZWFkbGluZSJdID0gIlNldHRpbmdzIjsKICBtZW51X3NldHRpbmdzWyJfc3ViTWVudSJdID0gIjcwMSw3MDIsNzAzLDcwNCw3MDUsNzA2LDcwNyw3MDgsNzk5LDcxMCw3MTEsNzEyLDcxMyw3MTQiOwogIG1lbnVfc2V0dGluZ3NbImlkIl0gPSAic2V0dGluZ3MiOwogIG1lbnVfc2V0dGluZ3NbIm9uY2xpY2siXSA9ICJqYXZhc2NyaXB0OiB0b2dnbGVNZW51KHRoaXMpOyI7CiAgbWVudV9zZXR0aW5nc1siY2xhc3MiXSA9ICJtZW51LW5vdEFjdGl2ZSI7CgogIG1lbnVfbG9nID0gbmV3IE9iamVjdCgpOwogIG1lbnVfbG9nWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2xvZ1siX3RleHQiXSA9ICJMb2ciOwogIG1lbnVfbG9nWyJfaWNvbiJdID0gImltZy9sb2cucG5nIjsKICBtZW51X2xvZ1siX2hlYWRsaW5lIl0gPSAiTG9nIjsKICBtZW51X2xvZ1siX2NvbmZpZ0tleSJdID0gImxvZyI7CiAgbWVudV9sb2dbImlkIl0gPSAibG9nIjsKICBtZW51X2xvZ1sib25jbGljayJdID0gImphdmFzY3JpcHQ6IHRvZ2dsZU1lbnUodGhpcyk7IjsKICBtZW51X2xvZ1siY2xhc3MiXSA9ICJtZW51LW5vdEFjdGl2ZSI7CgogIG1lbnVfbG9nb3V0ID0gbmV3IE9iamVjdCgpOwogIG1lbnVfbG9nb3V0WyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2xvZ291dFsiX3RleHQiXSA9ICJMb2dvdXQiOwogIG1lbnVfbG9nb3V0WyJfaWNvbiJdID0gImltZy9sb2dvdXQucG5nIjsKICBtZW51X2xvZ291dFsiaWQiXSA9ICJsb2dvdXQiOwogIG1lbnVfbG9nb3V0WyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogbG9nb3V0KCk7IjsKICBtZW51X2xvZ291dFsiY2xhc3MiXSA9ICJtZW51LW5vdEFjdGl2ZSI7CgogIHZhciBtZW51X3NjaGVkdWxlID0gbmV3IE9iamVjdCgpOwogIG1lbnVfc2NoZWR1bGVbIl9tZW51VHlwZSJdID0gImlucHV0QXJyYXkiOwogIG1lbnVfc2NoZWR1bGVbIl9lbGVtZW50Il0gPSAiTEkiOwogIG1lbnVfc2NoZWR1bGVbIl9jb25maWdLZXkiXSA9ICJ1cGRhdGUiOwogIG1lbnVfc2NoZWR1bGVbIl90ZXh0Il0gPSAiU2NoZWR1bGUiOwogIG1lbnVfc2NoZWR1bGVbIl9pY29uIl0gPSAiaW1nL3NjaGVkdWxlLnBuZyI7CiAgbWVudV9zY2hlZHVsZVsiX2hlYWRsaW5lIl0gPSAiU2NoZWR1bGUgZm9yIHVwZGF0aW5nIE0zVSwgWE1MVFYgZmlsZXMgYW5kIGNyZWF0aW5nIGEgbG9jYWwgYmFja3VwIjsKICBtZW51X3NjaGVkdWxlWyJfdXNhZ2UiXSA9ICI8Yj5Vc2FnZTo8L2I+PGJyPjA4MTUgPSA4OjE1IGFtPGJyPjE5MzAgPSA3OjMwIHBtIgogIG1lbnVfc2NoZWR1bGVbIm5hbWUiXSA9ICJ1cGRhdGUiOwogIG1lbnVfc2NoZWR1bGVbImlkIl0gPSAidXBkYXRlIjsKICBtZW51X3NjaGVkdWxlWyJ2YWx1ZSJdID0gbWVudV9pZFsibmFtZSJdOwogIG1lbnVfc2NoZWR1bGVbInBsYWNlaG9sZGVyIl0gPSAidGltZSBvZiBkYXkgKDI0LWhvdXIgY2xvY2spIjsKICBtZW51X3NjaGVkdWxlWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfc2NoZWR1bGVbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwoKICB2YXIgbWVudV9maWxlc1VwZGF0ZSA9IG5ldyBPYmplY3QoKTsKICBtZW51X2ZpbGVzVXBkYXRlWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2ZpbGVzVXBkYXRlWyJfbWVudVR5cGUiXSA9ICJjaGVja2JveCI7CiAgbWVudV9maWxlc1VwZGF0ZVsiX2NvbmZpZ0tleSJdID0gImZpbGVzLnVwZGF0ZSI7CiAgbWVudV9maWxlc1VwZGF0ZVsiX2xhYmVsIl0gPSAiVXBkYXRlIHRoZSBwcm92aWRlciBmaWxlcyBhdCBzeXN0ZW0gc3RhcnR1cCI7CiAgbWVudV9maWxlc1VwZGF0ZVsiX2hlYWRsaW5lIl0gPSAiVXBkYXRlIHRoZSBwcm92aWRlciBmaWxlcyBhdCBzeXN0ZW0gc3RhcnR1cCI7CiAgbWVudV9maWxlc1VwZGF0ZVsiX3VzYWdlIl0gPSAiUGxheWxpc3RzIGFuZCBYTUxUViBmaWxlcyBhcmUgdXBkYXRlZCBieSBUaHJlYWRmaW4gYXQgc3lzdGVtIHN0YXJ0dXAuIgogIG1lbnVfZmlsZXNVcGRhdGVbIm5hbWUiXSA9ICJmaWxlcy51cGRhdGUiOwogIG1lbnVfZmlsZXNVcGRhdGVbImlkIl0gPSAiZmlsZXMudXBkYXRlIjsKICBtZW51X2ZpbGVzVXBkYXRlWyJ2YWx1ZSJdID0gbWVudV9maWxlc1VwZGF0ZVsibmFtZSJdOwogIG1lbnVfZmlsZXNVcGRhdGVbIm9uY2xpY2siXSA9ICJqYXZhc2NyaXB0OiB0b2dnbGVNZW51KHRoaXMpOyI7CiAgbWVudV9maWxlc1VwZGF0ZVsiY2xhc3MiXSA9ICJtZW51LW5vdEFjdGl2ZSI7CgogIHZhciBtZW51X3R1bmVyID0gbmV3IE9iamVjdCgpOwogIG1lbnVfdHVuZXJbIl9lbGVtZW50Il0gPSAiTEkiOwogIG1lbnVfdHVuZXJbIl9tZW51VHlwZSJdID0gInNlbGVjdCI7CiAgbWVudV90dW5lclsiX2NvbmZpZ0tleSJdID0gInR1bmVyIjsKICBtZW51X3R1bmVyWyJfbGFiZWwiXSA9ICJBdmFpbGFibGUgdHVuZXJzIjsKICBtZW51X3R1bmVyWyJfdGV4dCJdID0gIlR1bmVyIjsKICBtZW51X3R1bmVyWyJfaWNvbiJdID0gImltZy90dW5lci5wbmciOwogIG1lbnVfdHVuZXJbIl9oZWFkbGluZSJdID0gIk51bWJlciBvZiB0dW5lcnMiOwogIG1lbnVfdHVuZXJbIl91c2FnZSJdID0gIlRoaXMgc2V0dGluZyBpcyBvbmx5IHVzZWQgYnkgUGxleCBhbmQgRW1ieS48YnI+VGhlIG51bWJlciBvZiBjb25jdXJyZW50IHN0cmVhbXMgYWxsb3dlZCBieSB0aGUgSVBUViBwcm92aWRlci48YnI+QWZ0ZXIgYSBjaGFuZ2UsIFRocmVhZGZpbiBtdXN0IGJlIGRlbGV0ZSBpbiB0aGUgUE1TIERWUiBzZXR0aW5ncyBhbmQgc2V0IHVwIGFnYWluLiIKICBtZW51X3R1bmVyWyJuYW1lIl0gPSAidHVuZXIiOwogIG1lbnVfdHVuZXJbImlkIl0gPSAidHVuZXIiOwogIG1lbnVfdHVuZXJbInZhbHVlIl0gPSBtZW51X3R1bmVyWyJuYW1lIl07CiAgbWVudV90dW5lclsicGxhY2Vob2xkZXIiXSA9ICJOdW1iZXIgb2YgdHVuZXJzIjsKICBtZW51X3R1bmVyWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfdHVuZXJbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwoKICB2YXIgb3B0aW9uVmFsdWVzID0gbmV3IEFycmF5KCk7CiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMTAwOyBpKyspIHsKICAgIG9wdGlvblZhbHVlcy5wdXNoKGkpCiAgfQogIG1lbnVfdHVuZXJbIl9vcHRpb25WYWx1ZXMiXSA9IG9wdGlvblZhbHVlczsKCiAgdmFyIG1lbnVfZXBnID0gbmV3IE9iamVjdCgpOwogIG1lbnVfZXBnWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2VwZ1siX21lbnVUeXBlIl0gPSAic2VsZWN0IjsKICBtZW51X2VwZ1siX2NvbmZpZ0tleSJdID0gImVwZ1NvdXJjZSI7CiAgbWVudV9lcGdbIl9sYWJlbCJdID0gIlNlbGVjdGlvbiBvZiB0aGUgRVBHIHNvdXJjZSI7CiAgbWVudV9lcGdbIl90ZXh0Il0gPSAiRVBHIHNvdXJjZSI7CiAgbWVudV9lcGdbIl9oZWFkbGluZSJdID0gIlNlbGVjdGlvbiBvZiB0aGUgRVBHIHNvdXJjZSI7CiAgbWVudV9lcGdbIl91c2FnZSJdID0gIlBNUzogICBVc2UgRVBHIGRhdGEgZnJvbSBQbGV4IG9yIEVtYnkuPGJyPlhFUEc6ICBVc2Ugb2YgZXh0ZXJuYWwgRVBHIGRhdGEgKFhNTFRWKS48YnI+ICAgICAgIFNldmVyYWwgWE1MVFYgc291cmNlcyBwb3NzaWJsZS48YnI+ICAgICAgIEFsbG93cyBlZGl0aW5nIGFuZCBvcmRlciBjaGFubmVscy48YnI+ICAgICAgIE0zVSAvIFhNTFRWIGV4cG9ydCAoSFRUUCBsaW5rIGZvciBJUFRWIGFwcHMpLiIKICBtZW51X2VwZ1sibmFtZSJdID0gImVwZ1NvdXJjZSI7CiAgbWVudV9lcGdbImlkIl0gPSAiZXBnU291cmNlIjsKICBtZW51X2VwZ1sidmFsdWUiXSA9IG1lbnVfZXBnWyJuYW1lIl07CiAgbWVudV9lcGdbInBsYWNlaG9sZGVyIl0gPSAiRVBHIHNvdXJjZSI7CiAgbWVudV9lcGdbIm9uY2xpY2siXSA9ICJqYXZhc2NyaXB0OiB0b2dnbGVNZW51KHRoaXMpOyI7CiAgbWVudV9lcGdbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwogIG1lbnVfZXBnWyJfb3B0aW9uVmFsdWVzIl0gPSBuZXcgQXJyYXkoIlBNUyIsICJYRVBHIik7CgogIHZhciBtZW51X3hlcGcgPSBuZXcgT2JqZWN0KCk7CiAgbWVudV94ZXBnWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X3hlcGdbIl9tZW51VHlwZSJdID0gImNoZWNrYm94IjsKICBtZW51X3hlcGdbIl9jb25maWdLZXkiXSA9ICJUaHJlYWRmaW5BdXRvVXBkYXRlIjsKICBtZW51X3hlcGdbIl9sYWJlbCJdID0gIkF1dG9tYXRpYyB1cGRhdGUgb2YgVGhyZWFkZmluIjsKICBtZW51X3hlcGdbIl9oZWFkbGluZSJdID0gIkF1dG9tYXRpYyB1cGRhdGUgb2YgVGhyZWFkZmluIjsKICBtZW51X3hlcGdbIl91c2FnZSJdID0gIklmIGEgbmV3IHZlcnNpb24gb2YgVGhyZWFkZmluIGlzIGF2YWlsYWJsZSwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZC4iCiAgbWVudV94ZXBnWyJuYW1lIl0gPSAiVGhyZWFkZmluQXV0b1VwZGF0ZSI7CiAgbWVudV94ZXBnWyJpZCJdID0gIlRocmVhZGZpbkF1dG9VcGRhdGUiOwogIG1lbnVfeGVwZ1sidmFsdWUiXSA9IG1lbnVfeGVwZ1sibmFtZSJdOwogIG1lbnVfeGVwZ1sib25jbGljayJdID0gImphdmFzY3JpcHQ6IHRvZ2dsZU1lbnUodGhpcyk7IjsKICBtZW51X3hlcGdbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwoKICB2YXIgbWVudV9hdXRvQmFja3VwUGF0aCA9IG5ldyBPYmplY3QoKTsKICBtZW51X2F1dG9CYWNrdXBQYXRoWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2F1dG9CYWNrdXBQYXRoWyJfbWVudVR5cGUiXSA9ICJzaW5nbGVJbnB1dCI7CiAgbWVudV9hdXRvQmFja3VwUGF0aFsiX2NvbmZpZ0tleSJdID0gImJhY2t1cC5wYXRoIjsKICBtZW51X2F1dG9CYWNrdXBQYXRoWyJfbGFiZWwiXSA9ICJMb2NhdGlvbiBmb3IgYXV0b21hdGljIGJhY2t1cHMiOwogIG1lbnVfYXV0b0JhY2t1cFBhdGhbIl9oZWFkbGluZSJdID0gIkxvY2F0aW9uIGZvciBhdXRvbWF0aWMgYmFja3VwcyI7CiAgbWVudV9hdXRvQmFja3VwUGF0aFsiX3VzYWdlIl0gPSAiQmVmb3JlIGFueSB1cGRhdGUgb2YgdGhlIHByb3ZpZGVyIGRhdGEgYnkgdGhlIHNjaGVkdWxlLCBUaHJlYWRmaW4gY3JlYXRlcyBhIGJhY2t1cC4gVGhlIHBhdGggZm9yIHRoZSBhdXRvbWF0aWMgYmFja3VwcyBjYW4gYmUgY2hhbmdlZC4gVGhyZWFkZmluIHJlcXVpcmVzIHdyaXRlIHBlcm1pc3Npb24gZm9yIHRoaXMgZm9sZGVyLiIKICBtZW51X2F1dG9CYWNrdXBQYXRoWyJuYW1lIl0gPSAiYmFja3VwLnBhdGgiOwogIG1lbnVfYXV0b0JhY2t1cFBhdGhbImlkIl0gPSAiYmFja3VwLnBhdGgiOwogIG1lbnVfYXV0b0JhY2t1cFBhdGhbInZhbHVlIl0gPSBtZW51X2F1dG9CYWNrdXBQYXRoWyJuYW1lIl07CiAgbWVudV9hdXRvQmFja3VwUGF0aFsib25jbGljayJdID0gImphdmFzY3JpcHQ6IHRvZ2dsZU1lbnUodGhpcyk7IjsKICBtZW51X2F1dG9CYWNrdXBQYXRoWyJjbGFzcyJdID0gIm1lbnUtbm90QWN0aXZlIjsKCiAgdmFyIG1lbnVfYXV0b0JhY2t1cEtlZXAgPSBuZXcgT2JqZWN0KCk7CiAgbWVudV9hdXRvQmFja3VwS2VlcFsiX2VsZW1lbnQiXSA9ICJMSSI7CiAgbWVudV9hdXRvQmFja3VwS2VlcFsiX21lbnVUeXBlIl0gPSAic2VsZWN0IjsKICBtZW51X2F1dG9CYWNrdXBLZWVwWyJfY29uZmlnS2V5Il0gPSAiYmFja3VwLmtlZXAiOwogIG1lbnVfYXV0b0JhY2t1cEtlZXBbIl90ZXh0Il0gPSAiS2VlcCI7CiAgbWVudV9hdXRvQmFja3VwS2VlcFsiX2xhYmVsIl0gPSAiTnVtYmVyIG9mIGJhY2t1cHMgdG8ga2VlcCI7CiAgbWVudV9hdXRvQmFja3VwS2VlcFsiX2hlYWRsaW5lIl0gPSAiTnVtYmVyIG9mIGJhY2t1cHMgdG8ga2VlcCI7CiAgbWVudV9hdXRvQmFja3VwS2VlcFsiX3VzYWdlIl0gPSAiIgogIG1lbnVfYXV0b0JhY2t1cEtlZXBbIm5hbWUiXSA9ICJiYWNrdXAua2VlcCI7CiAgbWVudV9hdXRvQmFja3VwS2VlcFsiaWQiXSA9ICJiYWNrdXAua2VlcCI7CiAgbWVudV9hdXRvQmFja3VwS2VlcFsidmFsdWUiXSA9IG1lbnVfYXV0b0JhY2t1cEtlZXBbIm5hbWUiXTsKICBtZW51X2F1dG9CYWNrdXBLZWVwWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfYXV0b0JhY2t1cEtlZXBbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwoKICB2YXIgb3B0aW9uVmFsdWVzID0gbmV3IEFycmF5KDUsIDEwLCAyMCwgMzAsIDQwLCA1MCk7CiAgbWVudV9hdXRvQmFja3VwS2VlcFsiX29wdGlvblZhbHVlcyJdID0gb3B0aW9uVmFsdWVzOwoKCiAgdmFyIG1lbnVfYnVmZmVyID0gbmV3IE9iamVjdCgpOwogIG1lbnVfYnVmZmVyWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2J1ZmZlclsiX21lbnVUeXBlIl0gPSAiY2hlY2tib3giOwogIG1lbnVfYnVmZmVyWyJfY29uZmlnS2V5Il0gPSAiYnVmZmVyIjsKICBtZW51X2J1ZmZlclsiX2xhYmVsIl0gPSAiU3RyZWFtIGJ1ZmZlcmluZyBbRXhwZXJpbWVudGFsXSI7CiAgbWVudV9idWZmZXJbIl9oZWFkbGluZSJdID0gIlN0cmVhbSBidWZmZXJpbmcgW0V4cGVyaW1lbnRhbF0iOwogIG1lbnVfYnVmZmVyWyJfdXNhZ2UiXSA9ICJXaXRoIGFjdGl2YXRlZCBidWZmZXIsIHN0cmVhbXMgY2FuIGJlIHBsYXllZCBhbmQgcmVjb3JkZWQgbW9yZSBmbHVlbnRseS48YnI+VGhlIHN0cmVhbSBpcyBwYXNzZWQgZnJvbSBUaHJlYWRmaW4gdG8gUGxleCAvIEVtYnkiCiAgbWVudV9idWZmZXJbIm5hbWUiXSA9ICJidWZmZXIiOwogIG1lbnVfYnVmZmVyWyJpZCJdID0gImJ1ZmZlciI7CiAgbWVudV9idWZmZXJbInZhbHVlIl0gPSBtZW51X2J1ZmZlclsibmFtZSJdOwogIG1lbnVfYnVmZmVyWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfYnVmZmVyWyJjbGFzcyJdID0gIm1lbnUtbm90QWN0aXZlIjsKCiAgdmFyIG1lbnVfYXBpID0gbmV3IE9iamVjdCgpOwogIG1lbnVfYXBpWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2FwaVsiX21lbnVUeXBlIl0gPSAiY2hlY2tib3giOwogIG1lbnVfYXBpWyJfY29uZmlnS2V5Il0gPSAiYXBpIjsKICBtZW51X2FwaVsiX2xhYmVsIl0gPSAiQVBJIGludGVyZmFjZSI7CiAgbWVudV9hcGlbIl9oZWFkbGluZSJdID0gIkFQSSBpbnRlcmZhY2UiOwogIG1lbnVfYXBpWyJfdXNhZ2UiXSA9ICdWaWEgQVBJIGludGVyZmFjZSBpdCBpcyBwb3NzaWJsZSB0byBzZW5kIGNvbW1hbmRzIHRvIFRocmVhZGZpbi4gQVBJIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIDxhIGhyZWY9Imh0dHBzOi8vdGhyZWFkZmluLmRlP3Njcm9sbD1hcGkiPmhlcmU8L2E+ICcKICAvL21lbnVfYXBpWyJfdXNhZ2UiXSAgICAgICAgPSAnVmlhIEFQSSBpbnRlcmZhY2UgaXQgaXMgcG9zc2libGUgdG8gc2VuZCBjb21tYW5kcyB0byBUaHJlYWRmaW4uIEFQSSBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSA8YSBocmVmPSJodHRwOi8vbG9jYWxob3N0OjEzMTM/c2Nyb2xsPWFwaSI+aGVyZTwvYT4gJwogIG1lbnVfYXBpWyJuYW1lIl0gPSAiYXBpIjsKICBtZW51X2FwaVsiaWQiXSA9ICJhcGkiOwogIG1lbnVfYXBpWyJ2YWx1ZSJdID0gbWVudV9hcGlbIm5hbWUiXTsKICBtZW51X2FwaVsib25jbGljayJdID0gImphdmFzY3JpcHQ6IHRvZ2dsZU1lbnUodGhpcyk7IjsKICBtZW51X2FwaVsiY2xhc3MiXSA9ICJtZW51LW5vdEFjdGl2ZSI7CgogIHZhciBtZW51X2F1dGhlbnRpY2F0aW9uV2ViID0gbmV3IE9iamVjdCgpOwogIG1lbnVfYXV0aGVudGljYXRpb25XZWJbIl9lbGVtZW50Il0gPSAiTEkiOwogIG1lbnVfYXV0aGVudGljYXRpb25XZWJbIl9tZW51VHlwZSJdID0gImNoZWNrYm94IjsKICBtZW51X2F1dGhlbnRpY2F0aW9uV2ViWyJfY29uZmlnS2V5Il0gPSAiYXV0aGVudGljYXRpb24ud2ViIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uV2ViWyJfbGFiZWwiXSA9ICJVc2VyIGF1dGhlbnRpY2F0aW9uIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uV2ViWyJfaGVhZGxpbmUiXSA9ICJVc2VyIGF1dGhlbnRpY2F0aW9uIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uV2ViWyJfdXNhZ2UiXSA9ICJBY2Nlc3MgdG8gVGhyZWFkZmluIHJlcXVpcmVzIGF1dGhlbnRpY2F0aW9uLiIKICBtZW51X2F1dGhlbnRpY2F0aW9uV2ViWyJuYW1lIl0gPSAiYXV0aGVudGljYXRpb24ud2ViIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uV2ViWyJpZCJdID0gImF1dGhlbnRpY2F0aW9uLndlYiI7CiAgbWVudV9hdXRoZW50aWNhdGlvbldlYlsidmFsdWUiXSA9IG1lbnVfYXV0aGVudGljYXRpb25XZWJbIm5hbWUiXTsKICBtZW51X2F1dGhlbnRpY2F0aW9uV2ViWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfYXV0aGVudGljYXRpb25XZWJbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwoKICB2YXIgbWVudV9hdXRoZW50aWNhdGlvblBtcyA9IG5ldyBPYmplY3QoKTsKICBtZW51X2F1dGhlbnRpY2F0aW9uUG1zWyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uUG1zWyJfbWVudVR5cGUiXSA9ICJjaGVja2JveCI7CiAgbWVudV9hdXRoZW50aWNhdGlvblBtc1siX2NvbmZpZ0tleSJdID0gImF1dGhlbnRpY2F0aW9uLnBtcyI7CiAgbWVudV9hdXRoZW50aWNhdGlvblBtc1siX2xhYmVsIl0gPSAiUGxleCBhdXRoZW50aWNhdGlvbi4iOwogIG1lbnVfYXV0aGVudGljYXRpb25QbXNbIl9oZWFkbGluZSJdID0gIlBsZXggYXV0aGVudGljYXRpb24uIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uUG1zWyJfdXNhZ2UiXSA9ICJQbGV4IHJlcXVlc3RzIGFyZSBvbmx5IHBvc3NpYmxlIHdpdGggYXV0aGVudGljYXRpb24uPGJyPldhcm5pbmchISEgQWZ0ZXIgYWN0aXZhdGluZyB0aGlzIGZ1bmN0aW9uIFRocmVhZGZpbiBtdXN0IGJlIGRlbGV0ZSBpbiB0aGUgUE1TIERWUiBzZXR0aW5ncyBhbmQgc2V0IHVwIGFnYWluLiIKICBtZW51X2F1dGhlbnRpY2F0aW9uUG1zWyJuYW1lIl0gPSAiYXV0aGVudGljYXRpb24ucG1zIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uUG1zWyJpZCJdID0gImF1dGhlbnRpY2F0aW9uLnBtcyI7CiAgbWVudV9hdXRoZW50aWNhdGlvblBtc1sidmFsdWUiXSA9IG1lbnVfYXV0aGVudGljYXRpb25QbXNbIm5hbWUiXTsKICBtZW51X2F1dGhlbnRpY2F0aW9uUG1zWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfYXV0aGVudGljYXRpb25QbXNbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwoKICB2YXIgbWVudV9hdXRoZW50aWNhdGlvbk0zdSA9IG5ldyBPYmplY3QoKTsKICBtZW51X2F1dGhlbnRpY2F0aW9uTTN1WyJfZWxlbWVudCJdID0gIkxJIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uTTN1WyJfbWVudVR5cGUiXSA9ICJjaGVja2JveCI7CiAgbWVudV9hdXRoZW50aWNhdGlvbk0zdVsiX2NvbmZpZ0tleSJdID0gImF1dGhlbnRpY2F0aW9uLm0zdSI7CiAgbWVudV9hdXRoZW50aWNhdGlvbk0zdVsiX2xhYmVsIl0gPSAiTTNVIGF1dGhlbnRpY2F0aW9uLiI7CiAgbWVudV9hdXRoZW50aWNhdGlvbk0zdVsiX2hlYWRsaW5lIl0gPSAiTTNVIGF1dGhlbnRpY2F0aW9uLiI7CiAgbWVudV9hdXRoZW50aWNhdGlvbk0zdVsiX3VzYWdlIl0gPSAiRG93bmxvYWRpbmcgdGhlIE0zVSBmaWxlIHZpYSBhbiBIVFRQIHJlcXVlc3QgaXMgb25seSBwb3NzaWJsZSB3aXRoIGF1dGhlbnRpY2F0aW9uLiIKICBtZW51X2F1dGhlbnRpY2F0aW9uTTN1WyJuYW1lIl0gPSAiYXV0aGVudGljYXRpb24ubTN1IjsKICBtZW51X2F1dGhlbnRpY2F0aW9uTTN1WyJpZCJdID0gImF1dGhlbnRpY2F0aW9uLm0zdSI7CiAgbWVudV9hdXRoZW50aWNhdGlvbk0zdVsidmFsdWUiXSA9IG1lbnVfYXV0aGVudGljYXRpb25NM3VbIm5hbWUiXTsKICBtZW51X2F1dGhlbnRpY2F0aW9uTTN1WyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfYXV0aGVudGljYXRpb25NM3VbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwoKCiAgdmFyIG1lbnVfYXV0aGVudGljYXRpb25YbWwgPSBuZXcgT2JqZWN0KCk7CiAgbWVudV9hdXRoZW50aWNhdGlvblhtbFsiX2VsZW1lbnQiXSA9ICJMSSI7CiAgbWVudV9hdXRoZW50aWNhdGlvblhtbFsiX21lbnVUeXBlIl0gPSAiY2hlY2tib3giOwogIG1lbnVfYXV0aGVudGljYXRpb25YbWxbIl9jb25maWdLZXkiXSA9ICJhdXRoZW50aWNhdGlvbi54bWwiOwogIG1lbnVfYXV0aGVudGljYXRpb25YbWxbIl9sYWJlbCJdID0gIlhFUEcgYXV0aGVudGljYXRpb24iOwogIG1lbnVfYXV0aGVudGljYXRpb25YbWxbIl9oZWFkbGluZSJdID0gIlhFUEcgYXV0aGVudGljYXRpb24iOwogIG1lbnVfYXV0aGVudGljYXRpb25YbWxbIl91c2FnZSJdID0gIkRvd25sb2FkaW5nIHRoZSBYRVBHIChYTUxUVikgZmlsZSB2aWEgYW4gSFRUUCByZXF1ZXN0IGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbi4iCiAgbWVudV9hdXRoZW50aWNhdGlvblhtbFsibmFtZSJdID0gImF1dGhlbnRpY2F0aW9uLnhtbCI7CiAgbWVudV9hdXRoZW50aWNhdGlvblhtbFsiaWQiXSA9ICJhdXRoZW50aWNhdGlvbi54bWwiOwogIG1lbnVfYXV0aGVudGljYXRpb25YbWxbInZhbHVlIl0gPSBtZW51X2F1dGhlbnRpY2F0aW9uWG1sWyJuYW1lIl07CiAgbWVudV9hdXRoZW50aWNhdGlvblhtbFsib25jbGljayJdID0gImphdmFzY3JpcHQ6IHRvZ2dsZU1lbnUodGhpcyk7IjsKICBtZW51X2F1dGhlbnRpY2F0aW9uWG1sWyJjbGFzcyJdID0gIm1lbnUtbm90QWN0aXZlIjsKCiAgdmFyIG1lbnVfYXV0aGVudGljYXRpb25BcGkgPSBuZXcgT2JqZWN0KCk7CiAgbWVudV9hdXRoZW50aWNhdGlvbkFwaVsiX2VsZW1lbnQiXSA9ICJMSSI7CiAgbWVudV9hdXRoZW50aWNhdGlvbkFwaVsiX21lbnVUeXBlIl0gPSAiY2hlY2tib3giOwogIG1lbnVfYXV0aGVudGljYXRpb25BcGlbIl9jb25maWdLZXkiXSA9ICJhdXRoZW50aWNhdGlvbi5hcGkiOwogIG1lbnVfYXV0aGVudGljYXRpb25BcGlbIl9sYWJlbCJdID0gIkFQSSBhdXRoZW50aWNhdGlvbiI7CiAgbWVudV9hdXRoZW50aWNhdGlvbkFwaVsiX2hlYWRsaW5lIl0gPSAiQVBJIGF1dGhlbnRpY2F0aW9uIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uQXBpWyJfdXNhZ2UiXSA9ICJBY2Nlc3MgdG8gdGhlIEFQSSBpbnRlcmZhY2UgaXMgb25seSBwb3NzaWJsZSB3aXRoIGF1dGhlbnRpY2F0aW9uLiIKICBtZW51X2F1dGhlbnRpY2F0aW9uQXBpWyJuYW1lIl0gPSAiYXV0aGVudGljYXRpb24uYXBpIjsKICBtZW51X2F1dGhlbnRpY2F0aW9uQXBpWyJpZCJdID0gImF1dGhlbnRpY2F0aW9uLmFwaSI7CiAgbWVudV9hdXRoZW50aWNhdGlvbkFwaVsidmFsdWUiXSA9IG1lbnVfYXV0aGVudGljYXRpb25BcGlbIm5hbWUiXTsKICBtZW51X2F1dGhlbnRpY2F0aW9uQXBpWyJvbmNsaWNrIl0gPSAiamF2YXNjcmlwdDogdG9nZ2xlTWVudSh0aGlzKTsiOwogIG1lbnVfYXV0aGVudGljYXRpb25BcGlbImNsYXNzIl0gPSAibWVudS1ub3RBY3RpdmUiOwoKCiAgLy8gTWFpbiBtZW51CiAgbWVudVsxMF0gPSBtZW51X20zdTsKCiAgc3dpdGNoIChjb25maWdbImVwZ1NvdXJjZSJdKSB7CiAgICBjYXNlICJQTVMiOgogICAgICBtZW51WzIwXSA9IG1lbnVfaWQ7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgIlhNTFRWIjoKICAgICAgbWVudVs0MF0gPSBtZW51X3htbHR2OwogICAgICBicmVhazsKCiAgICBjYXNlICJYRVBHIjoKICAgICAgbWVudVs0MF0gPSBtZW51X3htbHR2OwogICAgICBtZW51WzUwXSA9IG1lbnVfbWFwcGluZzsKICAgICAgYnJlYWs7CiAgfQoKICBtZW51WzMwXSA9IG1lbnVfZmlsdGVyOwoKICBpZiAoY29uZmlnWyJhdXRoZW50aWNhdGlvbi53ZWIiXSA9PSB0cnVlKSB7CiAgICBtZW51WzYwXSA9IG1lbnVfdXNlcnM7CiAgfQoKICBtZW51WzcwXSA9IG1lbnVfc2V0dGluZ3M7CiAgbWVudVs4MF0gPSBtZW51X2xvZzsKICBpZiAoY29uZmlnWyJhdXRoZW50aWNhdGlvbi53ZWIiXSA9PSB0cnVlKSB7CiAgICBtZW51WzEwMF0gPSBtZW51X2xvZ291dDsKICB9CgoKICAvLyBTdWItTWVudQoKICBzdWJNZW51WzcwMV0gPSBtZW51X3NjaGVkdWxlOwogIHN1Yk1lbnVbNzAyXSA9IG1lbnVfZmlsZXNVcGRhdGU7CiAgc3ViTWVudVs3MDNdID0gbWVudV90dW5lcjsKICBzdWJNZW51WzcwNF0gPSBtZW51X2VwZzsKICBzdWJNZW51WzcwNV0gPSBtZW51X3hlcGc7CiAgc3ViTWVudVs3MDZdID0gbWVudV9hdXRvQmFja3VwUGF0aDsKICBzdWJNZW51WzcwN10gPSBtZW51X2F1dG9CYWNrdXBLZWVwOwogIHN1Yk1lbnVbNzA4XSA9IG1lbnVfYnVmZmVyOwoKICBzdWJNZW51WzcxMF0gPSBtZW51X2F1dGhlbnRpY2F0aW9uV2ViOwoKICBpZiAoY29uZmlnWyJhdXRoZW50aWNhdGlvbi53ZWIiXSA9PSB0cnVlKSB7CiAgICBzdWJNZW51WzcxMV0gPSBtZW51X2F1dGhlbnRpY2F0aW9uUG1zOwogICAgc3ViTWVudVs3MTJdID0gbWVudV9hdXRoZW50aWNhdGlvbk0zdTsKICAgIHN1Yk1lbnVbNzEzXSA9IG1lbnVfYXV0aGVudGljYXRpb25YbWw7CiAgICBzdWJNZW51WzcxNF0gPSBtZW51X2F1dGhlbnRpY2F0aW9uQXBpOwogIH0KCiAgc3ViTWVudVs3OTldID0gbWVudV9hcGk7CgoKCiAgcmV0dXJuCn0KCmZ1bmN0aW9uIGNyZWF0ZU1lbnUoKSB7CgogIHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsKCiAgLy9jb25zb2xlLmxvZyhjb25maWcpOwogIHNldE1lbnVJdGVtKCk7CiAgdmFyIG1lbnVJdGVtcyA9IGdldE9iaktleXMobWVudSkKICB2YXIgbmF2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIk5BViIpWzBdOwogIG5hdi5pbm5lckhUTUwgPSAiIjsKICB2YXIgbmV3SXRlbSA9IG5ldyBPYmplY3QoKTsKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZW51SXRlbXMubGVuZ3RoOyBpKyspIHsKCgogICAgdmFyIG5ld0l0ZW0gPSBtZW51W21lbnVJdGVtc1tpXV07CiAgICBuZXdJdGVtWyJpZCJdID0gbWVudUl0ZW1zW2ldOwoKCiAgICBzd2l0Y2ggKG5ld0l0ZW0uaGFzT3duUHJvcGVydHkoIl9pY29uIikpIHsKICAgICAgY2FzZSB0cnVlOgogICAgICAgIHZhciBpdGVtVGV4dCA9IG5ld0l0ZW1bIl90ZXh0Il07CiAgICAgICAgZGVsZXRlIG5ld0l0ZW1bIl90ZXh0Il0KICAgICAgICBuYXYuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdJdGVtKSk7CiAgICAgICAgbmV3SXRlbVsiX3RleHQiXSA9IGl0ZW1UZXh0OwogICAgICAgIHZhciBuZXdJY29uID0gbmV3IE9iamVjdCgpOwogICAgICAgIG5ld0ljb25bIl9lbGVtZW50Il0gPSAiSU1HIjsKICAgICAgICBuZXdJY29uWyJzcmMiXSA9IG5ld0l0ZW1bIl9pY29uIl07CgogICAgICAgIHZhciBjdXJyZW50RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1lbnVJdGVtc1tpXSk7CiAgICAgICAgY3VycmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdJY29uKSk7CgoKICAgICAgICB2YXIgdGV4dCA9IG5ldyBPYmplY3QoKTsKICAgICAgICB0ZXh0WyJfZWxlbWVudCJdID0gIlAiCiAgICAgICAgdGV4dFsiX3RleHQiXSA9IGl0ZW1UZXh0OwogICAgICAgIHRleHRbImNsYXNzIl0gPSAibmF2LXRleHQiCiAgICAgICAgY3VycmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCh0ZXh0KSk7CiAgICAgICAgYnJlYWs7CgogICAgICBkZWZhdWx0OgogICAgICAgIG5hdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0ljb24pKTsKICAgICAgICBicmVhazsKICAgIH0KCiAgfQogIGlmIChhY3RpdmVNZW51ICE9IHVuZGVmaW5lZCkgewogICAgLy9jb25zb2xlLmxvZyhhY3RpdmVNZW51KTsKICAgIHRvZ2dsZU1lbnUoYWN0aXZlTWVudSk7CiAgfQoKICByZXR1cm4KfQoKZnVuY3Rpb24gdG9nZ2xlTWVudShlbG0pIHsKICAvL3Nob3dTdHJlYW1zKGZhbHNlKTsKICBjbGVhckludGVydmFsKGxvZ0ludGVydmFsKQogIGFjdGl2ZU1lbnUgPSBlbG07CiAgdmFyIGl0ZW0gPSBtZW51W2VsbS5pZF0KICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNldHRpbmdzIik7CiAgZGl2LmlubmVySFRNTCA9ICIiOwoKICAvLyBTZXQgSGVhZGxpbmUKICB2YXIgaGVhZGxpbmUgPSBuZXcgT2JqZWN0KCk7CiAgaGVhZGxpbmVbIl9lbGVtZW50Il0gPSAiSDQiOwogIGhlYWRsaW5lWyJfdGV4dCJdID0gaXRlbVsiX2hlYWRsaW5lIl07CiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoaGVhZGxpbmUpKTsKCiAgLy8gU3ViLU1lbnUKICBpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgiX3N1Yk1lbnUiKSA9PSB0cnVlKSB7CiAgICBvcGVuU3ViTWVudShpdGVtKTsKICAgIHJldHVybgogIH0KCiAgLy8gTWFwcGluZywgVXNlcnMsIExvZywgRmlsZXMKICBzd2l0Y2ggKGl0ZW1bIl9jb25maWdLZXkiXSkgewogICAgY2FzZSAibWFwcGluZyI6IG9wZW5NYXBwaW5nRWRpdG9yKGl0ZW0pOyByZXR1cm47IGJyZWFrOwogICAgY2FzZSAidXNlcnMiOiBvcGVuVXNlcnMoaXRlbSk7IHJldHVybjsgYnJlYWs7CiAgICBjYXNlICJsb2ciOiBzaG93TG9nKGl0ZW0pOyByZXR1cm47IGJyZWFrOwogICAgY2FzZSAiZmlsZXMubTN1Ijogb3BlbkZpbGVzKGl0ZW0sICJtM3UiKTsgcmV0dXJuOyBicmVhazsKICAgIGNhc2UgImZpbGVzLnhtbHR2Ijogb3BlbkZpbGVzKGl0ZW0sICJ4bWx0diIpOyByZXR1cm47IGJyZWFrOwoKICAgIGNhc2UgImZpbHRlciI6IHNob3dTdHJlYW1zKHRydWUpOyBicmVhazsKICB9CgoKCiAgdmFyIG5ld0hSID0gbmV3IE9iamVjdCgpOwogIG5ld0hSWyJfZWxlbWVudCJdID0gIkhSIgogIGRpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0hSKSk7CgogIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CiAgbmV3RW50cnlbInR5cGUiXSA9ICJidXR0b24iOwogIC8vbmV3RW50cnlbImNsYXNzIl0gPSAic2F2ZSI7CiAgbmV3RW50cnlbInZhbHVlIl0gPSAiU2F2ZSI7CiAgbmV3RW50cnlbIm9uY2xpY2siXSA9ICJzYXZlRGF0YTIoJ3NldHRpbmdzJykiCiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKCgogIHZhciBuZXdXcmFwcGVyID0gbmV3IE9iamVjdCgpOwogIG5ld1dyYXBwZXJbIl9lbGVtZW50Il0gPSAiRElWIjsKICBuZXdXcmFwcGVyWyJpZCJdID0gImJveC13cmFwcGVyIjsKICBkaXYuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdXcmFwcGVyKSk7CgogIGRpdiA9IGRpdi5sYXN0Q2hpbGQ7CgogIGRpdi5hcHBlbmRDaGlsZChjcmVhdGVNZW51SXRlbShpdGVtKSkKCiAgLy8gdXNhZ2UgSW5mbyAgCiAgc3dpdGNoIChtZW51W2FjdGl2ZU1lbnUuaWRdLmhhc093blByb3BlcnR5KCJfdXNhZ2UiKSkgewogICAgY2FzZSB0cnVlOgogICAgICB2YXIgdXNhZ2VJdGVtID0gbmV3IE9iamVjdCgpOwogICAgICB1c2FnZUl0ZW1bIl9lbGVtZW50Il0gPSAiUFJFIgogICAgICB1c2FnZUl0ZW1bIl90ZXh0Il0gPSBtZW51W2FjdGl2ZU1lbnUuaWRdWyJfdXNhZ2UiXTsKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQodXNhZ2VJdGVtKSk7CiAgfQoKICBjYWxjdWxhdGVXcmFwcGVySGVpZ2h0KCk7Cgp9CgpmdW5jdGlvbiBjcmVhdGVNZW51SXRlbShpdGVtKSB7CiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTsKICBzd2l0Y2ggKGl0ZW1bIl9tZW51VHlwZSJdKSB7CiAgICBjYXNlICJpbnB1dEFycmF5IjoKICAgICAgaWYgKGNvbmZpZy5oYXNPd25Qcm9wZXJ0eShpdGVtWyJfY29uZmlnS2V5Il0pID09IHRydWUpIHsKICAgICAgICB2YXIgdmFsdWUgPSBjb25maWdbaXRlbVsiX2NvbmZpZ0tleSJdXTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgdmFsdWUgPSBuZXcgQXJyYXkoKTsKICAgICAgfQoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICAgICAgICBuZXdFbnRyeSA9IGl0ZW0KICAgICAgICBkZWxldGUgbmV3RW50cnlbIm9uY2xpY2siXTsKICAgICAgICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CiAgICAgICAgbmV3RW50cnlbInZhbHVlIl0gPSB2YWx1ZVtpXTsKICAgICAgICBuZXdFbnRyeVsidHlwZSJdID0gInNlYXJjaCI7CiAgICAgICAgbmV3RW50cnlbImRhdGEtbWVudXR5cGUiXSA9IGl0ZW1bIl9tZW51VHlwZSJdOwogICAgICAgIG5ld0VudHJ5WyJkYXRhLW1lbnVrZXkiXSA9IGl0ZW1bIl9jb25maWdLZXkiXTsKICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKCiAgICAgIH0KICAgICAgLy8gTmV3IGVudHJ5IGZvciBhcnJheQogICAgICB2YXIgbmV3RW50cnkgPSBuZXcgT2JqZWN0KCk7CiAgICAgIG5ld0VudHJ5WyJfZWxlbWVudCJdID0gIklOUFVUIjsKICAgICAgbmV3RW50cnlbInR5cGUiXSA9ICJzZWFyY2giOwogICAgICBuZXdFbnRyeVsibmFtZSJdID0gaXRlbVsibmFtZSJdOwogICAgICBuZXdFbnRyeVsicGxhY2Vob2xkZXIiXSA9IGl0ZW1bInBsYWNlaG9sZGVyIl07CiAgICAgIG5ld0VudHJ5WyJ2YWx1ZSJdID0gIiI7CiAgICAgIG5ld0VudHJ5WyJkYXRhLW1lbnV0eXBlIl0gPSBpdGVtWyJfbWVudVR5cGUiXTsKICAgICAgbmV3RW50cnlbImRhdGEtbWVudWtleSJdID0gaXRlbVsiX2NvbmZpZ0tleSJdOwogICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKICAgICAgYnJlYWs7CgogICAgY2FzZSAic2luZ2xlSW5wdXQiOgogICAgICB2YXIgdmFsdWUgPSBjb25maWdbaXRlbVsiX2NvbmZpZ0tleSJdXTsKICAgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgewogICAgICAgIHZhbHVlID0gIiI7CiAgICAgIH0KICAgICAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdCgpOwogICAgICBuZXdFbnRyeSA9IGl0ZW07CiAgICAgIGRlbGV0ZSBuZXdFbnRyeVsib25jbGljayJdOwogICAgICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CiAgICAgIG5ld0VudHJ5WyJ2YWx1ZSJdID0gdmFsdWU7CiAgICAgIG5ld0VudHJ5WyJ0eXBlIl0gPSAic2VhcmNoIjsKICAgICAgbmV3RW50cnlbImRhdGEtbWVudXR5cGUiXSA9IGl0ZW1bIl9tZW51VHlwZSJdOwogICAgICBuZXdFbnRyeVsiZGF0YS1tZW51a2V5Il0gPSBpdGVtWyJfY29uZmlnS2V5Il07CiAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdFbnRyeSkpOwogICAgICBicmVhazsKCiAgICBjYXNlICJjaGVja2JveCI6CiAgICAgIHZhciB2YWx1ZSA9IGNvbmZpZ1tpdGVtWyJfY29uZmlnS2V5Il1dOwogICAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgdmFsdWUgPSBmYWxzZTsKICAgICAgfQogICAgICB2YXIgbmV3RW50cnkgPSBuZXcgT2JqZWN0KCk7CiAgICAgIG5ld0VudHJ5ID0gaXRlbTsKICAgICAgZGVsZXRlIG5ld0VudHJ5WyJvbmNsaWNrIl07CiAgICAgIG5ld0VudHJ5WyJfZWxlbWVudCJdID0gIklOUFVUIjsKICAgICAgbmV3RW50cnlbInZhbHVlIl0gPSB2YWx1ZTsKICAgICAgbmV3RW50cnlbInR5cGUiXSA9ICJjaGVja2JveCI7CiAgICAgIG5ld0VudHJ5WyJkYXRhLW1lbnV0eXBlIl0gPSBpdGVtWyJfbWVudVR5cGUiXTsKICAgICAgbmV3RW50cnlbImRhdGEtbWVudWtleSJdID0gaXRlbVsiX2NvbmZpZ0tleSJdOwogICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKICAgICAgZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiSU5QVVQiKVswXS5jaGVja2VkID0gdmFsdWU7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgInNlbGVjdCI6CiAgICAgIHZhciB2YWx1ZSA9IGNvbmZpZ1tpdGVtWyJfY29uZmlnS2V5Il1dOwogICAgICB2YXIgbmV3RW50cnkgPSBuZXcgT2JqZWN0KCk7CiAgICAgIG5ld0VudHJ5ID0gaXRlbTsKICAgICAgZGVsZXRlIG5ld0VudHJ5WyJvbmNsaWNrIl0KICAgICAgbmV3RW50cnlbIl9lbGVtZW50Il0gPSAiU0VMRUNUIjsKICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CiAgICAgIHZhciBzZWxlY3RFbGVtZW50ID0gZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiU0VMRUNUIilbMF07CiAgICAgIHZhciB2YWx1ZXMgPSBpdGVtWyJfb3B0aW9uVmFsdWVzIl07CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdDsKICAgICAgICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJPUFRJT04iOwogICAgICAgIG5ld0VudHJ5WyJfdGV4dCJdID0gaXRlbVsiX3RleHQiXSArICI6ICIgKyB2YWx1ZXNbaV07CiAgICAgICAgbmV3RW50cnlbInZhbHVlIl0gPSB2YWx1ZXNbaV07CiAgICAgICAgc2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CiAgICAgIH0KICAgICAgc2VsZWN0RWxlbWVudC52YWx1ZSA9IHZhbHVlOwogICAgICBicmVhazsKCiAgfQogIHJldHVybiBlbGVtZW50Owp9CgpmdW5jdGlvbiBvcGVuU3ViTWVudShpdGVtKSB7CiAgdmFyIGVudHJ5cyA9IGl0ZW1bIl9zdWJNZW51Il0uc3BsaXQoIiwiKTsKICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNldHRpbmdzIik7CgogIHZhciBuZXdIUiA9IG5ldyBPYmplY3QoKTsKICBuZXdIUlsiX2VsZW1lbnQiXSA9ICJIUiIKICBkaXYuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdIUikpOwoKICB2YXIgbmV3RW50cnkgPSBuZXcgT2JqZWN0KCk7CiAgbmV3RW50cnlbIl9lbGVtZW50Il0gPSAiSU5QVVQiOwogIG5ld0VudHJ5WyJ0eXBlIl0gPSAiYnV0dG9uIjsKICAvL25ld0VudHJ5WyJjbGFzcyJdID0gInNhdmUiOwogIG5ld0VudHJ5WyJ2YWx1ZSJdID0gIlNhdmUiOwogIG5ld0VudHJ5WyJvbmNsaWNrIl0gPSAic2F2ZURhdGEyKCdzZXR0aW5ncycpIgogIGRpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CgogIGlmIChpdGVtWyJfY29uZmlnS2V5Il0gPT0gInNldHRpbmdzIikgewogICAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdCgpOwogICAgbmV3RW50cnlbIl9lbGVtZW50Il0gPSAiSU5QVVQiOwogICAgbmV3RW50cnlbInR5cGUiXSA9ICJidXR0b24iOwogICAgLy9uZXdFbnRyeVsiY2xhc3MiXSA9ICJzYXZlIjsKICAgIG5ld0VudHJ5WyJ2YWx1ZSJdID0gIkJhY2t1cCI7CiAgICBuZXdFbnRyeVsib25jbGljayJdID0gIlRocmVhZGZpbkJhY2t1cCgpIgogICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKICB9CgogIGlmIChpdGVtWyJfY29uZmlnS2V5Il0gPT0gInNldHRpbmdzIikgewogICAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdCgpOwogICAgbmV3RW50cnlbIl9lbGVtZW50Il0gPSAiSU5QVVQiOwogICAgbmV3RW50cnlbInR5cGUiXSA9ICJidXR0b24iOwogICAgLy9uZXdFbnRyeVsiY2xhc3MiXSA9ICJzYXZlIjsKICAgIG5ld0VudHJ5WyJ2YWx1ZSJdID0gIlJlc3RvcmUiOwogICAgbmV3RW50cnlbIm9uY2xpY2siXSA9ICJUaHJlYWRmaW5SZXN0b3JlKHRoaXMpIgogICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKICB9CgoKICB2YXIgbmV3V3JhcHBlciA9IG5ldyBPYmplY3QoKTsKICBuZXdXcmFwcGVyWyJfZWxlbWVudCJdID0gIkRJViI7CiAgbmV3V3JhcHBlclsiaWQiXSA9ICJib3gtd3JhcHBlciI7CiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3V3JhcHBlcikpOwoKICBkaXYgPSBkaXYubGFzdENoaWxkOwoKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRyeXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBpdGVtID0gc3ViTWVudVtlbnRyeXNbaV1dOwogICAgaWYgKGl0ZW0gPT0gdW5kZWZpbmVkKSB7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIHZhciBjb250YWluZXIgPSBuZXcgT2JqZWN0KCk7CiAgICBjb250YWluZXJbIl9lbGVtZW50Il0gPSAiRElWIjsKICAgIGRpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KGNvbnRhaW5lcikpOwoKICAgIHZhciBkaXZDb250YWluZXIgPSBkaXYubGFzdENoaWxkOwoKICAgIHZhciBoZWFkbGluZSA9IG5ldyBPYmplY3QoKTsKICAgIGhlYWRsaW5lWyJfZWxlbWVudCJdID0gIkg1IjsKICAgIGhlYWRsaW5lWyJfdGV4dCJdID0gaXRlbVsiX2hlYWRsaW5lIl07CiAgICBkaXZDb250YWluZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChoZWFkbGluZSkpOwoKICAgIGRpdkNvbnRhaW5lci5hcHBlbmRDaGlsZChjcmVhdGVNZW51SXRlbShpdGVtKSkKCiAgICBzd2l0Y2ggKGl0ZW0uaGFzT3duUHJvcGVydHkoIl91c2FnZSIpKSB7CiAgICAgIGNhc2UgdHJ1ZToKICAgICAgICB2YXIgdXNhZ2VJdGVtID0gbmV3IE9iamVjdCgpOwogICAgICAgIHVzYWdlSXRlbVsiX2VsZW1lbnQiXSA9ICJQUkUiCiAgICAgICAgdXNhZ2VJdGVtWyJfdGV4dCJdID0gaXRlbVsiX3VzYWdlIl07CiAgICAgICAgZGl2Q29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQodXNhZ2VJdGVtKSk7CiAgICB9CgogICAgdmFyIGhyID0gbmV3IE9iamVjdCgpOwogICAgaHJbIl9lbGVtZW50Il0gPSAiSFIiOwogICAgZGl2Q29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoaHIpKTsKCiAgfQoKICBjYWxjdWxhdGVXcmFwcGVySGVpZ2h0KCk7CiAgcmV0dXJuCn0KCmZ1bmN0aW9uIHNhdmVEYXRhMihlbG0pIHsKICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxtKTsKICB2YXIgaW5wdXRzID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJTlBVVCIpOwogIHZhciBzZWxlY3RzID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJTRUxFQ1QiKTsKICB2YXIgdmFsdWUsIGNvbmZpZ0tleTsKICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICB2YXIgdmFsdWVBcnIgPSBuZXcgQXJyYXkoKTsKICB2YXIgbmV3RGF0YSA9IGZhbHNlOwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgaWYgKGlucHV0c1tpXS50eXBlICE9ICJidXR0b24iKSB7CiAgICAgIHZhciBtZW51VHlwZSA9IGlucHV0c1tpXS5nZXRBdHRyaWJ1dGUoImRhdGEtbWVudXR5cGUiKTsKCiAgICAgIC8vY29uc29sZS5sb2cobWVudVR5cGUpOwogICAgICBzd2l0Y2ggKG1lbnVUeXBlKSB7CiAgICAgICAgY2FzZSAic2luZ2xlSW5wdXQiOgogICAgICAgICAgdmFsdWUgPSBpbnB1dHNbaV0udmFsdWU7CiAgICAgICAgICBpZiAodmFsdWUgPT0gIiIgfHwgdmFsdWUgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgICAgIGRhdGFbImRlbGV0ZSJdID0gaW5wdXRzW2ldLm5hbWUKICAgICAgICAgICAgbmV3RGF0YSA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBuZXdEYXRhID0gdHJ1ZTsKICAgICAgICAgICAgZGF0YVtpbnB1dHNbaV0ubmFtZV0gPSB2YWx1ZTsKICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJpbnB1dEFycmF5IjoKICAgICAgICAgIHZhbHVlID0gaW5wdXRzW2ldLnZhbHVlOwogICAgICAgICAgaWYgKHZhbHVlICE9ICIiICYmIHZhbHVlICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICBuZXdEYXRhID0gdHJ1ZTsKICAgICAgICAgICAgdmFsdWVBcnIucHVzaCh2YWx1ZSkKICAgICAgICAgICAgZGF0YVtpbnB1dHNbaV0ubmFtZV0gPSB2YWx1ZUFycjsKICAgICAgICAgICAgY29uZmlnS2V5ID0gaW5wdXRzW2ldLm5hbWU7CiAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgImNoZWNrYm94IjoKICAgICAgICAgIHZhbHVlID0gaW5wdXRzW2ldLmNoZWNrZWQKICAgICAgICAgIGRhdGFbaW5wdXRzW2ldLm5hbWVdID0gdmFsdWU7CiAgICAgIH0KCiAgICB9CgogIH0KCgogIC8vIERlbGV0ZSBjb25maWcga2V5CiAgaWYgKHZhbHVlQXJyLmxlbmd0aCA9PSAwICYmIG5ld0RhdGEgPT0gZmFsc2UpIHsKICAgIG5ld0RhdGEgPSB0cnVlOwogICAgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIGRhdGFbImRlbGV0ZSJdID0gY29uZmlnS2V5OwogIH0KCgogIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0cy5sZW5ndGg7IGkrKykgewogICAgdmFyIHZhbHVlID0gc2VsZWN0c1tpXS5vcHRpb25zW3NlbGVjdHNbaV0uc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgICBzd2l0Y2ggKGlzTmFOKHZhbHVlKSkgewogICAgICBjYXNlIGZhbHNlOiB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTsgYnJlYWs7CiAgICB9CgogICAgZGF0YVtzZWxlY3RzW2ldLm5hbWVdID0gdmFsdWU7CiAgICBuZXdEYXRhID0gdHJ1ZTsKICB9CgogIC8vY29uc29sZS5sb2coZGF0YSwgbmV3RGF0YSk7CgogIGlmIChuZXdEYXRhID09IHRydWUpIHsKICAgIGRhdGFbImNtZCJdID0gInNhdmVDb25maWciOwogICAgaWYgKCFkYXRhLmhhc093blByb3BlcnR5KCdmaWx0ZXInKSkgewogICAgICBkYXRhWyJmaWx0ZXIiXSA9IGNvbmZpZ1siZmlsdGVyIl0KICAgIH0KICAgIHZhciBzZXR0aW5ncyA9IG5ldyBPYmplY3QoKTsKICAgIHNldHRpbmdzWyJjbWQiXSA9IGRhdGFbImNtZCJdOwogICAgc2V0dGluZ3NbInNldHRpbmdzIl0gPSBkYXRhOwogICAgY29uc29sZS5sb2coc2V0dGluZ3MpOwogICAgVGhyZWFkZmluKHNldHRpbmdzKTsKICB9Cn0K" - webUI["html/configuration.html"] = "PCFkb2N0eXBlIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPgogIDxsaW5rCiAgICByZWw9InN0eWxlc2hlZXQiCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyIKICAvPgogIDxsaW5rIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIGludGVncml0eT0ic2hhMzg0LWdIMnlJSnFLZE5IUEVxMG40TXFhL0hHS0loU2tJSGVMNUF5aGtZVjhpNTlVNUFSNmNzQnZBcEhITmwvdkkxQngiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9iYXNlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgo8L2hlYWQ+Cgo8Ym9keSBvbmxvYWQ9ImphdmFzY3JpcHQ6IHJlYWR5Rm9yQ29uZmlndXJhdGlvbigwKTsiPgoKICA8ZGl2IGlkPSJsb2FkaW5nIiBjbGFzcz0ibW9kYWwgZmFkZSI+CiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbG9hZGVyIj48L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBpZD0icG9wdXAiIGNsYXNzPSJtb2RhbCBmYWRlIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyBtb2RhbC14bCI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciIgaWQ9InBvcHVwX2hlYWRlciI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgICAgIDxkaXYgaWQ9InBvcHVwLWN1c3RvbSI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIiBpZD0icG9wdXBfZm9vdGVyIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iaW1nQ2VudGVyIj48L2Rpdj4KICA8ZGl2IGlkPSJib3giPgoKICAgIDxkaXYgaWQ9ImhlYWRsaW5lIj4KICAgICAgPGgxIGlkPSJoZWFkLXRleHQiIGNsYXNzPSJjZW50ZXIiPkNvbmZpZ3VyYXRpb248L2gxPgogICAgPC9kaXY+CiAgICA8cCBpZD0iZXJyIiBjbGFzcz0iZXJyb3JNc2cgY2VudGVyIj48L3A+CiAgICA8ZGl2IGlkPSJjb250ZW50Ij4KCiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJveC1mb290ZXIiPgogICAgICA8aW5wdXQgaWQ9Im5leHQiIGNsYXNzPSIiIHR5cGU9ImJ1dHRvbiIgbmFtZT0ibmV4dCIgdmFsdWU9Ik5leHQiIG9uY2xpY2s9ImphdmFzY3JpcHQ6IHNhdmVXaXphcmQoKTsiPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvanMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMiIGludGVncml0eT0ic2hhMzg0LUEzckpEODU2S293U2I3ZHdsWmRZRWtPMzlHYWdpN3ZJc0YwanJSQW9RbURLS3RRQkhVdUxaOUFzU3Y0akQ0WGEiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0PgogIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9jbGlwYm9hcmQuanMvMi4wLjEwL2NsaXBib2FyZC5taW4uanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9jb25maWd1cmF0aW9uX3RzLmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvbmV0d29ya190cy5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL21lbnVfdHMuanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9zZXR0aW5nc190cy5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL2Jhc2VfdHMuanMiPjwvc2NyaXB0Pgo8L2JvZHk+Cgo8L2h0bWw+" - webUI["html/img/threadfin.ico"] = "AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAMMOAADDDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF03/ABdN/yMXTf/LF03/xxdN/xwXTf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXTf8AF03/gBdN//8XTf/zF03/YRdN/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdN/wAXTf+FF03//xdN//MXTf9iF03/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF03/ABdN/4UXTf//F03/8xdN/2IXTf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXTf8AF03/hRdN//8XTf/zF03/YhdN/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdN/wAXTf+FF03//xdN//MXTf9iF03/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF03/ABdN/4UXTf//F03/8xdN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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbW4VbW1v/W1tb81tbW2JbW1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbhVtbW/9bW1vzW1tbYltbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1uFW1tb/1tbW/NbW1tiW1tbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbW4VbW1v/W1tb81tbW2JbW1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbhVtbW/9bW1vzW1tbYltbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1uFW1tb/1tbW/NbW1tiW1tbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbW4VbW1v/W1tb81tbW2JbW1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbDFtbWxNbW1sTW1tbE1tbWxNbW1sTW1tbE1tbWxNbW1sNW1tbjltbW/9bW1v0W1tbbltbWw5bW1sTW1tbE1tbWxNbW1sTW1tbE1tbWxNbW1sTW1tbDFtbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbD1tbW0dbW1ubW1tbx1tbW8RbW1vEW1tbxFtbW8RbW1vEW1tbxFtbW8JbW1vjW1tb/1tbW/xbW1vbW1tbw1tbW8RbW1vEW1tbxFtbW8RbW1vEW1tbxFtbW8dbW1ubW1tbRFtbWw5bW1sAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1sxW1tb7VtbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1vkW1tbLVtbWwAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbWw1bW1s/W1tboFtbW9FbW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vRW1tboFtbWz1bW1sMW1tbAAAAAAAAAAAA//w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w///gAAB/gAAAH4AAAB+AAAAc=" - webUI["html/index.html"] = "PCFkb2N0eXBlIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDwhLS0tCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4gCiAgICAtLT4KICA8dGl0bGU+VGhyZWFkZmluPC90aXRsZT4KICA8IS0tIGZvbnQtYXdlc29tZSAtLT4KICA8bGluawogICAgcmVsPSJzdHlsZXNoZWV0IgogICAgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvZm9udC1hd2Vzb21lLzUuMTQuMC9jc3MvYWxsLm1pbi5jc3MiCiAgLz4KICA8bGluayBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Jvb3RzdHJhcEA1LjIuMC9kaXN0L2Nzcy9ib290c3RyYXAubWluLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBpbnRlZ3JpdHk9InNoYTM4NC1nSDJ5SUpxS2ROSFBFcTBuNE1xYS9IR0tJaFNrSUhlTDVBeWhrWVY4aTU5VTVBUjZjc0J2QXBISE5sL3ZJMUJ4IiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9zY3JlZW4uY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+CiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYmFzZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KICA8bGluayByZWw9Imljb24iIGhyZWY9ImltZy90aHJlYWRmaW4uaWNvIj4KCjwvaGVhZD4KCjxib2R5IG9ubG9hZD0iamF2YXNjcmlwdDogUGFnZVJlYWR5KCk7Ij4KCiAgPGRpdiBpZD0ibG9hZGluZyIgY2xhc3M9Im1vZGFsIGZhZGUiPgogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIGxvYWRlciI+PC9kaXY+CiAgPC9kaXY+CgogIDxkaXYgaWQ9InBvcHVwIiBjbGFzcz0ibW9kYWwgZmFkZSI+CiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwteGwiPgogICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiIGlkPSJwb3B1cF9oZWFkZXIiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICA8ZGl2IGlkPSJwb3B1cC1jdXN0b20iPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciIgaWQ9InBvcHVwX2Zvb3RlciI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJzZXJ2ZXJfaW5mb3JtYXRpb24iPgogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLXhsIj4KICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KICAgICAgICAgIDxoMyBjbGFzcz0ibW9kYWwtdGl0bGUiPlNlcnZlciBJbmZvcm1hdGlvbjwvaDM+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0bi1jbG9zZSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIHRleHQtYmctZGFyayBtYi0zIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj5TZXJ2ZXIgSW5mb3JtYXRpb248L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InZlcnNpb24iIGNsYXNzPSJmb3JtLWxhYmVsIj5UaHJlYWRmaW4gVmVyc2lvbjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0idmVyc2lvbiIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iYnJhbmNoIiBjbGFzcz0iZm9ybS1sYWJlbCI+VGhyZWFkZmluIEJyYW5jaDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0iYnJhbmNoIiBhcmlhLWRlc2NyaWJlZGJ5PSJiYXNpYy1hZGRvbjMiIHJlYWRvbmx5IGRpc2FibGVkPgogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJlcnJvcnMiIGNsYXNzPSJmb3JtLWxhYmVsIj5FcnJvcnM8L2xhYmVsPgogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9ImVycm9ycyIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0id2FybmluZ3MiIGNsYXNzPSJmb3JtLWxhYmVsIj5XYXJuaW5nczwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0id2FybmluZ3MiIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHkgZGlzYWJsZWQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIHRleHQtYmctZGFyayBtYi0zIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj5TdHJlYW0gSW5mb3JtYXRpb248L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkRWUiIgY2xhc3M9ImZvcm0tbGFiZWwiPkRWUiBJUDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0iRFZSIiBhcmlhLWRlc2NyaWJlZGJ5PSJiYXNpYy1hZGRvbjMiIHJlYWRvbmx5IGRpc2FibGVkPgogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJtM3UtdXJsIiBjbGFzcz0iZm9ybS1sYWJlbCI+TTNVIFVSTCAoU3BlY2lmaWMgZ3JvdXBzOiBbaHR0cDovLy4uLj9ncm91cC10aXRsZT1mb28sYmFyXSk8L2xhYmVsPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJtM3UtdXJsIiBhcmlhLWRlc2NyaWJlZGJ5PSJiYXNpYy1hZGRvbjMiIHJlYWRvbmx5PgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImlucHV0LWdyb3VwLXRleHQgY29weS1idG4iIGRhdGEtY2xpcGJvYXJkLXRhcmdldD0iI20zdS11cmwiIGRhdGEtYnMtdGl0bGU9IkNvcHkgdG8gY2xpcGJvYXJkIiBkYXRhLWJzLXRvZ2dsZT0idG9vbHRpcCIgZGF0YS1icy1wbGFjZW1lbnQ9ImJvdHRvbSI+PGkgY2xhc3M9ImZhciBmYS1jbGlwYm9hcmQiPjwvaT48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InhlcGctdXJsIiBjbGFzcz0iZm9ybS1sYWJlbCI+WE1MVFYgVVJMPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ieGVwZy11cmwiIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHk+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaW5wdXQtZ3JvdXAtdGV4dCBjb3B5LWJ0biIgZGF0YS1jbGlwYm9hcmQtdGFyZ2V0PSIjeGVwZy11cmwiIGRhdGEtYnMtdGl0bGU9IkNvcHkgdG8gY2xpcGJvYXJkIiBkYXRhLWJzLXRvZ2dsZT0idG9vbHRpcCIgZGF0YS1icy1wbGFjZW1lbnQ9ImJvdHRvbSI+PGkgY2xhc3M9ImZhciBmYS1jbGlwYm9hcmQiPjwvaT48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InN0cmVhbXMiIGNsYXNzPSJmb3JtLWxhYmVsIj5GaWx0ZXJlZCBDaGFubmVsczwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ic3RyZWFtcyIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ieGVwZyIgY2xhc3M9ImZvcm0tbGFiZWwiPk1hcHBlZCBDaGFubmVsczwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ieGVwZyIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZXhwYW5kLWxnIHN0aWNreS10b3AgbmF2YmFyLWRhcmsgYmctYmxhY2siPgogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KICAgICAgPGEgY2xhc3M9Im5hdmJhci1icmFuZCIgaHJlZj0iL3dlYiI+CiAgICAgICAgPHNwYW4gaWQ9ImxvZ28iPjwvc3Bhbj4KICAgICAgPC9hPgogICAgICA8YnV0dG9uIGNsYXNzPSJuYXZiYXItdG9nZ2xlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWJzLXRvZ2dsZT0iY29sbGFwc2UiIGRhdGEtYnMtdGFyZ2V0PSIjbmF2YmFyU3VwcG9ydGVkQ29udGVudCIgYXJpYS1jb250cm9scz0ibmF2YmFyU3VwcG9ydGVkQ29udGVudCIgYXJpYS1leHBhbmRlZD0iZmFsc2UiIGFyaWEtbGFiZWw9IlRvZ2dsZSBuYXZpZ2F0aW9uIj4KICAgICAgICA8c3BhbiBjbGFzcz0ibmF2YmFyLXRvZ2dsZXItaWNvbiI+PC9zcGFuPgogICAgICA8L2J1dHRvbj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIiBpZD0ibmF2YmFyU3VwcG9ydGVkQ29udGVudCI+CiAgICAgICAgPHVsIGNsYXNzPSJuYXZiYXItbmF2IG14LWF1dG8gbWItMiBtYi1sZy0wIiBpZD0ibWFpbi1tZW51Ij4KICAgICAgICA8L3VsPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0yIGNvbC1zbS0yIj4KICAgICAgICAgIDxwIGlkPSJwbGF5bGlzdC1jb25uZWN0aW9uLWluZm9ybWF0aW9uIj4KICAgICAgICAgIDwvcD4KICAgICAgICAgIDxwIGlkPSJjbGllbnQtY29ubmVjdGlvbi1pbmZvcm1hdGlvbiI+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHVsIGNsYXNzPSJuYXZiYXItbmF2IG14LWF1dG8gbWItMiBtYi1sZy0wIj4KICAgICAgICAgIDxsaSBjbGFzcz0ibmF2LWxpbmsiIGRhdGEtYnMtdG9nZ2xlPSJtb2RhbCIgZGF0YS1icy10YXJnZXQ9IiNzZXJ2ZXJfaW5mb3JtYXRpb24iPjxpIGNsYXNzPSJmYXMgZmEtaW5mby1jaXJjbGUiPjwvaT4gU2VydmVyIEluZm9ybWF0aW9uPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvbmF2PgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbGV4Ij4KICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIgY29sLXNtLTEyIj4KICAgICAgICAgIDxkaXYgaWQ9ImNvbnRlbnQiIGNsYXNzPSJ0YWJsZS1yZXNwb25zaXZlIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InJvdyIgaWQ9Im15U3RyZWFtc0JveCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTUgY29sLXNtLTEyIHRhYmxlLXJlc3BvbnNpdmUgZmxvYXQtc3RhcnQiPgogICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1kYXJrIHRhYmxlLWJvcmRlcmVkIGNhcHRpb24tdG9wIiBpZD0iYWN0aXZlU3RyZWFtcyI+PC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNSBjb2wtc20tMTIgdGFibGUtcmVzcG9uc2l2ZSBmbG9hdC1lbmQiPgogICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1kYXJrIHRhYmxlLWJvcmRlcmVkIGNhcHRpb24tdG9wIiBpZD0iaW5hY3RpdmVTdHJlYW1zIj48L3RhYmxlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9qcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyIgaW50ZWdyaXR5PSJzaGEzODQtQTNySkQ4NTZLb3dTYjdkd2xaZFlFa08zOUdhZ2k3dklzRjBqclJBb1FtREtLdFFCSFV1TFo5QXNTdjRqRDRYYSIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2NsaXBib2FyZC5qcy8yLjAuMTAvY2xpcGJvYXJkLm1pbi5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL25ldHdvcmtfdHMuanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9tZW51X3RzLmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvc2V0dGluZ3NfdHMuanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9sb2dzX3RzLmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvYmFzZV90cy5qcyI+PC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4=" - webUI["html/js/logs_ts.js"] = "Y2xhc3MgTG9nIHsKICAgIGNyZWF0ZUxvZyhlbnRyeSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUFJFIik7CiAgICAgICAgaWYgKGVudHJ5LmluZGV4T2YoIldBUk5JTkciKSAhPSAtMSkgewogICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJ3YXJuaW5nTXNnIjsKICAgICAgICB9CiAgICAgICAgaWYgKGVudHJ5LmluZGV4T2YoIkVSUk9SIikgIT0gLTEpIHsKICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAiZXJyb3JNc2ciOwogICAgICAgIH0KICAgICAgICBpZiAoZW50cnkuaW5kZXhPZigiREVCVUciKSAhPSAtMSkgewogICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJkZWJ1Z01zZyI7CiAgICAgICAgfQogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gZW50cnk7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9Cn0KZnVuY3Rpb24gc2hvd0xvZ3MoYm90dG9tKSB7CiAgICB2YXIgbG9nID0gbmV3IExvZygpOwogICAgdmFyIGxvZ3MgPSBTRVJWRVJbImxvZyJdWyJsb2ciXTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudF9sb2ciKTsKICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhsb2dzKTsKICAgIGtleXMuZm9yRWFjaChsb2dJRCA9PiB7CiAgICAgICAgdmFyIGVudHJ5ID0gbG9nLmNyZWF0ZUxvZyhsb2dzW2xvZ0lEXSk7CiAgICAgICAgZGl2LmFwcGVuZChlbnRyeSk7CiAgICB9KTsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIGlmIChib3R0b20gPT0gdHJ1ZSkgewogICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3gtd3JhcHBlciIpOwogICAgICAgICAgICB3cmFwcGVyLnNjcm9sbFRvcCA9IHdyYXBwZXIuc2Nyb2xsSGVpZ2h0OwogICAgICAgIH0KICAgIH0sIDEwKTsKfQpmdW5jdGlvbiByZXNldExvZ3MoKSB7CiAgICB2YXIgY21kID0gInJlc2V0TG9ncyI7CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKfQo=" + webUI["html/js/data.js"] = "ZnVuY3Rpb24gc2hvd0NvbmZpZyhvYmopIHsKICBjb25maWcgPSBvYmo7CiAgLy9zZXRNZW51SXRlbSgpOwogIGNyZWF0ZU1lbnUoKTsKICAvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYWdlIikuY2xhc3NOYW1lID0gIiI7Cn0KCnNob3dNeVN0cmVhbXMKCmZ1bmN0aW9uIHNob3dNeVN0cmVhbXMoYWxsU3RyZWFtc09iaikgewoKICB2YXIgc3RyZWFtVHlwZUtleXMgPSBnZXRPYmpLZXlzKGFsbFN0cmVhbXNPYmopCgogIGZvciAodmFyIHMgPSAwOyBzIDwgc3RyZWFtVHlwZUtleXMubGVuZ3RoOyBzKyspIHsKICAgIHZhciBzdHJlYW1UeXBlID0gc3RyZWFtVHlwZUtleXNbc107CiAgICB2YXIgb2JqID0gbmV3IE9iamVjdCgpOwogICAgb2JqID0gYWxsU3RyZWFtc09ialtzdHJlYW1UeXBlXTsKICAgIHN3aXRjaCAoc3RyZWFtVHlwZSkgewogICAgICBjYXNlICJhY3RpdmVTdHJlYW1zIjogYWN0aXZlU3RyZWFtcyA9IG9iajsgYnJlYWs7CiAgICB9CgogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3RyZWFtVHlwZSkuaW5uZXJIVE1MID0gIiI7CgogICAgdmFyIHN0cmVhbXNPYmogPSBuZXcgT2JqZWN0KCk7CiAgICB2YXIgc3RyZWFtc05hbWVzID0gbmV3IEFycmF5KCk7CgogICAgdmFyIGtleXMgPSBnZXRPYmpLZXlzKG9iaikKCiAgICAvLyBDcmVhdGUgT2JqZWN0IChzdHJlYW1zT2JqKSBmb3IgdGhlIHN0cmVhbXMgYW5kIHNvcnQgYnkgbmFtZSAoc3RyZWFtc05hbWVzKQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBuYW1lID0gb2JqW2tleXNbaV1dWyJuYW1lIl07CiAgICAgIHZhciB0bXAgPSBuZXcgT2JqZWN0KCk7CiAgICAgIHZhciBzdHJlYW1LZXkgPSBnZXRPYmpLZXlzKG9ialtrZXlzW2ldXSk7CgogICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN0cmVhbUtleS5sZW5ndGg7IGorKykgewogICAgICAgIHRtcFtzdHJlYW1LZXlbal1dID0gb2JqW2tleXNbaV1dW3N0cmVhbUtleVtqXV07CiAgICAgIH0KCiAgICAgIHN0cmVhbXNPYmpbbmFtZV0gPSB0bXA7CiAgICAgIHN0cmVhbXNOYW1lcy5wdXNoKG5hbWUpCiAgICB9CgogICAgc3RyZWFtc05hbWVzLnNvcnQoKTsKCiAgICAvLyBDcmVhdGUgVGFibGUgZm9yIGFjdGl2ZVN0cmVhbXMKICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN0cmVhbVR5cGUpOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyZWFtc05hbWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICAgICAgbmV3RW50cnlbIl9lbGVtZW50Il0gPSAiVFIiOwogICAgICB0YWJsZS5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CiAgICAgIHZhciBsaW5lID0gdGFibGUubGFzdENoaWxkOwoKICAgICAgdmFyIHRtcCA9IHN0cmVhbXNPYmpbc3RyZWFtc05hbWVzW2ldXQogICAgICB2YXIga2V5cyA9IGdldE9iaktleXModG1wKQoKICAgICAgdmFyIG5ld0tleSA9IG5ldyBPYmplY3QoKQogICAgICBuZXdLZXlbIl9lbGVtZW50Il0gPSAiVEQiOwogICAgICAvL25ld0tleVsiX3RleHQiXSAgICAgPSBzdHJlYW1zTmFtZXNbaV07CiAgICAgIHN3aXRjaCAoc3RyZWFtVHlwZSkgewogICAgICAgIGNhc2UgImFjdGl2ZVN0cmVhbXMiOiBuZXdLZXlbIl90ZXh0Il0gPSAiQ2hhbm5lbCAoKyk6IjsgYnJlYWs7CiAgICAgICAgY2FzZSAiaW5hY3RpdmVTdHJlYW1zIjogbmV3S2V5WyJfdGV4dCJdID0gIkNoYW5uZWwgKC0pOiI7IGJyZWFrOwogICAgICB9CgogICAgICBuZXdLZXlbImNsYXNzIl0gPSAidGRLZXkiOwogICAgICBjb25zb2xlLmxvZygpOwoKCiAgICAgIHZhciBuZXdWYWwgPSBuZXcgT2JqZWN0KCkKICAgICAgbmV3VmFsWyJfZWxlbWVudCJdID0gIlREIjsKICAgICAgbmV3VmFsWyJfdGV4dCJdID0gc3RyZWFtc05hbWVzW2ldOwogICAgICBuZXdWYWxbImNsYXNzIl0gPSAidGRWYWwiOwogICAgICAvL25ld1ZhbFsiX3RleHQiXSAgICAgPSB2YWx1ZTsKCiAgICAgIGxpbmUuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdLZXkpKTsKICAgICAgbGluZS5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld1ZhbCkpOwoKICAgIH0KCiAgfQoKICByZXR1cm4KfQoKZnVuY3Rpb24gc2hvd0FjdGl2ZVN0cmVhbXMob2JqKSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZVN0cmVhbXMiKS5pbm5lckhUTUwgPSAiIjsKICBhY3RpdmVTdHJlYW1zID0gb2JqOwogIHZhciBzdHJlYW1zT2JqID0gbmV3IE9iamVjdCgpOwogIHZhciBzdHJlYW1zTmFtZXMgPSBuZXcgQXJyYXkoKTsKCiAgdmFyIGtleXMgPSBnZXRPYmpLZXlzKG9iaikKCiAgLy8gQ3JlYXRlIE9iamVjdCAoc3RyZWFtc09iaikgZm9yIHRoZSBzdHJlYW1zIGFuZCBzb3J0IGJ5IG5hbWUgKHN0cmVhbXNOYW1lcykKICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBuYW1lID0gb2JqW2tleXNbaV1dWyJuYW1lIl07CiAgICB2YXIgdG1wID0gbmV3IE9iamVjdCgpOwogICAgdmFyIHN0cmVhbUtleSA9IGdldE9iaktleXMob2JqW2tleXNbaV1dKTsKCiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN0cmVhbUtleS5sZW5ndGg7IGorKykgewogICAgICB0bXBbc3RyZWFtS2V5W2pdXSA9IG9ialtrZXlzW2ldXVtzdHJlYW1LZXlbal1dOwogICAgfQoKICAgIHN0cmVhbXNPYmpbbmFtZV0gPSB0bXA7CiAgICBzdHJlYW1zTmFtZXMucHVzaChuYW1lKQogIH0KCiAgc3RyZWFtc05hbWVzLnNvcnQoKTsKCiAgLy8gQ3JlYXRlIFRhYmxlIGZvciBhY3RpdmVTdHJlYW1zCiAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZVN0cmVhbXMiKTsKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJlYW1zTmFtZXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICAgIG5ld0VudHJ5WyJfZWxlbWVudCJdID0gIlRSIjsKICAgIHRhYmxlLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKICAgIHZhciBsaW5lID0gdGFibGUubGFzdENoaWxkOwoKICAgIHZhciB0bXAgPSBzdHJlYW1zT2JqW3N0cmVhbXNOYW1lc1tpXV0KICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyh0bXApCgogICAgdmFyIG5ld0tleSA9IG5ldyBPYmplY3QoKQogICAgbmV3S2V5WyJfZWxlbWVudCJdID0gIlREIjsKICAgIC8vbmV3S2V5WyJfdGV4dCJdICAgICA9IHN0cmVhbXNOYW1lc1tpXTsKICAgIG5ld0tleVsiX3RleHQiXSA9ICJDaGFubmVsOiI7CiAgICBuZXdLZXlbImNsYXNzIl0gPSAidGRLZXkiOwogICAgY29uc29sZS5sb2coKTsKCgogICAgdmFyIG5ld1ZhbCA9IG5ldyBPYmplY3QoKQogICAgbmV3VmFsWyJfZWxlbWVudCJdID0gIlREIjsKICAgIG5ld1ZhbFsiX3RleHQiXSA9IHN0cmVhbXNOYW1lc1tpXTsKICAgIG5ld1ZhbFsiY2xhc3MiXSA9ICJ0ZFZhbCI7CiAgICAvL25ld1ZhbFsiX3RleHQiXSAgICAgPSB2YWx1ZTsKCiAgICBsaW5lLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3S2V5KSk7CiAgICBsaW5lLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3VmFsKSk7CgogIH0KCn0KCmZ1bmN0aW9uIHBhcnNlTG9ncyhvYmopIHsKICBsb2cgPSBvYmoKICB2YXIga2V5cyA9IGdldE9iaktleXMob2JqKQoKICB2YXIgbXNnVHlwZTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgIHN3aXRjaCAoa2V5c1tpXSkgewogICAgICBjYXNlICJ3YXJuaW5ncyI6IG1zZ1R5cGUgPSAid2FybmluZ01zZyI7IGJyZWFrOwogICAgICBjYXNlICJlcnJvcnMiOiBtc2dUeXBlID0gImVycm9yTXNnIjsgYnJlYWs7CiAgICB9CgogICAgc3dpdGNoIChvYmpba2V5c1tpXV0pIHsKICAgICAgY2FzZSAwOiBtc2dUeXBlID0gInRkVmFsIjsgYnJlYWs7CiAgICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgfQoKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrZXlzW2ldKSkgewogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrZXlzW2ldKS5jbGFzc05hbWUgPSBtc2dUeXBlOwogICAgfQoKCiAgfQogIHJldHVybgp9CgoKZnVuY3Rpb24gY2FuY2VsRGF0YShlbGVtZW50KSB7CiAgY3JlYXRlTWVudSgpOwp9CgpmdW5jdGlvbiBzYXZlRGF0YShlbGVtZW50KSB7CiAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgdmFyIGRpdiA9IGVsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlOwogIHZhciBpbnB1dHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIik7CgogIHZhciBjb25maWdLZXkgPSBkaXYuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpZ2tleSIpOwogIHZhciBtZW51VHlwZSA9IGRpdi5nZXRBdHRyaWJ1dGUoImRhdGEtbWVudXR5cGUiKTsKICB2YXIgdmFsdWU7CiAgdmFyIHZhbHVlQXJyID0gbmV3IEFycmF5KCk7CgogIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICBpZiAoaW5wdXRzW2ldLnR5cGUgPT0gInRleHQiICYmIGlucHV0c1tpXS52YWx1ZSAhPSB1bmRlZmluZWQgJiYgaW5wdXRzW2ldLnZhbHVlICE9ICIiKSB7CiAgICAgIGNvbnNvbGUubG9nKGlucHV0c1tpXS52YWx1ZSwgbWVudVR5cGUpCiAgICAgIHN3aXRjaCAobWVudVR5cGUpIHsKICAgICAgICBjYXNlICJpbnB1dEFycmF5IjogdmFsdWVBcnIucHVzaChpbnB1dHNbaV0udmFsdWUpOyBicmVhazsKICAgICAgICBjYXNlICJzaW5nbGVJbnB1dCI6IHZhbHVlID0gaW5wdXRzW2ldLnZhbHVlOyBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgc3dpdGNoIChtZW51VHlwZSkgewogICAgY2FzZSAiaW5wdXRBcnJheSI6IGRhdGFbY29uZmlnS2V5XSA9IHZhbHVlQXJyOyBicmVhazsKICAgIGNhc2UgInNpbmdsZUlucHV0IjoKICAgICAgaWYgKGlzTmFOKHZhbHVlKSA9PSBmYWxzZSkgewogICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpOwogICAgICAgIGRhdGFbY29uZmlnS2V5XSA9IHZhbHVlOwogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgZGF0YVsiZGVsZXRlIl0gPSBjb25maWdLZXk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGF0YVtjb25maWdLZXldID0gdmFsdWUKICAgICAgfQoKICAgICAgYnJlYWs7CiAgfQoKICBkYXRhWyJjbWQiXSA9ICJzYXZlQ29uZmlnIjsKICBjb25zb2xlLmxvZyhkYXRhKTsKICBUaHJlYWRmaW4oZGF0YSkKfQoKZnVuY3Rpb24gVGhyZWFkZmluKGRhdGEpIHsKICBpZiAod2ViU29ja2V0cyA9PSBmYWxzZSkgewogICAgYWxlcnQoIllvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFdlYlNvY2tldHMiKTsKICAgIHJldHVybjsKICB9IGVsc2UgewogICAgaWYgKGRhdGFbImNtZCJdICE9ICJnZXRMb2ciKSB7CiAgICAgIHNob3dMb2FkaW5nU2NyZWVuKHRydWUpCiAgICB9CiAgfQogIGRlbGV0ZSB1bmRvWyJlcGdNYXBwaW5nIl07CgogIHZhciBwcm90b2NvbFdTCiAgc3dpdGNoICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wpIHsKICAgIGNhc2UgImh0dHA6IjogcHJvdG9jb2xXUyA9ICJ3czovLyI7IGJyZWFrOwogICAgY2FzZSAiaHR0cHM6IjogcHJvdG9jb2xXUyA9ICJ3c3M6Ly8iOyBicmVhazsKICB9CgoKICB2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHByb3RvY29sV1MgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAiOiIgKyB3aW5kb3cubG9jYXRpb24ucG9ydCArICIvZGF0YS8iICsgIj9Ub2tlbj0iICsgZ2V0Q29va2llKCJUb2tlbiIpKTsKICB3cy5vbm9wZW4gPSBmdW5jdGlvbiAoKSB7CiAgICBjb25zb2xlLmxvZyhkYXRhKQogICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgfQoKICB3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkgewogICAgdmFyIHJlc3BvbnNlID0gSlNPTi5wYXJzZShlLmRhdGEpOwogICAgY29uc29sZS5sb2cocmVzcG9uc2UpOwoKICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgiY2xpZW50SW5mbyIpKSB7CiAgICAgIGNyZWF0ZUNsaW50SW5mbyhyZXNwb25zZVsiY2xpZW50SW5mbyJdKTsKICAgIH0KCiAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoImxvZyIpKSB7CiAgICAgIGNyZWF0ZUNsaW50SW5mbyhyZXNwb25zZVsibG9nIl0pOwogICAgfQoKICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgic3RhdHVzIikpIHsKICAgICAgaWYgKHJlc3BvbnNlWyJzdGF0dXMiXSA9PSBmYWxzZSkgewogICAgICAgIGFsZXJ0KHJlc3BvbnNlWyJlcnIiXSkKICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoInJlbG9hZCIpKSB7CiAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICB9CiAgICAgICAgLy9jaGVja0VycihyZXNwb25zZSkKICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgdXBkYXRlVGhyZWFkZmluU3RhdHVzKHJlc3BvbnNlKTsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2hvd0xvYWRpbmdTY3JlZW4oZmFsc2UpOyB9LCAzMDApOwoKICAgICAgICByZXR1cm4KICAgICAgfQoKICAgICAgdXBkYXRlVGhyZWFkZmluU3RhdHVzKHJlc3BvbnNlKQoKICAgICAgLy9jb25zb2xlLmxvZyhkYXRhWyJjbWQiXSk7CiAgICAgIHN3aXRjaCAoZGF0YVsiY21kIl0pIHsKICAgICAgICBjYXNlICJzYXZlVXNlckRhdGEiOiBjcmVhdGVNZW51KCk7IGJyZWFrOwogICAgICAgIGNhc2UgInNhdmVOZXdVc2VyIjogY3JlYXRlTWVudSgpOyBicmVhazsKICAgICAgICBjYXNlICJzYXZlRmlsZXNYTUxUViI6ICAvL2NyZWF0ZU1lbnUoKTsgYnJlYWs7CiAgICAgICAgY2FzZSAic2F2ZUZpbGVzTTNVIjogICAgLy9jcmVhdGVNZW51KCk7IHJldHVybjsgYnJlYWs7CiAgICAgICAgY2FzZSAic2F2ZUNvbmZpZyI6CiAgICAgICAgICBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgICAgICAgZGF0YVsiY21kIl0gPSAiY2hlY2tUb2tlbiI7CiAgICAgICAgICBUaHJlYWRmaW4oZGF0YSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAiZW1wdHlMb2ciOiB3cml0ZUxvZ0luRGl2KCk7IGJyZWFrOwogICAgICAgIGNhc2UgImdldExvZyI6IHJldHVybjsgYnJlYWs7CiAgICAgIH0KCgogICAgfQoKICAgIGlmIChjb25maWdbImZpbGVzIl0gPT0gdW5kZWZpbmVkIHx8IGNvbmZpZ1siZmlsZXMiXS5sZW5ndGggPT0gMCkgewogICAgICBjcmVhdGVNZW51KCk7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKDEwKS5jbGljaygpCiAgICB9CgogICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHNob3dMb2FkaW5nU2NyZWVuKGZhbHNlKTsgfSwgMCk7CiAgfQoKfQoKZnVuY3Rpb24gdXBkYXRlVGhyZWFkZmluU3RhdHVzKHJlc3BvbnNlKSB7CiAgdmFyIGtleXMgPSBnZXRPYmpLZXlzKHJlc3BvbnNlKTsKICAvL2NvbnNvbGUubG9nKGtleXMpOwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgIHN3aXRjaCAoa2V5c1tpXSkgewogICAgICBjYXNlICJhbGVydCI6IGFsZXJ0KHJlc3BvbnNlW2tleXNbaV1dKTsgYnJlYWs7CiAgICAgIGNhc2UgImNvbmZpZyI6IHNob3dDb25maWcocmVzcG9uc2Vba2V5c1tpXV0pOyBicmVhazsKICAgICAgY2FzZSAibG9nIjogcGFyc2VMb2dzKHJlc3BvbnNlW2tleXNbaV1dKTsgYnJlYWs7CiAgICAgIGNhc2UgIm15U3RyZWFtcyI6IHNob3dNeVN0cmVhbXMocmVzcG9uc2Vba2V5c1tpXV0pOyBicmVhazsKICAgICAgY2FzZSAieEVQRyI6IHhFUEcgPSByZXNwb25zZVtrZXlzW2ldXTsgYnJlYWs7CiAgICAgIGNhc2UgInVzZXJzIjogdXNlcnMgPSByZXNwb25zZVtrZXlzW2ldXTsgYnJlYWs7CiAgICAgIGNhc2UgInRva2VuIjogZG9jdW1lbnQuY29va2llID0gIlRva2VuPSIgKyByZXNwb25zZVtrZXlzW2ldXTsgYnJlYWs7CiAgICAgIGNhc2UgInJlbG9hZCI6IGxvY2F0aW9uLnJlbG9hZCgpOyBicmVhazsKICAgICAgY2FzZSAib3BlbkxpbmsiOiB3aW5kb3cubG9jYXRpb24gPSByZXNwb25zZVsib3BlbkxpbmsiXTsgYnJlYWs7CiAgICAgIC8vY2FzZSAidmVyc2lvbiI6IHZlcnNpb24gPSByZXNwb25zZVtrZXlzW2ldXTsgYnJlYWs7CiAgICB9CiAgfQp9CgpmdW5jdGlvbiBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoeFhtbHR2RmlsZSwgZmlsZVR5cGUsIGtleSkgewoKICB2YXIgZmlsZUlEID0geFhtbHR2RmlsZS5zdWJzdHJpbmcoMCwgeFhtbHR2RmlsZS5sYXN0SW5kZXhPZignLicpKQoKICBpZiAoY29uZmlnWyJmaWxlcyJdW2ZpbGVUeXBlXS5oYXNPd25Qcm9wZXJ0eShmaWxlSUQpID09IHRydWUpIHsKICAgIHZhciBkYXRhID0gY29uZmlnWyJmaWxlcyJdW2ZpbGVUeXBlXVtmaWxlSURdOwogICAgcmV0dXJuIGRhdGFba2V5XQogIH0KCn0KCgoKCg==" + webUI["html/js/log.js"] = "dmFyIGxvZ0ludGVydmFsCgoKZnVuY3Rpb24gdXBkYXRlTG9nKCkgewogIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogIGRhdGFbImNtZCJdID0gImdldExvZyI7CiAgVGhyZWFkZmluKGRhdGEpOwogIHdyaXRlTG9nSW5EaXYoKTsKICByZXR1cm4KfQoKZnVuY3Rpb24gd3JpdGVMb2dJbkRpdigpIHsKICB2YXIgbG9ncyA9IGxvZ1sibG9nIl07CiAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZXR0aW5ncyIpLmxhc3RDaGlsZC5sYXN0Q2hpbGQ7CiAgZGl2LmlubmVySFRNTCA9ICIiOwoKICB2YXIgbWF4ID0gNTA7CgoKICBmb3IgKHZhciBpID0gMDsgaSA8IGxvZ3MubGVuZ3RoOyBpKyspIHsKICAgIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICAgIG5ld0VudHJ5WyJfZWxlbWVudCJdID0gIlAiOwoKICAgIGlmIChsb2dzW2ldLmluY2x1ZGVzKCJFUlJPUiIpKSB7CiAgICAgIC8vICAgICAgY2FzZSAid2FybmluZ3MiOiAgbXNnVHlwZSA9ICJ3YXJuaW5nTXNnIjsgYnJlYWs7CiAgICAgIG5ld0VudHJ5WyJjbGFzcyJdID0gImVycm9yTXNnIjsKICAgIH0KCiAgICBpZiAobG9nc1tpXS5pbmNsdWRlcygiV0FSTklORyIpKSB7CiAgICAgIC8vICAgICAgY2FzZSAid2FybmluZ3MiOiAgbXNnVHlwZSA9ICJ3YXJuaW5nTXNnIjsgYnJlYWs7CiAgICAgIG5ld0VudHJ5WyJjbGFzcyJdID0gIndhcm5pbmdNc2ciOwogICAgfQoKICAgIG5ld0VudHJ5WyJfdGV4dCJdID0gbG9nc1tpXTsKCiAgICBkaXYuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdFbnRyeSkpOwogIH0KCiAgY2FsY3VsYXRlV3JhcHBlckhlaWdodCgpOwogIHZhciBzY3JvbGxEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm94LXdyYXBwZXIiKTsKICBzY3JvbGxEaXYuc2Nyb2xsVG9wID0gc2Nyb2xsRGl2LnNjcm9sbEhlaWdodDsKfQoKZnVuY3Rpb24gc2hvd0xvZyhvYmopIHsKICAvL2xvZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwodXBkYXRlTG9nLCA1MDAwKTsKCiAgdmFyIGxvZ3MgPSBsb2dbImxvZyJdOwoKICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNldHRpbmdzIik7CgogIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJIUiI7CiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKICAvL2RpdiA9IGRpdi5sYXN0Q2hpbGQ7CgogIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CiAgbmV3RW50cnlbInR5cGUiXSA9ICJidXR0b24iOwogIG5ld0VudHJ5WyJjbGFzcyJdID0gImJ1dHRvbiI7CiAgbmV3RW50cnlbInZhbHVlIl0gPSAiRW1wdHkgTG9nIjsKICBuZXdFbnRyeVsib25jbGljayJdID0gImVtcHR5TG9nKCkiOwogIGRpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CgogIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJjb2RlIjsKICBuZXdFbnRyeVsiX3RleHQiXSA9ICJVcGRhdGUgTG9nOiAiOwogIGRpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CgogIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CiAgbmV3RW50cnlbInR5cGUiXSA9ICJjaGVja2JveCI7CiAgLy9uZXdFbnRyeVsiY2hlY2tlZCJdICAgICA9ICJjaGVja2JveCI7CiAgbmV3RW50cnlbIm9uY2xpY2siXSA9ICJsb2dVcGRhdGVzKHRoaXMpIjsKICBkaXYuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdFbnRyeSkpOwoKICB2YXIgbmV3RW50cnkgPSBuZXcgT2JqZWN0KCk7CiAgbmV3RW50cnlbIl9lbGVtZW50Il0gPSAiSFIiOwogIGRpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CgoKCgoKICB2YXIgbmV3V3JhcHBlciA9IG5ldyBPYmplY3QoKTsKICBuZXdXcmFwcGVyWyJfZWxlbWVudCJdID0gIkRJViI7CiAgbmV3V3JhcHBlclsiaWQiXSA9ICJib3gtd3JhcHBlciI7CiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3V3JhcHBlcikpOwogIGRpdiA9IGRpdi5sYXN0Q2hpbGQ7CgogIHZhciBuZXdQcmUgPSBuZXcgT2JqZWN0KCk7CiAgbmV3UHJlWyJfZWxlbWVudCJdID0gIlBSRSI7CiAgbmV3UHJlWyJpZCJdID0gImxvZ1NjcmVlbiI7CiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3UHJlKSk7CgogIGRpdiA9IGRpdi5sYXN0Q2hpbGQ7CgogIHdyaXRlTG9nSW5EaXYoKQogIHJldHVybgp9CgpmdW5jdGlvbiBlbXB0eUxvZygpIHsKICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICBkYXRhWyJjbWQiXSA9ICJlbXB0eUxvZyI7CiAgVGhyZWFkZmluKGRhdGEpOwogIHJldHVybgp9CgpmdW5jdGlvbiBsb2dVcGRhdGVzKGVsbSkgewogIHN3aXRjaCAoZWxtLmNoZWNrZWQpIHsKICAgIGNhc2UgZmFsc2U6IGNsZWFySW50ZXJ2YWwobG9nSW50ZXJ2YWwpOyBicmVhazsKICAgIGNhc2UgdHJ1ZTogbG9nSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCh1cGRhdGVMb2csIDUwMDApOyBicmVhazsKCiAgfQp9" + webUI["html/img/filter.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0yOFQxOTowNzo2OTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cs038OQAAAOISURBVGgF5ZpLSBVRGMfvvfmqCKKiKCqKtE3SQ8haJJm1ctPCZYHrFhXtohcUBLVsU1BRBJKLXpsSKs1aCL1oUUhvMgIloodZKmLZ72+OzNVx7jzOXGfqg/89Z875zv/7f35n7px7vanUP2JptzyGhoYKmK8GW0EZmA/mgW7wHrwDN0BTOp0epPVtxBBnLdgIVoE5YBboBR2gDTTA/5DWn0FeDPaBz8CLdeF0EBR5jYRvKbgABoAXa8Opwit/CudK8NoLs4PPM8ZyBsNnB/jpsD7X0C8cjgDXnaQkqkEPCGMSuGWivxxzx8OQj6xtpHWuPhPloHfEMWzTD0HN2GQY2xuW2Lb+/Fh+VaIQPLE5meh+gmSxFYz+BjBogtjGscfiH26Z2GmbNNltVQAIpwDdP6ZNO2iRYqTpZGhfgWUaiMC2w1kCzkbALcqLvDVvUyK6MW9HFES0b8BvsFwXEZi4F+iBtykCcjtlqf0igr52VJ1eqiIgzzdlrRIZfWfJd3SD8ZbqHvkB4XSDpJNB9V0VcX/cT4Ys/zEzSuSj/3WxW9GpRD7ETpZ/QcOJ6LyfdHugitxNehbob9G7lo4PXWBmQhPqQ/fsDOeUfjqNCU1Csi+TQ5+2luzc3yaRr6elevQZwhZr4bomYam0U41yabYqov5hvSTMjlp6RyuiAarSTLPZmox5246+lVREx/isiuh6NxhUJwF2yEpCWu1bK8WEsjyRgCSa0XrVrjNra2mC7TWD5ilYAuJoA4jSlnppF5dVEU3g0ENTD4b3nsZiZsfGJuGqj8qY+CINGqP2GLZCJ+HjtpblxAJ9k3cPrLfGJrnVUaSCarxw0jFua1lOLNBerANx+byya6IkLM2uLZWpAl6/Mcc1EjvjKtLrJNLqI5HnjfQ+bsVeteb0g2y/t7hGvd7CNjenOL8OkJ40KtOdTF+Cl/nV6Mkf4gxocI9vZPYLLKs9iQrqRIACcM2IXGeSboYrg+rztY5ARaDJWUeo0W+sXudLTFhnApaAW6FkZy/+yuXasLoCrSfwVHAnW0+gK93YawKJMLUIAdNAKwhqnSxcYUpPKB6EBE2mg7VR///EX24jybTQerXnOC70FyVP3gjTPXPTQyaP8NFPNeJrCNTPP667JKOq6VNo/A2hes5ccUjmEmPmDoD5+FMgWCcA+3FG57QJP//kQ1PgGBIOToEDgUn+t4V/AJeGknwARIKLAAAAAElFTkSuQmCC" webUI["html/img/logout.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0xMC0xM1QxMToxMDoxODwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cg27QeEAAANQSURBVGgF7Zk9aBRBGIZzSRSN8YdoCpEkghCCqK1o4g9IsBCCNmIniCAiWAhqI8G02qiIoqCCWggSEcFKEFPYpVAU8QdFUyiKRpRokBjP55OdZDLZvZnZ7N3Ngh887M7sN/O9797t7c5eTc3/8D8DxWKxGS5Ai//oAEYgvB4OwleQaAtAlp8ERG+Bp6Jei/wYQfRy6NfE67vhG0FtA/TBqK7c2A/bCGJ3wpAhOq4ZphGUroEHcYoT+sIygsgmOAu/EwQndYdhBHV1sB8+Jym19Lf6/faVIRuBG+GRRajtcPWMoKwFbtgUOh6vvBGEzYFj8MNRpEtaZY2gaAe8cVHmmXOc/K3QXIZv/+SUFFgJ96AS8ZwiZ6Ab6iZVzGCPiRbCKRiDasQHip6EdD/PDKyFvfAJQgg5kVfB/VoieT0MQojxE1G9UG/7otWS0A7pPkrb7DM/Ppcp+mAAM/bFGEmL4RL8gVDjI8JWOZ0bEjvhSahO0CXXsLMZWZYegREIMV4jaoHTJyNJJLfC7RCdoOm6sxGVyKAeeBegoU6l0XmLiXlwAqp1o4w7j3d1AwW9YdtnNrnQzkOXLddyfAPHv8Ey6ABpd8N88In2QqHwymfARC5mCrAH0i6qGDr9jk3fbNgFz8A1DkwIS7tDpSVwGdLcexIfPZhPHpf2wS+wRX9a/dPGUakLzBdwNgGJRlQBJtgMw5aJ3qr8TLYUmwVHwXXxZTUiwphvHYxDUnzPxIA5CdXa4E5SVa3fyUhkRtYqpSKbNYxpJiq+ncpDJar7GGlknvcl5mqM05BZH4Xl3iOLpLh7j7OR6MScSzAykplg20QIWA0PDSG+RuTdQVy8sNXP9DgK5N4jK9AvkRpfI4sYF/c2836mQl0nQ4zce66AfZFkTMqYl2DGaSMt/CYOHpsuaPco5bLUzUuMGkLHaQ+ovjwZUZrVdpAHRnnw/Bd5MrJCiY62t4x2+E2uBfkfRg95TdSkK8/LJ7JWF83+Nb5Ww0Zf+E3OviwXVMgT8dLwVRsKEd0A+uP8biMlH01MHAYVF/Oh2lCJenkDqpbUN9nPyzU91QnCRbyEPEXn1sQhxMv7tG1T7cW3rK/r44eVtxfxm6gwBh38zJqPJuUtXu3Z/wLwuBaBLgMkKwAAAABJRU5ErkJggg==" - webUI["html/create-first-user.html"] = "PCFkb2N0eXBlIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPgogIDxsaW5rCiAgICByZWw9InN0eWxlc2hlZXQiCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyIKICAvPgogIDxsaW5rIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIGludGVncml0eT0ic2hhMzg0LWdIMnlJSnFLZE5IUEVxMG40TXFhL0hHS0loU2tJSGVMNUF5aGtZVjhpNTlVNUFSNmNzQnZBcEhITmwvdkkxQngiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9iYXNlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgo8L2hlYWQ+Cgo8Ym9keT4KCiAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iaW1nQ2VudGVyIj48L2Rpdj4KCiAgPGRpdiBpZD0iYm94Ij4KCiAgICA8ZGl2IGlkPSJoZWFkbGluZSI+CiAgICAgIDxoMSBpZD0iaGVhZC10ZXh0IiBjbGFzcz0iY2VudGVyIj57ey5hY2NvdW50LmhlYWRsaW5lfX08L2gxPgogICAgPC9kaXY+CgogICAgPHAgaWQ9ImVyciIgY2xhc3M9ImVycm9yTXNnIGNlbnRlciI+PC9wPgoKICAgIDxkaXYgaWQ9ImNvbnRlbnQiPgoKICAgICAgPGZvcm0gaWQ9ImF1dGhlbnRpY2F0aW9uIiBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4KCiAgICAgICAgPGg1Pnt7LmFjY291bnQudXNlcm5hbWUudGl0bGV9fTo8L2g1PgogICAgICAgIDxpbnB1dCBpZD0idXNlcm5hbWUiIHR5cGU9InRleHQiIG5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0iVXNlcm5hbWUiIHZhbHVlPSIiPgogICAgICAgIDxoNT57ey5hY2NvdW50LnBhc3N3b3JkLnRpdGxlfX06PC9oNT4KICAgICAgICA8aW5wdXQgaWQ9InBhc3N3b3JkIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJQYXNzd29yZCIgdmFsdWU9IiI+CiAgICAgICAgPGg1Pnt7LmFjY291bnQuY29uZmlybS50aXRsZX19OjwvaDU+CiAgICAgICAgPGlucHV0IGlkPSJjb25maXJtIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0iY29uZmlybSIgcGxhY2Vob2xkZXI9IkNvbmZpcm0iIHZhbHVlPSIiPgoKICAgICAgPC9mb3JtPgoKICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJveC1mb290ZXIiPgogICAgICA8aW5wdXQgaWQ9InN1Ym1pdCIgY2xhc3M9IiIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0ie3suYnV0dG9uLmNyYWV0ZUFjY291bnR9fSIgb25jbGljaz0iamF2YXNjcmlwdDogbG9naW4oKTsiPgogICAgPC9kaXY+CgoKICA8L2Rpdj4KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9qcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyIgaW50ZWdyaXR5PSJzaGEzODQtQTNySkQ4NTZLb3dTYjdkd2xaZFlFa08zOUdhZ2k3dklzRjBqclJBb1FtREtLdFFCSFV1TFo5QXNTdjRqRDRYYSIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2NsaXBib2FyZC5qcy8yLjAuMTAvY2xpcGJvYXJkLm1pbi5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL25ldHdvcmtfdHMuanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9hdXRoZW50aWNhdGlvbl90cy5qcyI+PC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4=" - webUI["html/css/base.css"] = "KiB7CiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogIC1tb3otYXBwZWFyYW5jZTogbm9uZTsKICAtbXMtYXBwZWFyYW5jZTogbm9uZTsKICBmb250LWZhbWlseTogIkFyaWFsIiwgc2Fucy1zZXJpZjsKICBsZXR0ZXItc3BhY2luZzogMnB4Owp9CgovKgo6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgCiAgICBkaXNwbGF5OiBub25lOyAKfQoqLwoKOjotd2Via2l0LXNjcm9sbGJhciB7CiAgd2lkdGg6IDEycHg7CiAgaGVpZ2h0OiAxMnB4Owp9CgoKOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgNnB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICBib3JkZXItcmFkaXVzOiA1cHg7Cgp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICBib3JkZXItcmFkaXVzOiA1cHg7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgNnB4IHJnYmEoMCwgMCwgMCwgMC42KTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICBiYWNrZ3JvdW5kOiAjMzMzOwp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCmEgewogIGNvbG9yOiAjMDBFNkZGOwp9CgpodG1sLApib2R5IHsKICBjb2xvcjogI2ZmZjsKICBtYXJnaW46IDBweCBhdXRvOwogIGhlaWdodDogMTAwJTsKICBmb250LXNpemU6IDE0cHg7Cn0KCmgyIHsKICBmb250LXNpemU6IDI0cHg7CiAgbGV0dGVyLXNwYWNpbmc6IDJweDsKfQoKaDMgewogIGZvbnQtc2l6ZTogMjJweDsKICBsZXR0ZXItc3BhY2luZzogMXB4Owp9CgpoNCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGxldHRlci1zcGFjaW5nOiAxcHg7CiAgbGluZS1oZWlnaHQ6IDEuNWVtOwoKfQoKaDUgewogIGZvbnQtc2l6ZTogMTZweDsKICBsZXR0ZXItc3BhY2luZzogMXB4OwogIGxpbmUtaGVpZ2h0OiAxLjJlbTsKICBtYXJnaW46IDI1cHggMHB4IDEwcHggMHB4Owp9CgpociB7CiAgYm9yZGVyOiAwOwogIGhlaWdodDogMXB4OwogIGJhY2tncm91bmQ6ICMzMzM7CiAgbWFyZ2luOiAxMHB4IDBweDsKfQoKcCB7CiAgbWFyZ2luOiAycHg7CiAgcGFkZGluZzogMnB4IDVweDsKfQoKcHJlIHsKICBtYXJnaW46IDBweCAwcHggNXB4IDBweDsKICBmb250LXNpemU6IDEycHg7CiAgY29sb3I6ICNkZGQ7CiAgbGV0dGVyLXNwYWNpbmc6IDFweDsKICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtdmFyaWFudDogbm9ybWFsOwogIGxpbmUtaGVpZ2h0OiAxLjZlbTsKfQoKbGFiZWwgewogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgZGlzcGxheTogYmxvY2s7Cn0KCmxpIHsKICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgY3Vyc29yOiBwb2ludGVyOwogIHRyYW5zaXRpb246IGFsbCAwLjM7Cn0KCmxpOmhvdmVyIHsKICBib3JkZXItY29sb3I6ICMwMEU2RkYKfQoKc2VsZWN0IHsKICBjdXJzb3I6IHBvaW50ZXI7CiAgd2lkdGg6IGNhbGMoMTAwJSArIDJweCk7CiAgYm9yZGVyOiBzb2xpZCAwcHggIzAwRTZGRjsKICBib3JkZXItcmFkaXVzOiAwcHg7CiAgb3V0bGluZTogbm9uZTsKICBjb2xvcjogI2ZmZjsKICBwYWRkaW5nOiA5cHggMTBweDsKICBkaXNwbGF5OiBibG9jazsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOwogIGZvbnQtc2l6ZTogMTRweDsKICBtYXJnaW46IDVweCAwcHggNXB4IDBweDsKfQoKc2VsZWN0OmZvY3VzIHsKICBvdXRsaW5lOiBub25lOwp9CgppbnB1dCB7CiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogIG1hcmdpbjogMHB4OwogIHBhZGRpbmc6IDIuNXB4IDEwcHg7CiAgb3V0bGluZTogbm9uZTsKICBmb250LXNpemU6IDE0cHg7Cn0KCmlucHV0W3R5cGU9YnV0dG9uXSwKaW5wdXRbdHlwZT1zdWJtaXRdIHsKICBjdXJzb3I6IHBvaW50ZXI7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKICBtYXJnaW46IDEwcHggMTBweDsKICBwYWRkaW5nOiAxMHB4IDI1cHg7CiAgYm9yZGVyOiBzb2xpZCAwcHg7CiAgYm9yZGVyLWNvbG9yOiAjMDAwOwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBvdXRsaW5lOiBub25lOwogIGNvbG9yOiAjZmZmOwp9CgppbnB1dFt0eXBlPWJ1dHRvbl06Zm9jdXMgewogIG91dGxpbmU6IG5vbmU7Cn0KCmlucHV0W3R5cGU9YnV0dG9uXTpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwRTZGRjsKICBjb2xvcjogIzAwMDsKfQoKaW5wdXRbdHlwZT1idXR0b25dOmhvdmVyLmRlbGV0ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmVkOwogIGNvbG9yOiAjZmZmOwp9CgppbnB1dFt0eXBlPXRleHRdLAppbnB1dFt0eXBlPXNlYXJjaF0sCmlucHV0W3R5cGU9cGFzc3dvcmRdIHsKICBjb2xvcjogI2ZmZjsKICB3aWR0aDogLXdlYmtpdC1jYWxjKDEwMCUgLSAwcHgpOwogIHdpZHRoOiAtbW96LWNhbGMoMTAwJSAtIDBweCk7CiAgd2lkdGg6IGNhbGMoMTAwJSAtIDBweCk7CiAgb3V0bGluZTogbm9uZTsKICBib3JkZXI6IHNvbGlkIDFweCB0cmFuc3BhcmVudDsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBib3JkZXItYm90dG9tLWNvbG9yOiAjNTU1OwogIGJvcmRlci1yYWRpdXM6IDBweDsKICBwYWRkaW5nOiA4cHggMTBweDsKfQoKaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CiAgYm9yZGVyOiBzb2xpZCAxcHggIzAwRTZGRjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOwogIGhlaWdodDogMjVweDsKICB3aWR0aDogMjVweDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgLyoKICAtd2Via2l0LWFwcGVhcmFuY2U6IGNoZWNrYm94OwogICovCn0KCmlucHV0W3R5cGU9ImNoZWNrYm94Il06Y2hlY2tlZCB7CiAgY29sb3I6ICNmZmY7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwRTZGRjsKICAvKmRpc3BsYXk6IGlubGluZS1ibG9jazsqLwp9CgppbnB1dFt0eXBlPSJjaGVja2JveCJdOmJlZm9yZSB7CiAgcG9zaXRpb246IGluaXRpYWw7CiAgbGVmdDogMHB4OwogIG1hcmdpbi1sZWZ0OiAtNHB4OwogIGNvbnRlbnQ6ICIgIjsKfQoKaW5wdXRbdHlwZT0iY2hlY2tib3giXTpjaGVja2VkOmJlZm9yZSB7CiAgcG9zaXRpb246IGluaXRpYWw7CiAgbGVmdDogMHB4OwogIG1hcmdpbi1sZWZ0OiAtM3B4OwogIGNvbnRlbnQ6ICLinJMiOwogIGNvbG9yOiAjMDAwOwp9CgppbnB1dFt0eXBlPSJjaGVja2JveCJdLmJ1bGs6Y2hlY2tlZDpiZWZvcmUgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBsZWZ0OiAwcHg7CiAgdG9wOiAtMTFweDsKICBtYXJnaW4tbGVmdDogLTNweDsKICBjb250ZW50OiAi4pyTIjsKICBmb250LXNpemU6IDEuNWVtOwogIGNvbG9yOiAjMDAwOwp9CgoKaW5wdXRbdHlwZT1idXR0b25dLmNhbmNlbCB7CgogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIGJvcmRlci1jb2xvcjogcmVkOwp9CgppbnB1dFt0eXBlPWJ1dHRvbl0uc2F2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsKICBmbG9hdDogcmlnaHQ7Cn0KCgppbnB1dFt0eXBlPWJ1dHRvbl0uYmxhY2ssCmlucHV0W3R5cGU9c3VibWl0XS5ibGFjayB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKICBib3JkZXItY29sb3I6ICMwMDA7Cn0KCmlucHV0W3R5cGU9YnV0dG9uXS5jZW50ZXIgewogIG1hcmdpbi1yaWdodDogYXV0bzsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOwogIGJvcmRlci1jb2xvcjogIzAwMDsKfQoKLnBvaW50ZXIgewogIGN1cnNvcjogcG9pbnRlcjsKfQoKLnBvaW50ZXI6aG92ZXIgewogIGNvbG9yOiAjMDBFNkZGOwogIGN1cnNvcjogcG9pbnRlcjsKfQoKLnNvcnRUaGlzIHsKICBjb2xvcjogIzAwRTZGRjsKfQoKLnc0MHB4IHsKICBtYXgtd2lkdGg6IDQwcHg7Cn0KCi53NTBweCB7CiAgbWF4LXdpZHRoOiA1MHB4Owp9CgoudzgwcHggewogIG1heC13aWR0aDogODBweDsKfQoKLncxNTBweCB7CiAgbWF4LXdpZHRoOiAxNTBweDsKfQoKLncyMDBweCB7CiAgbWF4LXdpZHRoOiAyMDBweDsKICBtaW4td2lkdGg6IDEwMHB4OwogIHdpZHRoOiAyMDBweDsKICBvdmVyZmxvdy14OiBoaWRkZW47CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9CgoudzMwMHB4IHsKICBtYXgtd2lkdGg6IDMwMHB4Owp9CgoudzIyMHB4IHsKICBtYXgtd2lkdGg6IDIyMHB4OwogIGN1cnNvcjogYWxpYXM7Cn0KCi5mb290ZXIgewogIGZvbnQtc2l6ZTogMTBweDsKfQoKLmNlbnRlciB7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Cgouc2NyZWVuTG9nSGlkZGVuIHsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIC0xMTBweCk7Cn0KCi5ib3JkZXJTcGFjZSB7CiAgbWFyZ2luLWJvdHRvbTogMzBweDsKfQoKLmJsb2NrIHt9Cgoubm9uZSB7CiAgZGlzcGxheTogbm9uZTsKfQoKCi5ub3RWaXNpYmxlIHsKICBoZWlnaHQ6IDBweDsKICBkaXNwbGF5OiBub25lOwogIG9wYWNpdHk6IDA7CiAgYm9yZGVyLWJvdHRvbTogIzAwMCBzb2xpZCAwcHg7Cgp9CgoudmlzaWJsZSB7CiAgb3BhY2l0eTogMTsKICBkaXNwbGF5OiBibG9jazsKICBib3JkZXItYm90dG9tOiAjNDQ0IHNvbGlkIDFweDsKICBwYWRkaW5nOiAxMHB4Owp9CgouZmxvYXRSaWdodCB7CiAgZmxvYXQ6IHJpZ2h0Owp9CgouZmxvYXRMZWZ0IHsKICBmbG9hdDogbGVmdDsKfQoKLm1lbnUtYWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBFNkZGOwp9Cgp0YWJsZSB7CiAgd2lkdGg6IDEwMCUKfQoKLm1lbnUtbm90QWN0aXZlIHt9CgojYnJhbmNoIHsKICBjb2xvcjogcmVkOwp9CgojaW50ZXJhY3Rpb24gewogIG1hcmdpbi1ib3R0b206IDEwMHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBib3JkZXItYm90dG9tOiBzb2xpZCAwcHggIzc3NzsKfQoKCi5oYWxmIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogNDUlOwp9CgoubWVudSB7CiAgYm9yZGVyOiBzb2xpZCAxcHggIzAwRTZGRjsKfQoKLmluZm9Nc2cgewogIGNvbG9yOiAjYWFhOwp9CgouZXJyb3JNc2cgewogIGNvbG9yOiByZWQ7Cn0KCi53YXJuaW5nTXNnIHsKICBjb2xvcjogeWVsbG93Owp9CgouZGVidWdNc2cgewogIGNvbG9yOiBtYWdlbnRhOwp9CgoKLmNhdGVnb3J5IHsKICBib3JkZXItbGVmdDogc29saWQgMnB4Cn0KCi5uZXdzIHsKICBib3JkZXItY29sb3I6IHRvbWF0bwp9CgoubW92aWUgewogIGJvcmRlci1jb2xvcjogcm95YWxibHVlOwp9Cgouc2VyaWVzIHsKICBib3JkZXItY29sb3I6IGdvbGQ7Cn0KCi5zcG9ydHMgewogIGJvcmRlci1jb2xvcjogeWVsbG93Z3JlZW47Cn0KCi5raWRzIHsKICBib3JkZXItY29sb3I6IG1lZGl1bXB1cnBsZTsKfQoKLyogTG9hZGluZyAqLwojbG9hZGluZyB7CiAgbGVmdDogMHB4OwogIHRvcDogMHB4OwogIHotaW5kZXg6IDEwMDAwOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgbWFyZ2luOiBhdXRvOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKCi5sb2FkZXIgewogIGJvcmRlcjogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogIGJvcmRlci1yYWRpdXM6IDUwJTsKICBib3JkZXItdG9wOiA1cHggc29saWQgIzAwRTZGRjsKICBib3JkZXItYm90dG9tOiA1cHggc29saWQgIzAwRTZGRjsKICB3aWR0aDogNTBweDsKICBoZWlnaHQ6IDUwcHg7CiAgLXdlYmtpdC1hbmltYXRpb246IHNwaW4gMS4ycyBsaW5lYXIgaW5maW5pdGU7CiAgYW5pbWF0aW9uOiBzcGluIDEuMnMgbGluZWFyIGluZmluaXRlOwoKICBwb3NpdGlvbjogZml4ZWQ7CiAgbWFyZ2luOiBhdXRvOwoKICB0b3A6IDA7CiAgcmlnaHQ6IDA7CiAgYm90dG9tOiAwOwogIGxlZnQ6IDA7Cgp9CgpALXdlYmtpdC1rZXlmcmFtZXMgc3BpbiB7CiAgMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CgogIDEwMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQoKQGtleWZyYW1lcyBzcGluIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CgogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICB9Cn0=" - webUI["html/img/.DS_Store"] = "AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAYAAAAAAAAAABAAAAgAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAgAAAAYAAAAAAAAAAABAAAgAAAAAAEAAEAAAAAAAQAAgAAAAAABAAEAAAAAAAEAAgAAAAAAAQAEAAAAAAABAAgAAAAAAAEAEAAAAAAAAQAgAAAAAAABAEAAAAAAAAEAgAAAAAAAAQEAAAAAAAABAgAAAAAAAAEEAAAAAAAAAQgAAAAAAAABEAAAAAAAAAEgAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" webUI["html/img/stream-limit.jpg"] = "/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAeAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA3LjItYzAwMCA3OS4xYjY1YTc5YjQsIDIwMjIvMDYvMTMtMjI6MDE6MDEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMy41IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIyQTc2MDAzNDY4RDExRUQ5OTdEOUJDNDNENTJERDJCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIyQTc2MDA0NDY4RDExRUQ5OTdEOUJDNDNENTJERDJCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjJBNzYwMDE0NjhEMTFFRDk5N0Q5QkM0M0Q1MkREMkIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjJBNzYwMDI0NjhEMTFFRDk5N0Q5QkM0M0Q1MkREMkIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAQCwsLDAsQDAwQFw8NDxcbFBAQFBsfFxcXFxcfHhcaGhoaFx4eIyUnJSMeLy8zMy8vQEBAQEBAQEBAQEBAQEBAAREPDxETERUSEhUUERQRFBoUFhYUGiYaGhwaGiYwIx4eHh4jMCsuJycnLis1NTAwNTVAQD9AQEBAQEBAQEBAQED/wAARCAQ4B4ADASIAAhEBAxEB/8QAtAABAAIDAQEBAAAAAAAAAAAAAAYHAwQFAgEIAQEAAwEBAQAAAAAAAAAAAAAAAwQFAQIGEAEAAgEDAQMFCwgIAwcDBQEAAQIDEQQFEiExBkFRcRMHYYGRIjJScrIzNDahsXOzFHQVNcHRQmKCkiOTVBYX4aLC4kNTw9LTJPBjg0RVJREBAAIBAgIIBQQCAgMAAAAAAAECAxEEMRIhUXEiMhMzBUFhUnI0gZGhI0JisRTB0RX/2gAMAwEAAhEDEQA/AK/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxPCHhTgeT4HBvN7tfW7i9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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/2Q==" - webUI["html/img/threadfin.png"] = "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" + webUI["html/img/threadfin.ico"] = "AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAMMOAADDDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF03/ABdN/yMXTf/LF03/xxdN/xwXTf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXTf8AF03/gBdN//8XTf/zF03/YRdN/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdN/wAXTf+FF03//xdN//MXTf9iF03/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF03/ABdN/4UXTf//F03/8xdN/2IXTf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXTf8AF03/hRdN//8XTf/zF03/YhdN/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdN/wAXTf+FF03//xdN//MXTf9iF03/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF03/ABdN/4UXTf//F03/8xdN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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbW4VbW1v/W1tb81tbW2JbW1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbhVtbW/9bW1vzW1tbYltbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1uFW1tb/1tbW/NbW1tiW1tbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbW4VbW1v/W1tb81tbW2JbW1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbhVtbW/9bW1vzW1tbYltbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1uFW1tb/1tbW/NbW1tiW1tbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbW4VbW1v/W1tb81tbW2JbW1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbDFtbWxNbW1sTW1tbE1tbWxNbW1sTW1tbE1tbWxNbW1sNW1tbjltbW/9bW1v0W1tbbltbWw5bW1sTW1tbE1tbWxNbW1sTW1tbE1tbWxNbW1sTW1tbDFtbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbD1tbW0dbW1ubW1tbx1tbW8RbW1vEW1tbxFtbW8RbW1vEW1tbxFtbW8JbW1vjW1tb/1tbW/xbW1vbW1tbw1tbW8RbW1vEW1tbxFtbW8RbW1vEW1tbxFtbW8dbW1ubW1tbRFtbWw5bW1sAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1sxW1tb7VtbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1vkW1tbLVtbWwAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbWw1bW1s/W1tboFtbW9FbW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vRW1tboFtbWz1bW1sMW1tbAAAAAAAAAAAA//w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w///gAAB/gAAAH4AAAB+AAAAc=" + webUI["html/img/xmltv.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0yOFQyMDowNzozMzwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Co6j9bsAAAGgSURBVGgF7VqxTsNADL0gYGEon8DOwsbAAH8BYmJn6cYIn8DC3h0+oixISFRiYYCJL0AwMMBAeK5w2rpV6uikxHfYknW98+vds18TK21DWGBlWR7CH+BfcEv2AzLP8HP42gLqkyUATuEp2PWEdQjF9ATs1zF/g29Mrxt+vVcUxR3xWxEktzFPJQmivsv8ZSI9DiQyVnxlIonwn6fpiczXpNuVVXH8O+a3Ys3y9NUyuf/NTTbEHZTjUlGSRzSiPhroUIENwB4AS/vS/susDwDhTpYBER9g7wHh5DWyibV9CiitCZbIafDEYUuJHQI3Nr/9ciWsjK6IFSWYhyvClbAyZqOIlYJG84jq7E1Ot97Zm+TinV1TrWwudk9EI3ebGFekzWprzspGEU2ySWCiOrs/s9dr7M/s9fVJJJrNXcsTsfaJc0WsKZINH+/sf1Jqvl1n1f2ZnStRN/pdq646XcSkIh9dkIg4s+IrE3nCpp8RG7f91ns+cCYR/LD4jcAZB42PN+A7/mcQ8ZxJhBYQvMJwBB/BKTFLVoLMC/wCfgyv7BesTKUC2LKM3wAAAABJRU5ErkJggg==" + webUI["html/js/settings_ts.js"] = "Y2xhc3MgU2V0dGluZ3NDYXRlZ29yeSB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLkRvY3VtZW50SUQgPSAiY29udGVudF9zZXR0aW5ncyI7CiAgICB9CiAgICBjcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHZhbHVlKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJINCIpOwogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVIUigpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkhSIik7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVTZXR0aW5ncyhzZXR0aW5nc0tleSkgewogICAgICAgIHZhciBzZXR0aW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICB2YXIgY29udGVudCA9IG5ldyBQb3B1cENvbnRlbnQoKTsKICAgICAgICB2YXIgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVtzZXR0aW5nc0tleV07CiAgICAgICAgc3dpdGNoIChzZXR0aW5nc0tleSkgewogICAgICAgICAgICAvLyBUZXh0ZWluZ2FiZW4KICAgICAgICAgICAgY2FzZSAidXBkYXRlIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy51cGRhdGUudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInVwZGF0ZSIsIGRhdGEudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLnVwZGF0ZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYmFja3VwLnBhdGgiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmJhY2t1cFBhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImJhY2t1cC5wYXRoIiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLmJhY2t1cFBhdGgucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRlbXAucGF0aCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudGVtcFBhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInRlbXAucGF0aCIsIGRhdGEpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy50bXBQYXRoLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VyLmFnZW50IjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy51c2VyQWdlbnQudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInVzZXIuYWdlbnQiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MudXNlckFnZW50LnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJidWZmZXIudGltZW91dCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuYnVmZmVyVGltZW91dC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAiYnVmZmVyLnRpbWVvdXQiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MuYnVmZmVyVGltZW91dC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmZtcGVnLnBhdGgiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmZmbXBlZ1BhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImZmbXBlZy5wYXRoIiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLmZmbXBlZ1BhdGgucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZmbXBlZy5vcHRpb25zIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5mZm1wZWdPcHRpb25zLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsICJmZm1wZWcub3B0aW9ucyIsIGRhdGEpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5mZm1wZWdPcHRpb25zLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmZm1wZWcuZm9yY2VIdHRwIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5mZm1wZWdGb3JjZUh0dHAudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInZsYy5wYXRoIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy52bGNQYXRoLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsICJ2bGMucGF0aCIsIGRhdGEpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy52bGNQYXRoLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ2bGMub3B0aW9ucyI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudmxjT3B0aW9ucy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAidmxjLm9wdGlvbnMiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MudmxjT3B0aW9ucy5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgLy8gQ2hlY2tib3hlbgogICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi53ZWIiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uV0VCLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5wbXMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uUE1TLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5tM3UiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uTTNVLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi54bWwiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uWE1MLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5hcGkiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uQVBJLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmaWxlcy51cGRhdGUiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmZpbGVzVXBkYXRlLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJjYWNoZS5pbWFnZXMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmNhY2hlSW1hZ2VzLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4ZXBnLnJlcGxhY2UubWlzc2luZy5pbWFnZXMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLnJlcGxhY2VFbXB0eUltYWdlcy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAieGVwZy5yZXBsYWNlLmNoYW5uZWwudGl0bGUiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLnJlcGxhY2VDaGFubmVsVGl0bGUudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInN0b3JlQnVmZmVySW5SQU0iOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLnN0b3JlQnVmZmVySW5SQU0udGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZvcmNlSHR0cHMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmZvcmNlSHR0cHMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImh0dHBzUG9ydCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuaHR0cHNQb3J0LnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsICJodHRwc1BvcnQiLCBkYXRhLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5odHRwc1BvcnQucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImh0dHBzVGhyZWFkZmluRG9tYWluIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5odHRwc1RocmVhZGZpbkRvbWFpbi50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAiaHR0cHNUaHJlYWRmaW5Eb21haW4iLCBkYXRhLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5odHRwc1RocmVhZGZpbkRvbWFpbi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYmluZElwQWRkcmVzcyI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuYmluZElwQWRkcmVzcy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAiYmluZElwQWRkcmVzcyIsIGRhdGEudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLmJpbmRJcEFkZHJlc3MucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImh0dHBUaHJlYWRmaW5Eb21haW4iOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmh0dHBUaHJlYWRmaW5Eb21haW4udGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImh0dHBUaHJlYWRmaW5Eb21haW4iLCBkYXRhLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5odHRwVGhyZWFkZmluRG9tYWluLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlbmFibGVOb25Bc2NpaSI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuZW5hYmxlTm9uQXNjaWkudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVwZ0NhdGVnb3JpZXMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmVwZ0NhdGVnb3JpZXMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImVwZ0NhdGVnb3JpZXMiLCBkYXRhLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdDYXRlZ29yaWVzQ29sb3JzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzQ29sb3JzLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsICJlcGdDYXRlZ29yaWVzQ29sb3JzIiwgZGF0YS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MuZXBnQ2F0ZWdvcmllc0NvbG9ycy5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiVGhyZWFkZmluQXV0b1VwZGF0ZSI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuVGhyZWFkZmluQXV0b1VwZGF0ZS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAic3NkcCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3Muc3NkcC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZHVtbXkiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmR1bW15LnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJkdW1teUNoYW5uZWwiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmR1bW15Q2hhbm5lbC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gWyJQUFYiLCAiMzAgTWludXRlcyIsICI2MCBNaW51dGVzIiwgIjkwIE1pbnV0ZXMiLCAiMTIwIE1pbnV0ZXMiLCAiMTgwIE1pbnV0ZXMiLCAiMjQwIE1pbnV0ZXMiLCAiMzYwIE1pbnV0ZXMiXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbIlBQViIsICIzMF9NaW51dGVzIiwgIjYwX01pbnV0ZXMiLCAiOTBfTWludXRlcyIsICIxMjBfTWludXRlcyIsICIxODBfTWludXRlcyIsICIyNDBfTWludXRlcyIsICIzNjBfTWludXRlcyJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YSwgc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaWdub3JlRmlsdGVycyI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuaWdub3JlRmlsdGVycy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXBpIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hcGkudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIC8vIFNlbGVjdAogICAgICAgICAgICBjYXNlICJ0dW5lciI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudHVuZXIudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMTAwOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0LnB1c2goaSk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goaSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhLCBzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChzZWxlY3QpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmVwZ1NvdXJjZS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gWyJQTVMiLCAiWEVQRyJdOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiUE1TIiwgIlhFUEciXTsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGEsIHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJhY2t1cC5rZWVwIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5iYWNrdXBLZWVwLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIjUiLCAiMTAiLCAiMjAiLCAiMzAiLCAiNDAiLCAiNTAiXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbIjUiLCAiMTAiLCAiMjAiLCAiMzAiLCAiNDAiLCAiNTAiXTsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGEsIHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJ1ZmZlci5zaXplLmtiIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5idWZmZXJTaXplLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIjAuNSBNQiIsICIxIE1CIiwgIjIgTUIiLCAiMyBNQiIsICI0IE1CIiwgIjUgTUIiLCAiNiBNQiIsICI3IE1CIiwgIjggTUIiXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbIjUxMiIsICIxMDI0IiwgIjIwNDgiLCAiMzA3MiIsICI0MDk2IiwgIjUxMjAiLCAiNjE0NCIsICI3MTY4IiwgIjgxOTIiXTsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGEsIHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJ1ZmZlciI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbInt7LnNldHRpbmdzLnN0cmVhbUJ1ZmZlcmluZy5pbmZvX2ZhbHNlfX0iLCAiRkZtcGVnOiAoe3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLmluZm9fZmZtcGVnfX0pIiwgIlZMQzogKHt7LnNldHRpbmdzLnN0cmVhbUJ1ZmZlcmluZy5pbmZvX3ZsY319KSJdOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiLSIsICJmZm1wZWciLCAidmxjIl07CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhLCBzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChzZWxlY3QpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1ZHB4eSI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudWRweHkudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInVkcHh5IiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLnVkcHh5LnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2V0dGluZzsKICAgIH0KICAgIGNyZWF0ZURlc2NyaXB0aW9uKHNldHRpbmdzS2V5KSB7CiAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICB2YXIgdGV4dDsKICAgICAgICBzd2l0Y2ggKHNldHRpbmdzS2V5KSB7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLndlYiI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uV0VCLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLm0zdSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uTTNVLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLnBtcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uUE1TLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLnhtbCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uWE1MLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLmFwaSI6CiAgICAgICAgICAgICAgICBpZiAoU0VSVkVSWyJzZXR0aW5ncyJdWyJhdXRoZW50aWNhdGlvbi53ZWIiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbkFQSS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJUaHJlYWRmaW5BdXRvVXBkYXRlIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuVGhyZWFkZmluQXV0b1VwZGF0ZS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJiYWNrdXAua2VlcCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmJhY2t1cEtlZXAuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYmFja3VwLnBhdGgiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5iYWNrdXBQYXRoLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRlbXAucGF0aCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnRlbXBQYXRoLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJ1ZmZlciI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnN0cmVhbUJ1ZmZlcmluZy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJidWZmZXIuc2l6ZS5rYiI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmJ1ZmZlclNpemUuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAic3RvcmVCdWZmZXJJblJBTSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnN0b3JlQnVmZmVySW5SQU0uZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZm9yY2VIdHRwcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmZvcmNlSHR0cHMuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaHR0cHNQb3J0IjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuaHR0cHNQb3J0LmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImh0dHBzVGhyZWFkZmluRG9tYWluIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuaHR0cHNUaHJlYWRmaW5Eb21haW4uZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYmluZElwQWRkcmVzcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmJpbmRJcEFkZHJlc3MuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaHR0cFRocmVhZGZpbkRvbWFpbiI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmh0dHBUaHJlYWRmaW5Eb21haW4uZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZW5hYmxlTm9uQXNjaWkiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5lbmFibGVOb25Bc2NpaS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdDYXRlZ29yaWVzIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuZXBnQ2F0ZWdvcmllcy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdDYXRlZ29yaWVzQ29sb3JzIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuZXBnQ2F0ZWdvcmllc0NvbG9ycy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJidWZmZXIudGltZW91dCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmJ1ZmZlclRpbWVvdXQuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidXNlci5hZ2VudCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnVzZXJBZ2VudC5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmZm1wZWcucGF0aCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmZmbXBlZ1BhdGguZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmZtcGVnLm9wdGlvbnMiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5mZm1wZWdPcHRpb25zLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZmbXBlZy5mb3JjZUh0dHAiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5mZm1wZWdGb3JjZUh0dHAuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidmxjLnBhdGgiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy52bGNQYXRoLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInZsYy5vcHRpb25zIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MudmxjT3B0aW9ucy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5lcGdTb3VyY2UuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy50dW5lci5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1cGRhdGUiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy51cGRhdGUuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXBpIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYXBpLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInNzZHAiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5zc2RwLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZpbGVzLnVwZGF0ZSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmZpbGVzVXBkYXRlLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImNhY2hlLmltYWdlcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmNhY2hlSW1hZ2VzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInhlcGcucmVwbGFjZS5taXNzaW5nLmltYWdlcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnJlcGxhY2VFbXB0eUltYWdlcy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4ZXBnLnJlcGxhY2UuY2hhbm5lbC50aXRsZSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnJlcGxhY2VDaGFubmVsVGl0bGUuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidWRweHkiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy51ZHB4eS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGV4dCA9ICIiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAiIjsKICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgdmFyIHByZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlBSRSIpOwogICAgICAgIHByZS5pbm5lckhUTUwgPSB0ZXh0OwogICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQocHJlKTsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgIH0KfQpjbGFzcyBTZXR0aW5nc0NhdGVnb3J5SXRlbSBleHRlbmRzIFNldHRpbmdzQ2F0ZWdvcnkgewogICAgY29uc3RydWN0b3IoaGVhZGxpbmUsIHNldHRpbmdzS2V5cykgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5oZWFkbGluZSA9IGhlYWRsaW5lOwogICAgICAgIHRoaXMuc2V0dGluZ3NLZXlzID0gc2V0dGluZ3NLZXlzOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnkoKSB7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gdGhpcy5jcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHRoaXMuaGVhZGxpbmUpOwogICAgICAgIHZhciBzZXR0aW5nc0tleXMgPSB0aGlzLnNldHRpbmdzS2V5czsKICAgICAgICB2YXIgZG9jID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5Eb2N1bWVudElEKTsKICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaGVhZGxpbmUpOwogICAgICAgIC8vIFRhYmVsbGUgZsO8ciBkaWUgS2F0ZWdvcmllIGVyc3RlbGxlbgogICAgICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgdmFyIGtleXMgPSBzZXR0aW5nc0tleXMuc3BsaXQoIiwiKTsKICAgICAgICBrZXlzLmZvckVhY2goc2V0dGluZ3NLZXkgPT4gewogICAgICAgICAgICBzd2l0Y2ggKHNldHRpbmdzS2V5KSB7CiAgICAgICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5wbXMiOgogICAgICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ubTN1IjoKICAgICAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLnhtbCI6CiAgICAgICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5hcGkiOgogICAgICAgICAgICAgICAgICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImF1dGhlbnRpY2F0aW9uLndlYiJdID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLmNyZWF0ZVNldHRpbmdzKHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSB0aGlzLmNyZWF0ZURlc2NyaXB0aW9uKHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChpdGVtKTsKICAgICAgICAgICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChkZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBkb2MuYXBwZW5kQ2hpbGQodGFibGUpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUhSKCkpOwogICAgfQp9CmZ1bmN0aW9uIHNob3dTZXR0aW5ncygpIHsKICAgIGNvbnNvbGUubG9nKCJTRVRUSU5HUyIpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXR0aW5nc0NhdGVnb3J5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgc2V0dGluZ3NDYXRlZ29yeVtpXS5jcmVhdGVDYXRlZ29yeSgpOwogICAgfQp9CmZ1bmN0aW9uIHNhdmVTZXR0aW5ncygpIHsKICAgIGNvbnNvbGUubG9nKCJTYXZlIFNldHRpbmdzIik7CiAgICB2YXIgY21kID0gInNhdmVTZXR0aW5ncyI7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnRfc2V0dGluZ3MiKTsKICAgIHZhciBzZXR0aW5ncyA9IGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJjaGFuZ2VkIik7CiAgICB2YXIgbmV3U2V0dGluZ3MgPSBuZXcgT2JqZWN0KCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNldHRpbmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgdmFyIHZhbHVlOwogICAgICAgIHN3aXRjaCAoc2V0dGluZ3NbaV0udGFnTmFtZSkgewogICAgICAgICAgICBjYXNlICJJTlBVVCI6CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNldHRpbmdzW2ldLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICJjaGVja2JveCI6CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzZXR0aW5nc1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzW2ldLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NldHRpbmdzW25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgInRleHQiOgogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gc2V0dGluZ3NbaV0ubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZXR0aW5nc1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ1cGRhdGUiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoIiwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZTsgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJidWZmZXIudGltZW91dCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJTRUxFQ1QiOgogICAgICAgICAgICAgICAgbmFtZSA9IHNldHRpbmdzW2ldLm5hbWU7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgLy8gV2VubiBkZXIgV2VydCBlaW5lIFphaGwgaXN0LCB3aXJkIGRpZXNlciBhbHMgWmFobCBnZXNwZWljaGVydAogICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIG5ld1NldHRpbmdzW25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHBhcnNlSW50KHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgZGF0YVsic2V0dGluZ3MiXSA9IG5ld1NldHRpbmdzOwogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwp9Cg==" + webUI["html/maintenance.html"] = "PCFkb2N0eXBlIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9iYXNlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgo8L2hlYWQ+Cgo8Ym9keT4KCiAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iaW1nQ2VudGVyIj48L2Rpdj4KCiAgPGRpdiBpZD0iYm94Ij4KCiAgICA8ZGl2IGlkPSJoZWFkbGluZSI+CiAgICAgIDxoMSBpZD0iaGVhZC10ZXh0IiBjbGFzcz0iY2VudGVyIj5NYWludGVuYW5jZTwvaDE+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJjb250ZW50Ij4KICAgICAgVGhyZWFkZmluIGlzIHVwZGF0aW5nIHRoZSBkYXRhYmFzZSwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJveC1mb290ZXIiPjwvZGl2PgoKICA8L2Rpdj4KCjwvYm9keT4KCjwvaHRtbD4=" + webUI["html/img/.DS_Store"] = "AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAYAAAAAAAAAABAAAAgAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAgAAAAYAAAAAAAAAAABAAAgAAAAAAEAAEAAAAAAAQAAgAAAAAABAAEAAAAAAAEAAgAAAAAAAQAEAAAAAAABAAgAAAAAAAEAEAAAAAAAAQAgAAAAAAABAEAAAAAAAAEAgAAAAAAAAQEAAAAAAAABAgAAAAAAAAEEAAAAAAAAAQgAAAAAAAABEAAAAAAAAAEgAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" + webUI["html/img/settings.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wOC0xMFQxODowODo4OTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Ckxt87EAAAS7SURBVGgFzZpdiFVVGIbn5N+IMgVhaRLqWI7mQIJoIVRgOhQZNDAhWcbcVuPV3BRE6I14440iQQSaN0p6kz8zI0k5inUhZSSaYOVYODMo5eiMOOPf+LzH2cPMPmvttdbe53jOBy9rr2+938/ae51vr733qaoqgQwPD68B/wDJfXAP3AE94JMShCy+SxJ9CvSDJFlU7MiPFdsh/hrBdIffBsd48HApJjLPI4tnPThBlFJMZI5HBuWZCIt9AmgEzeAJR6JzHeMadnKI8wbYCz4Fkz18JlNwMgf8BCL5j4O3bVaMdUfEhPZqgv1U7HbEbDvoT7HZOPUYNwAlHheV09a4A3RTgMqtj9QY7JdgeM5i3I4+fDIYrQeq/UnyNYOTlBDtS+BwEjk2doz+KyO2OY5bwVCME+/qylTHT4C1D3k+uB33Yul3ov/eMuajlu1RH+II5wtT4hNNSnQ6U/kzbRkfq351bCfF8apAm7kmvq38njWRK0S305SHcSK5XO4U5O9MBmXWbSe3E6YccialdKzH2TTnQEF10XgZ5DdivsxEhkyxjVdERAwu03xmMiqD7hYx19km4cyHq6KyeHKkWpSz+ciVrHVpRYZk/wLHp0H2bULkNKzt4Eq86TKxLq3IECf6nXwV9QPbAfjHQSfoD7SN6L63gYhvbrkiTwKf/dPYpbdPVxKMnigdg0VAG8FQye8AzBl6aIk2A+wPiNoHd63LNZx3wbUAvz/CfTzJb/43AmkGpLfAi0DPE/NALQgtve+xFPdi5xRiNkHa5ySOJ/TR7RrBJdqL4AAxL+p+8ToYAFklNCnF3pM1KPba2L6v8vons5oPsko9ZyZoa0PsOoKezxoY+y5N5DYHWSvDTXzUMJH7IUkRW0tbyyV0CcfDDKmqDMe1KfqnQyehGNgo9q8p4hWYFGsiBY4fsSK/BRkkaPgj5PhMy720BnVFesfnlKo3Das0bw8XYJf196GEuzWRLSDoRypLg2w06FyqTS6Cx7iK1eeqGqrnugmuBgvB8+A5UAuqQYiU+oZ4h2T+BV3gAlDp/pai0U1rFpVGMAv8AHzFd4vShMOQLcoB+DNB/sSbM3ZoMV4BQsW0adSJSbNp1Hu1mY40/YZxpPdJaUSfFzrBMXAjjQNsdvll6cHCWVvKJIphdhcny11pqmolCk5aIDif0BKdZBucgPlO8kh/r8O4HtwClSCbk86HtQqQuUrvKVCf5OARjt0lll4H/WKKmbS0tmJQKZNQ7nq9+w0n2LhTN04E8jKMPpZ1hcli8tGTZYEYJwJrZQGzchTGz3a2ifwdkHc73LYAfpx6DcWXQK1LeiDsdpFGx7UOwUGQJKpmGyIjjvWh50iSQWzsZ/ofgvx+jnYp+B/YpJcB7QXDBKPJ4JDF6+/oCwoBuhoL36R+Jp4RJH16u2IgaxJpHhMehsBY3wTjV2YbOuuumLHrwCW6msbSj74O/DHGgV4Ohl8Jw1nSMmsB+tL6Wnw83odzBrhEr2GtgvFE8A74ADxtJZZygMC25cjQqBwqdg62qpUlziUP45Cq6OGuqqoUE/FJ8i+v7MpJYvEsHl1A5gNty2vLmaN3bBLdAvqB3svqXxLRvyEuc9zs7SiA+ACpw05pJx8SoAAAAABJRU5ErkJggg==" + webUI["html/js/configuaration.js"] = "dmFyIGNvbmZpZ01lbnUgPSBuZXcgT2JqZWN0KCk7CnZhciB3aXphcmQgPSBuZXcgQXJyYXkoImtleSIsICJ0dW5lciIsICJlcGdTb3VyY2UiLCAibTN1IiwgImNvbXBsZXRlIik7CnZhciBhY3RpdmVXaXphcmQ7CnZhciBkdnJJUAoKdmFyIGNvbmZpZ01lbnVfdHVuZXIgPSBuZXcgT2JqZWN0KCk7CmNvbmZpZ01lbnVfdHVuZXJbIl9lbGVtZW50Il0gPSAiU0VMRUNUIjsKY29uZmlnTWVudV90dW5lclsiX21lbnVUeXBlIl0gPSAic2luZ2xlSW5wdXQiOwpjb25maWdNZW51X3R1bmVyWyJfY29uZmlnS2V5Il0gPSAidHVuZXIiOwpjb25maWdNZW51X3R1bmVyWyJfbGFiZWwiXSA9ICJBdmFpbGFibGUgdHVuZXJzIjsKY29uZmlnTWVudV90dW5lclsibmFtZSJdID0gInR1bmVyIjsKY29uZmlnTWVudV90dW5lclsiaWQiXSA9ICJUdW5lciI7CmNvbmZpZ01lbnVfdHVuZXJbInBsYWNlaG9sZGVyIl0gPSAiVHVuZXIiOwpjb25maWdNZW51X3R1bmVyWyJfdXNhZ2UiXSA9ICJUaGlzIHNldHRpbmcgaXMgb25seSB1c2VkIGJ5IFBsZXggYW5kIEVtYnkuPGJyPlRoZSBudW1iZXIgb2YgY29uY3VycmVudCBzdHJlYW1zIGFsbG93ZWQgYnkgdGhlIElQVFYgcHJvdmlkZXIuIgoKCnZhciBvcHRpb25WYWx1ZXMgPSBuZXcgQXJyYXkoKTsKZm9yICh2YXIgaSA9IDE7IGkgPD0gMTAwOyBpKyspIHsKICBvcHRpb25WYWx1ZXMucHVzaChpKQp9CmNvbmZpZ01lbnVfdHVuZXJbIl9vcHRpb25WYWx1ZXMiXSA9IG9wdGlvblZhbHVlczsKCnZhciBjb25maWdNZW51X2VwZyA9IG5ldyBPYmplY3QoKTsKY29uZmlnTWVudV9lcGdbIl9lbGVtZW50Il0gPSAiU0VMRUNUIjsKY29uZmlnTWVudV9lcGdbIl9tZW51VHlwZSJdID0gInNpbmdsZUlucHV0IjsKY29uZmlnTWVudV9lcGdbIl9jb25maWdLZXkiXSA9ICJlcGdTb3VyY2UiOwpjb25maWdNZW51X2VwZ1siX2xhYmVsIl0gPSAiU2VsZWN0aW9uIG9mIHRoZSBFUEcgc291cmNlIjsKY29uZmlnTWVudV9lcGdbIm5hbWUiXSA9ICJlcGdTb3VyY2UiOwpjb25maWdNZW51X2VwZ1siaWQiXSA9ICJFUEcgc291cmNlIjsKY29uZmlnTWVudV9lcGdbInBsYWNlaG9sZGVyIl0gPSAiRVBHIHNvdXJjZSI7CmNvbmZpZ01lbnVfZXBnWyJfb3B0aW9uVmFsdWVzIl0gPSBuZXcgQXJyYXkoIlBNUyIsICJYRVBHIik7CmNvbmZpZ01lbnVfZXBnWyJfdXNhZ2UiXSA9ICJQTVM6ICAgVXNlIEVQRyBkYXRhIGZyb20gUGxleCBvciBFbWJ5PGJyPlhFUEc6ICBVc2Ugb2YgZXh0ZXJuYWwgRVBHIGRhdGEgKFhNTFRWKTxicj4gICAgICAgU2V2ZXJhbCBYTUxUViBzb3VyY2VzIHBvc3NpYmxlPGJyPiAgICAgICBBbGxvd3MgZWRpdGluZyBhbmQgb3JkZXIgY2hhbm5lbHM8YnI+ICAgICAgIE0zVSAvIFhNTFRWIGV4cG9ydCAoSFRUUCBsaW5rIGZvciBJUFRWIGFwcHMpIgoKdmFyIGNvbmZpZ01lbnVfbTN1ID0gbmV3IE9iamVjdCgpOwpjb25maWdNZW51X20zdVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CmNvbmZpZ01lbnVfbTN1WyJfbWVudVR5cGUiXSA9ICJpbnB1dEFycmF5IjsKY29uZmlnTWVudV9tM3VbIl9jb25maWdLZXkiXSA9ICJmaWxlIjsKY29uZmlnTWVudV9tM3VbIl9sYWJlbCJdID0gIk0zVSBGaWxlOiBsb2NhbCBvciByZW1vdGUiOwpjb25maWdNZW51X20zdVsibmFtZSJdID0gImZpbGUiOwpjb25maWdNZW51X20zdVsiaWQiXSA9ICJtM3UiOwpjb25maWdNZW51X20zdVsidHlwZSJdID0gInRleHQiOwpjb25maWdNZW51X20zdVsicGxhY2Vob2xkZXIiXSA9ICJNM1UgRmlsZSI7CmNvbmZpZ01lbnVfbTN1WyJfdXNhZ2UiXSA9ICJSZW1vdGUgcGxheWxpc3Q6IGh0dHA6Ly95b3VyLnByb3ZpZGVyLmNvbS9maWxlLm0zdTxicj5Mb2NhbCAgcGxheWxpc3Q6IC9wYXRoL3RvL2ZpbGUubTN1IgoKCmNvbmZpZ01lbnVfbTN1WyJ2YWx1ZSJdID0gImh0dHA6Ly93ZWJzcnYubG9jYWw6ODA4MC9rYWJlbC5tM3UiOwoKdmFyIGNvbmZpZ01lbnVfY29tcGxldGUgPSBuZXcgT2JqZWN0KCk7CmNvbmZpZ01lbnVfY29tcGxldGVbIl9lbGVtZW50Il0gPSAiSDIiOwpjb25maWdNZW51X2NvbXBsZXRlWyJfbWVudVR5cGUiXSA9ICJpbnB1dEFycmF5IjsKY29uZmlnTWVudV9jb21wbGV0ZVsiX2NvbmZpZ0tleSJdID0gImZpbGUiOwpjb25maWdNZW51X2NvbXBsZXRlWyJfdGV4dCJdID0gIlRocmVhZGZpbiB3YXMgc3VjY2Vzc2Z1bGx5IHNldCB1cCI7CmNvbmZpZ01lbnVfY29tcGxldGVbIm5hbWUiXSA9ICJjb21wbGV0ZSI7CmNvbmZpZ01lbnVfY29tcGxldGVbImlkIl0gPSAiY29tcGxldGUiOwpjb25maWdNZW51X2NvbXBsZXRlWyJ0eXBlIl0gPSAidGV4dCI7CmNvbmZpZ01lbnVfY29tcGxldGVbImNsYXNzIl0gPSAiY2VudGVyIjsKCmNvbmZpZ01lbnVbInR1bmVyIl0gPSBjb25maWdNZW51X3R1bmVyOwpjb25maWdNZW51WyJlcGdTb3VyY2UiXSA9IGNvbmZpZ01lbnVfZXBnOwpjb25maWdNZW51WyJtM3UiXSA9IGNvbmZpZ01lbnVfbTN1Owpjb25maWdNZW51WyJjb21wbGV0ZSJdID0gY29uZmlnTWVudV9jb21wbGV0ZTsKCmZ1bmN0aW9uIHJlYWR5Rm9yQ29uZmlndXJhdGlvbigpIHsKICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICBkYXRhWyJjbWQiXSA9ICJnZXRTZXJ2ZXJDb25maWciOwogIFRocmVhZGZpbihkYXRhKTsKICBzaG93TG9hZGluZ1NjcmVlbihmYWxzZSk7Cn0KCmZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oZWxtKSB7CgogIGFjdGl2ZVdpemFyZCA9IGVsbTsKICB2YXIgaXRlbSA9IGNvbmZpZ01lbnVbZWxtXTsKCiAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50Iik7CiAgZGl2LmlubmVySFRNTCA9ICIiOwogIGRpdi5zZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlnS2V5IiwgaXRlbVsiX2NvbmZpZ0tleSJdKTsKICBkaXYuc2V0QXR0cmlidXRlKCJkYXRhLW1lbnVUeXBlIiwgaXRlbVsiX21lbnVUeXBlIl0pOwoKICBzd2l0Y2ggKGl0ZW0uaGFzT3duUHJvcGVydHkoIl9sYWJlbCIpKSB7CiAgICBjYXNlIHRydWU6CiAgICAgIHZhciBuZXdJdGVtID0gbmV3IE9iamVjdCgpOwogICAgICBuZXdJdGVtWyJfZWxlbWVudCJdID0gIkxBQkVMIjsKICAgICAgbmV3SXRlbVsiX3RleHQiXSA9IGl0ZW1bIl9sYWJlbCJdOwogICAgICBuZXdJdGVtWyJmb3IiXSA9IGl0ZW1bImlkIl07CiAgICAgIGRpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0l0ZW0pKTsKICAgICAgYnJlYWsKICB9CgogIHN3aXRjaCAoaXRlbVsiX2VsZW1lbnQiXSkgewogICAgY2FzZSAiU0VMRUNUIjoKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoaXRlbSkpOwogICAgICB2YXIgc2VsZWN0RWxlbWVudCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiU0VMRUNUIilbMF07CiAgICAgIHZhciB2YWx1ZXMgPSBpdGVtWyJfb3B0aW9uVmFsdWVzIl07CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdDsKICAgICAgICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJPUFRJT04iOwogICAgICAgIG5ld0VudHJ5WyJfdGV4dCJdID0gaXRlbVsiaWQiXSArICI6ICIgKyB2YWx1ZXNbaV07CiAgICAgICAgbmV3RW50cnlbInZhbHVlIl0gPSB2YWx1ZXNbaV07CiAgICAgICAgc2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CiAgICAgIH0KICAgICAgLy9yZXR1cm4KICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoaXRlbSkpOwogICAgICBicmVhazsKCgogIH0KICAvL2FsZXJ0KCkKCiAgc3dpdGNoIChpdGVtLmhhc093blByb3BlcnR5KCJfdXNhZ2UiKSkgewogICAgY2FzZSB0cnVlOgogICAgICB2YXIgdXNhZ2VJdGVtID0gbmV3IE9iamVjdCgpOwogICAgICB1c2FnZUl0ZW1bIl9lbGVtZW50Il0gPSAiUFJFIgogICAgICB1c2FnZUl0ZW1bIl90ZXh0Il0gPSBpdGVtWyJfdXNhZ2UiXTsKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQodXNhZ2VJdGVtKSk7CiAgfQoKICBpZiAoYWN0aXZlV2l6YXJkID09ICJjb21wbGV0ZSIpIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuZXh0IikudmFsdWUgPSAiRmluaXNoZWQiCiAgICAvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuZXh0Iikuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImphdmFzY3JpcHQ6IGxvY2F0aW9uLnJlbG9hZCgpOyIpCiAgfQoKICAvL2Rpdi5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KGl0ZW0pKTsKfQoKZnVuY3Rpb24gc2F2ZURhdGEoKSB7CgogIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpOwogIHZhciBpbnB1dHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIik7CiAgdmFyIHNlbGVjdHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlNFTEVDVCIpOwogIHZhciB2YWx1ZTsKICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICB2YXIgdmFsdWVBcnIgPSBuZXcgQXJyYXkoKTsKICB2YXIgbmV3RGF0YSA9IGZhbHNlOwoKICBpZiAoYWN0aXZlV2l6YXJkID09ICJjb21wbGV0ZSIpIHsKICAgIGRhdGFbImNtZCJdID0gIndpemFyZENvbXBsZXRlZCI7CiAgICBzaG93TG9hZGluZ1NjcmVlbih0cnVlKQogICAgVGhyZWFkZmluKGRhdGEpOwogICAgcmV0dXJuCiAgfQoKICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgdmFyIG1lbnVUeXBlID0gaW5wdXRzW2ldLnBhcmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLW1lbnV0eXBlIik7CiAgICBpZiAoaW5wdXRzW2ldLnZhbHVlICE9IHVuZGVmaW5lZCAmJiBpbnB1dHNbaV0udmFsdWUgIT0gIiIpIHsKICAgICAgbmV3RGF0YSA9IHRydWU7CgogICAgICBjb25zb2xlLmxvZyhpbnB1dHNbaV0uaWQpCiAgICAgIHN3aXRjaCAoaW5wdXRzW2ldLmlkKSB7CiAgICAgICAgY2FzZSAibTN1IjoKICAgICAgICAgIHZhciBuZXdQbGF5bGlzdCA9IG5ldyBPYmplY3QoKTsKICAgICAgICAgIG5ld1BsYXlsaXN0WyJmaWxlLnNvdXJjZSJdID0gaW5wdXRzW2ldLnZhbHVlOwogICAgICAgICAgLy9uZXdQbGF5bGlzdFsibmFtZSJdID0gaW5wdXRzW2ldLnZhbHVlOwogICAgICAgICAgbmV3UGxheWxpc3RbInR5cGUiXSA9ICJtM3UiOwogICAgICAgICAgbmV3UGxheWxpc3RbIm5ldyJdID0gdHJ1ZTsKCiAgICAgICAgICBkYXRhWyJmaWxlcyJdID0gbmV3IE9iamVjdCgpOwogICAgICAgICAgZGF0YVsiZmlsZXMiXVsibTN1Il0gPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgICBkYXRhWyJmaWxlcyJdWyJtM3UiXVsiLSJdID0gbmV3UGxheWxpc3Q7CgogICAgICAgICAgZGF0YVsiY21kIl0gPSAic2F2ZUZpbGVzTTNVIjsKICAgICAgICAgIFRocmVhZGZpbihkYXRhKQogICAgICAgICAgcmV0dXJuCiAgICAgIH0KICAgICAgLyoKICAgICAgc3dpdGNoKG1lbnVUeXBlKSB7CiAgICAgICAgY2FzZSAic2luZ2xlSW5wdXQiOgogICAgICAgICAgZGF0YVtpbnB1dHNbaV0ubmFtZV0gPSBpbnB1dHNbaV0udmFsdWU7IGJyZWFrOwogICAgICAgIGNhc2UgImlucHV0QXJyYXkiOiAKICAgICAgICAgIHZhbHVlQXJyLnB1c2goaW5wdXRzW2ldLnZhbHVlKTsKICAgICAgICAgIGRhdGFbaW5wdXRzW2ldLm5hbWVdID0gdmFsdWVBcnI7IGJyZWFrCgogICAgICB9CiAgICAgICovCiAgICB9IGVsc2UgewogICAgICBpbnB1dHNbaV0uc3R5bGUuYm9yZGVyQm90dG9tQ29sb3IgPSAicmVkIjsKICAgICAgcmV0dXJuOwogICAgfQogIH0KCgogIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0cy5sZW5ndGg7IGkrKykgewogICAgdmFyIHZhbHVlID0gc2VsZWN0c1tpXS5vcHRpb25zW3NlbGVjdHNbaV0uc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgICBpZiAoaXNOYU4odmFsdWUpID09IGZhbHNlKSB7CiAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpOwogICAgICBkYXRhW3NlbGVjdHNbaV0ubmFtZV0gPSB2YWx1ZTsKICAgICAgbmV3RGF0YSA9IHRydWU7CiAgICAgIGJyZWFrOwogICAgfQogICAgZGF0YVtzZWxlY3RzW2ldLm5hbWVdID0gdmFsdWU7CiAgICBuZXdEYXRhID0gdHJ1ZTsKICB9CgoKICAvL2NvbnNvbGUubG9nKGRhdGEsIG5ld0RhdGEpOwogIGlmIChuZXdEYXRhID09IHRydWUpIHsKICAgIGNvbmZpZyA9IGRhdGEKICAgIGRhdGFbImNtZCJdID0gInNhdmVDb25maWciOwogICAgVGhyZWFkZmluKGRhdGEpOwogIH0KfQoKZnVuY3Rpb24gVGhyZWFkZmluKGRhdGEpIHsKCiAgaWYgKHdlYlNvY2tldHMgPT0gZmFsc2UpIHsKICAgIGFsZXJ0KCJZb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBXZWJTb2NrZXRzIik7CiAgICByZXR1cm47CiAgfQoKICBpZiAoYWN0aXZlV2l6YXJkID09ICJtM3UiIHx8IGFjdGl2ZVdpemFyZCA9PSAiZXBnU291cmNlIikgewogICAgc2hvd0xvYWRpbmdTY3JlZW4odHJ1ZSk7CiAgfQoKICB2YXIgcHJvdG9jb2xXUwogIHN3aXRjaCAod2luZG93LmxvY2F0aW9uLnByb3RvY29sKSB7CiAgICBjYXNlICJodHRwOiI6IHByb3RvY29sV1MgPSAid3M6Ly8iOyBicmVhazsKICAgIGNhc2UgImh0dHBzOiI6IHByb3RvY29sV1MgPSAid3NzOi8vIjsgYnJlYWs7CiAgfQoKICB2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHByb3RvY29sV1MgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAiOiIgKyB3aW5kb3cubG9jYXRpb24ucG9ydCArICIvZGF0YS8iICsgIj9Ub2tlbj0iICsgZ2V0Q29va2llKCJUb2tlbiIpKTsKCiAgd3Mub25vcGVuID0gZnVuY3Rpb24gKCkgewogICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgfQoKICB3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkgewoKICAgIHZhciByZXNwb25zZSA9IEpTT04ucGFyc2UoZS5kYXRhKTsKCiAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoImNsaWVudEluZm8iKSkgewogICAgICBjcmVhdGVDbGludEluZm8ocmVzcG9uc2VbImNsaWVudEluZm8iXSk7CiAgICB9CgogICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJzdGF0dXMiKSkgewogICAgICBpZiAocmVzcG9uc2VbInN0YXR1cyJdID09IGZhbHNlKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhlYWRsaW5lIikuc3R5bGUuYm9yZGVyQ29sb3IgPSAicmVkIjsKICAgICAgICBzaG93RXJyKHJlc3BvbnNlWyJlcnIiXSk7CiAgICAgICAgc2hvd0xvYWRpbmdTY3JlZW4oZmFsc2UpCiAgICAgICAgcmV0dXJuCiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVyciIpLmlubmVySFRNTCA9ICIiOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoZWFkbGluZSIpLnN0eWxlLmJvcmRlckNvbG9yID0gImxhd25ncmVlbiI7CiAgICAgIH0KCiAgICAgIGR2cklQID0gcmVzcG9uc2VbIkRWUiJdCiAgICAgIHN3aXRjaCAocmVzcG9uc2VbImNvbmZpZ3VyYXRpb25XaXphcmQiXSkgewogICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgIGlmIChhY3RpdmVXaXphcmQgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGFjdGl2ZVdpemFyZCA9IHdpemFyZFswXQogICAgICAgICAgfQogICAgICAgICAgdmFyIG4gPSB3aXphcmQuaW5kZXhPZihhY3RpdmVXaXphcmQpOwogICAgICAgICAgbisrOwogICAgICAgICAgYWN0aXZlV2l6YXJkID0gd2l6YXJkW25dCgogICAgICAgICAgaWYgKGFjdGl2ZVdpemFyZCA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgZGF0YVsiY21kIl0gPSAid2l6YXJkQ29tcGxldGVkIjsKICAgICAgICAgICAgVGhyZWFkZmluKGRhdGEpCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvL2NvbnNvbGUubG9nKGFjdGl2ZVdpemFyZCk7CiAgICAgICAgICAgIGNyZWF0ZUNvbmZpZ3VyYXRpb24oYWN0aXZlV2l6YXJkKTsKICAgICAgICAgIH0KCiAgICAgICAgICBicmVhazsKICAgICAgfQoKICAgICAgc3dpdGNoIChyZXNwb25zZVsicmVsb2FkIl0pIHsKCgogICAgICAgIGNhc2UgdHJ1ZToKCiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICB9LCAxMDApOwoKICAgICAgICAgIC8vbG9jYXRpb24ucmVsb2FkKCk7CgogICAgICAgICAgYnJlYWs7CgogICAgICB9CgoKICAgIH0KCiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2hvd0xvYWRpbmdTY3JlZW4oZmFsc2UpOyB9LCAzMDApOwogIH0KCn0KCmZ1bmN0aW9uIHNob3dFcnIoZWxtKSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVyciIpLmlubmVySFRNTCA9IGVsbTsKfQ==" + webUI["html/js/network_ts.js"] = "Y2xhc3MgU2VydmVyIHsKICAgIGNvbnN0cnVjdG9yKGNtZCkgewogICAgICAgIHRoaXMuY21kID0gY21kOwogICAgfQogICAgcmVxdWVzdChkYXRhKSB7CiAgICAgICAgaWYgKFNFUlZFUl9DT05ORUNUSU9OID09IHRydWUpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBTRVJWRVJfQ09OTkVDVElPTiA9IHRydWU7CiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CiAgICAgICAgaWYgKHRoaXMuY21kICE9ICJ1cGRhdGVMb2ciKSB7CiAgICAgICAgICAgIC8vIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgdHJ1ZSkKICAgICAgICAgICAgVU5ETyA9IG5ldyBPYmplY3QoKTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wpIHsKICAgICAgICAgICAgY2FzZSAiaHR0cDoiOgogICAgICAgICAgICAgICAgdGhpcy5wcm90b2NvbCA9ICJ3czovLyI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaHR0cHM6IjoKICAgICAgICAgICAgICAgIHRoaXMucHJvdG9jb2wgPSAid3NzOi8vIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB2YXIgdXJsID0gdGhpcy5wcm90b2NvbCArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICI6IiArIHdpbmRvdy5sb2NhdGlvbi5wb3J0ICsgIi9kYXRhLyIgKyAiP1Rva2VuPSIgKyBnZXRDb29raWUoIlRva2VuIik7CiAgICAgICAgZGF0YVsiY21kIl0gPSB0aGlzLmNtZDsKICAgICAgICB2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7CiAgICAgICAgd3Mub25vcGVuID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICBXU19BVkFJTEFCTEUgPSB0cnVlOwogICAgICAgICAgICBjb25zb2xlLmxvZygiUkVRVUVTVCAoSlMpOiIpOwogICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTsKICAgICAgICAgICAgY29uc29sZS5sb2coIlJFUVVFU1Q6IChKU09OKSIpOwogICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgICAgICAgICAgIHRoaXMuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgICAgICAgfTsKICAgICAgICB3cy5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIk5vIHdlYnNvY2tldCBjb25uZWN0aW9uIHRvIFRocmVhZGZpbiBjb3VsZCBiZSBlc3RhYmxpc2hlZC4gQ2hlY2sgeW91ciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uIik7CiAgICAgICAgICAgIFNFUlZFUl9DT05ORUNUSU9OID0gZmFsc2U7CiAgICAgICAgICAgIGlmIChXU19BVkFJTEFCTEUgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KCJObyB3ZWJzb2NrZXQgY29ubmVjdGlvbiB0byBUaHJlYWRmaW4gY291bGQgYmUgZXN0YWJsaXNoZWQuIENoZWNrIHlvdXIgbmV0d29yayBjb25maWd1cmF0aW9uLiIpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBTRVJWRVJfQ09OTkVDVElPTiA9IGZhbHNlOwogICAgICAgICAgICBzaG93RWxlbWVudCgibG9hZGluZyIsIGZhbHNlKTsKICAgICAgICAgICAgY29uc29sZS5sb2coIlJFU1BPTlNFOiIpOwogICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGUuZGF0YSk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJ0b2tlbiIpKSB7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSAiVG9rZW49IiArIHJlc3BvbnNlWyJ0b2tlbiJdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZVsic3RhdHVzIl0gPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KHJlc3BvbnNlWyJlcnIiXSk7CiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoInJlbG9hZCIpKSB7CiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJwcm9iZUluZm8iKSkgewogICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9iZURldGFpbHMiKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVsicHJvYmVJbmZvIl1bInJlc29sdXRpb24iXSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9iZURldGFpbHMiKS5pbm5lckhUTUwgPSAiPHA+UmVzb2x1dGlvbjogPHNwYW4gY2xhc3M9J3RleHQtcHJpbWFyeSc+IiArIHJlc3BvbnNlWyJwcm9iZUluZm8iXVsicmVzb2x1dGlvbiJdICsgIjwvc3Bhbj48L3A+PHA+RnJhbWUgUmF0ZTogPHNwYW4gY2xhc3M9J3RleHQtcHJpbWFyeSc+IiArIHJlc3BvbnNlWyJwcm9iZUluZm8iXVsiZnJhbWVSYXRlIl0gKyAiIEZQUzwvc3Bhbj48L3A+PHA+QXVkaW86IDxzcGFuIGNsYXNzPSd0ZXh0LXByaW1hcnknPiIgKyByZXNwb25zZVsicHJvYmVJbmZvIl1bImF1ZGlvQ2hhbm5lbCJdICsgIjwvc3Bhbj48L3A+IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJsb2dvVVJMIikpIHsKICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbm5lbC1pY29uIik7CiAgICAgICAgICAgICAgICBkaXYudmFsdWUgPSByZXNwb25zZVsibG9nb1VSTCJdOwogICAgICAgICAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICJjaGFuZ2VkIjsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBzd2l0Y2ggKGRhdGFbImNtZCJdKSB7CiAgICAgICAgICAgICAgICBjYXNlICJ1cGRhdGVMb2ciOgogICAgICAgICAgICAgICAgICAgIFNFUlZFUlsibG9nIl0gPSByZXNwb25zZVsibG9nIl07CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50X2xvZyIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dMb2dzKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwbGF5bGlzdC1jb25uZWN0aW9uLWluZm9ybWF0aW9uIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFjdGl2ZUNsYXNzID0gInRleHQtcHJpbWFyeSI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVsiY2xpZW50SW5mbyJdWyJhY3RpdmVQbGF5bGlzdCJdIC8gcmVzcG9uc2VbImNsaWVudEluZm8iXVsidG90YWxQbGF5bGlzdCJdID49IDAuNiAmJiByZXNwb25zZVsiY2xpZW50SW5mbyJdWyJhY3RpdmVQbGF5bGlzdCJdIC8gcmVzcG9uc2VbImNsaWVudEluZm8iXVsidG90YWxQbGF5bGlzdCJdIDwgMC44KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVDbGFzcyA9ICJ0ZXh0LXdhcm5pbmciOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlWyJjbGllbnRJbmZvIl1bImFjdGl2ZVBsYXlsaXN0Il0gLyByZXNwb25zZVsiY2xpZW50SW5mbyJdWyJ0b3RhbFBsYXlsaXN0Il0gPj0gMC44KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVDbGFzcyA9ICJ0ZXh0LWRhbmdlciI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBsYXlsaXN0LWNvbm5lY3Rpb24taW5mb3JtYXRpb24iKS5pbm5lckhUTUwgPSAiUGxheWxpc3QgQ29ubmVjdGlvbnM6IDxzcGFuIGNsYXNzPSciICsgYWN0aXZlQ2xhc3MgKyAiJz4iICsgcmVzcG9uc2VbImNsaWVudEluZm8iXVsiYWN0aXZlUGxheWxpc3QiXSArICIgLyAiICsgcmVzcG9uc2VbImNsaWVudEluZm8iXVsidG90YWxQbGF5bGlzdCJdICsgIjwvc3Bhbj4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNsaWVudC1jb25uZWN0aW9uLWluZm9ybWF0aW9uIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFjdGl2ZUNsYXNzID0gInRleHQtcHJpbWFyeSI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVsiY2xpZW50SW5mbyJdWyJhY3RpdmVDbGllbnRzIl0gLyByZXNwb25zZVsiY2xpZW50SW5mbyJdWyJ0b3RhbENsaWVudHMiXSA+PSAwLjYgJiYgcmVzcG9uc2VbImNsaWVudEluZm8iXVsiYWN0aXZlQ2xpZW50cyJdIC8gcmVzcG9uc2VbImNsaWVudEluZm8iXVsidG90YWxDbGllbnRzIl0gPCAwLjgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNsYXNzID0gInRleHQtd2FybmluZyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2VbImNsaWVudEluZm8iXVsiYWN0aXZlQ2xpZW50cyJdIC8gcmVzcG9uc2VbImNsaWVudEluZm8iXVsidG90YWxDbGllbnRzIl0gPj0gMC44KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVDbGFzcyA9ICJ0ZXh0LWRhbmdlciI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNsaWVudC1jb25uZWN0aW9uLWluZm9ybWF0aW9uIikuaW5uZXJIVE1MID0gIkNsaWVudCBDb25uZWN0aW9uczogPHNwYW4gY2xhc3M9JyIgKyBhY3RpdmVDbGFzcyArICInPiIgKyByZXNwb25zZVsiY2xpZW50SW5mbyJdWyJhY3RpdmVDbGllbnRzIl0gKyAiIC8gIiArIHJlc3BvbnNlWyJjbGllbnRJbmZvIl1bInRvdGFsQ2xpZW50cyJdICsgIjwvc3Bhbj4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIFNFUlZFUiA9IG5ldyBPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgICBTRVJWRVIgPSByZXNwb25zZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoIm9wZW5NZW51IikpIHsKICAgICAgICAgICAgICAgIHZhciBtZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocmVzcG9uc2VbIm9wZW5NZW51Il0pOwogICAgICAgICAgICAgICAgbWVudS5jbGljaygpOwogICAgICAgICAgICAgICAgc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgib3BlbkxpbmsiKSkgewogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gcmVzcG9uc2VbIm9wZW5MaW5rIl07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJhbGVydCIpKSB7CiAgICAgICAgICAgICAgICBhbGVydChyZXNwb25zZVsiYWxlcnQiXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJyZWxvYWQiKSkgewogICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJ3aXphcmQiKSkgewogICAgICAgICAgICAgICAgY3JlYXRlTGF5b3V0KCk7CiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uV2l6YXJkW3Jlc3BvbnNlWyJ3aXphcmQiXV0uY3JlYXRlV2l6YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3JlYXRlTGF5b3V0KCk7CiAgICAgICAgfTsKICAgIH0KfQpmdW5jdGlvbiBnZXRDb29raWUobmFtZSkgewogICAgdmFyIHZhbHVlID0gIjsgIiArIGRvY3VtZW50LmNvb2tpZTsKICAgIHZhciBwYXJ0cyA9IHZhbHVlLnNwbGl0KCI7ICIgKyBuYW1lICsgIj0iKTsKICAgIGlmIChwYXJ0cy5sZW5ndGggPT0gMikKICAgICAgICByZXR1cm4gcGFydHMucG9wKCkuc3BsaXQoIjsiKS5zaGlmdCgpOwp9Cg==" webUI["html/.DS_Store"] = "AAAAAUJ1ZDEAABgAAAAIAAAAGAAAABALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAcAAAABAAAQAHNwYmxvYgAAALpicAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEERFNEQgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAgAAAAYAAAAAAAAAABAAAAgAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAgAAAAAAAAAAAEAACAAAAAAAQAAQAAAAAABAACAAAAAAAEAAQAAAAAAAQACAAAAAAABAAQAAAAAAAEACAAAAAAAAQAQAAAAAAABACAAAAAAAAEAQAAAAAAAAQCAAAAAAAABAQAAAAAAAAECAAAAAAAAAQQAAAAAAAABCAAAAAAAAAEQAAAAAAAAASAAAAAAAAABQAAAAAAAAABlXGRhdGVNb2RpZmllZFRraW5kVG5hbWVeZGF0ZUxhc3RPcGVuZWTUFhcYGRobCh1XdmlzaWJsZVV3aWR0aFlhc2NlbmRpbmdVaW5kZXgIEQEsCRAH1BYXGBkaIAoiCBBkCRAF1BYXGBkaJQonCBBLCRAG1BYXGBkaKhosCBC1CBAC1BYXGBkKLxoxCRBhCBAD1BYXGBkKKho1CQgQAdQWFxgZCjgKOgkQcwkQBNQWFxgZCj0KPwkQpwkQANQWFxgZGkIaRAgQyAgQCAgjQCoAAAAAAABUbmFtZQkjQDAAAAAAAAAACAAZAC4AQABIAFwAZQBwAIMAjACdAJ4AsQC6AMAAyADUANkA5gDrAPAA/wEIARABFgEgASYBJwEqASsBLQE2ATcBOQE6ATwBRQFGAUgBSQFLAVQBVQFXAVgBWgFjAWQBZgFnAWkBcgFzAXQBdgF/AYABggGDAYUBjgGPAZEBkgGUAZ0BngGgAaEBowGkAa0BsgGzAAAAAAAAAgEAAAAAAAAASgAAAAAAAAAAAAAAAAAAAbwAAAADAGkAbQBndlNybmxvbmcAAAABAAAABQB2AGkAZABlAG9kc2NsYm9vbAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" - webUI["html/js/authentication_ts.js"] = "ZnVuY3Rpb24gbG9naW4oKSB7CiAgICB2YXIgZXJyID0gZmFsc2U7CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpOwogICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXV0aGVudGljYXRpb24iKTsKICAgIHZhciBpbnB1dHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIik7CiAgICBjb25zb2xlLmxvZyhpbnB1dHMpOwogICAgZm9yICh2YXIgaSA9IGlucHV0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIHZhciBrZXkgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICB2YXIgdmFsdWUgPSBpbnB1dHNbaV0udmFsdWU7CiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgIGlucHV0c1tpXS5zdHlsZS5ib3JkZXJDb2xvciA9ICJyZWQiOwogICAgICAgICAgICBlcnIgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIGlmIChlcnIgPT0gdHJ1ZSkgewogICAgICAgIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoImNvbmZpcm0iKSkgewogICAgICAgIGlmIChkYXRhWyJjb25maXJtIl0gIT0gZGF0YVsicGFzc3dvcmQiXSkgewogICAgICAgICAgICBhbGVydCgic2RhZnNkIik7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXNzd29yZCcpLnN0eWxlLmJvcmRlckNvbG9yID0gInJlZCI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtJykuc3R5bGUuYm9yZGVyQ29sb3IgPSAicmVkIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVyciIpLmlubmVySFRNTCA9ICJ7ey5hY2NvdW50LmZhaWxlZH19IjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGNvbnNvbGUubG9nKGRhdGEpOwogICAgZm9ybS5zdWJtaXQoKTsKfQo=" - webUI["html/js/data.js"] = "ZnVuY3Rpb24gc2hvd0NvbmZpZyhvYmopIHsKICBjb25maWcgPSBvYmo7CiAgLy9zZXRNZW51SXRlbSgpOwogIGNyZWF0ZU1lbnUoKTsKICAvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYWdlIikuY2xhc3NOYW1lID0gIiI7Cn0KCnNob3dNeVN0cmVhbXMKCmZ1bmN0aW9uIHNob3dNeVN0cmVhbXMoYWxsU3RyZWFtc09iaikgewoKICB2YXIgc3RyZWFtVHlwZUtleXMgPSBnZXRPYmpLZXlzKGFsbFN0cmVhbXNPYmopCgogIGZvciAodmFyIHMgPSAwOyBzIDwgc3RyZWFtVHlwZUtleXMubGVuZ3RoOyBzKyspIHsKICAgIHZhciBzdHJlYW1UeXBlID0gc3RyZWFtVHlwZUtleXNbc107CiAgICB2YXIgb2JqID0gbmV3IE9iamVjdCgpOwogICAgb2JqID0gYWxsU3RyZWFtc09ialtzdHJlYW1UeXBlXTsKICAgIHN3aXRjaCAoc3RyZWFtVHlwZSkgewogICAgICBjYXNlICJhY3RpdmVTdHJlYW1zIjogYWN0aXZlU3RyZWFtcyA9IG9iajsgYnJlYWs7CiAgICB9CgogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3RyZWFtVHlwZSkuaW5uZXJIVE1MID0gIiI7CgogICAgdmFyIHN0cmVhbXNPYmogPSBuZXcgT2JqZWN0KCk7CiAgICB2YXIgc3RyZWFtc05hbWVzID0gbmV3IEFycmF5KCk7CgogICAgdmFyIGtleXMgPSBnZXRPYmpLZXlzKG9iaikKCiAgICAvLyBDcmVhdGUgT2JqZWN0IChzdHJlYW1zT2JqKSBmb3IgdGhlIHN0cmVhbXMgYW5kIHNvcnQgYnkgbmFtZSAoc3RyZWFtc05hbWVzKQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBuYW1lID0gb2JqW2tleXNbaV1dWyJuYW1lIl07CiAgICAgIHZhciB0bXAgPSBuZXcgT2JqZWN0KCk7CiAgICAgIHZhciBzdHJlYW1LZXkgPSBnZXRPYmpLZXlzKG9ialtrZXlzW2ldXSk7CgogICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN0cmVhbUtleS5sZW5ndGg7IGorKykgewogICAgICAgIHRtcFtzdHJlYW1LZXlbal1dID0gb2JqW2tleXNbaV1dW3N0cmVhbUtleVtqXV07CiAgICAgIH0KCiAgICAgIHN0cmVhbXNPYmpbbmFtZV0gPSB0bXA7CiAgICAgIHN0cmVhbXNOYW1lcy5wdXNoKG5hbWUpCiAgICB9CgogICAgc3RyZWFtc05hbWVzLnNvcnQoKTsKCiAgICAvLyBDcmVhdGUgVGFibGUgZm9yIGFjdGl2ZVN0cmVhbXMKICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN0cmVhbVR5cGUpOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyZWFtc05hbWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICAgICAgbmV3RW50cnlbIl9lbGVtZW50Il0gPSAiVFIiOwogICAgICB0YWJsZS5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld0VudHJ5KSk7CiAgICAgIHZhciBsaW5lID0gdGFibGUubGFzdENoaWxkOwoKICAgICAgdmFyIHRtcCA9IHN0cmVhbXNPYmpbc3RyZWFtc05hbWVzW2ldXQogICAgICB2YXIga2V5cyA9IGdldE9iaktleXModG1wKQoKICAgICAgdmFyIG5ld0tleSA9IG5ldyBPYmplY3QoKQogICAgICBuZXdLZXlbIl9lbGVtZW50Il0gPSAiVEQiOwogICAgICAvL25ld0tleVsiX3RleHQiXSAgICAgPSBzdHJlYW1zTmFtZXNbaV07CiAgICAgIHN3aXRjaCAoc3RyZWFtVHlwZSkgewogICAgICAgIGNhc2UgImFjdGl2ZVN0cmVhbXMiOiBuZXdLZXlbIl90ZXh0Il0gPSAiQ2hhbm5lbCAoKyk6IjsgYnJlYWs7CiAgICAgICAgY2FzZSAiaW5hY3RpdmVTdHJlYW1zIjogbmV3S2V5WyJfdGV4dCJdID0gIkNoYW5uZWwgKC0pOiI7IGJyZWFrOwogICAgICB9CgogICAgICBuZXdLZXlbImNsYXNzIl0gPSAidGRLZXkiOwogICAgICBjb25zb2xlLmxvZygpOwoKCiAgICAgIHZhciBuZXdWYWwgPSBuZXcgT2JqZWN0KCkKICAgICAgbmV3VmFsWyJfZWxlbWVudCJdID0gIlREIjsKICAgICAgbmV3VmFsWyJfdGV4dCJdID0gc3RyZWFtc05hbWVzW2ldOwogICAgICBuZXdWYWxbImNsYXNzIl0gPSAidGRWYWwiOwogICAgICAvL25ld1ZhbFsiX3RleHQiXSAgICAgPSB2YWx1ZTsKCiAgICAgIGxpbmUuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdLZXkpKTsKICAgICAgbGluZS5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld1ZhbCkpOwoKICAgIH0KCiAgfQoKICByZXR1cm4KfQoKZnVuY3Rpb24gc2hvd0FjdGl2ZVN0cmVhbXMob2JqKSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZVN0cmVhbXMiKS5pbm5lckhUTUwgPSAiIjsKICBhY3RpdmVTdHJlYW1zID0gb2JqOwogIHZhciBzdHJlYW1zT2JqID0gbmV3IE9iamVjdCgpOwogIHZhciBzdHJlYW1zTmFtZXMgPSBuZXcgQXJyYXkoKTsKCiAgdmFyIGtleXMgPSBnZXRPYmpLZXlzKG9iaikKCiAgLy8gQ3JlYXRlIE9iamVjdCAoc3RyZWFtc09iaikgZm9yIHRoZSBzdHJlYW1zIGFuZCBzb3J0IGJ5IG5hbWUgKHN0cmVhbXNOYW1lcykKICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBuYW1lID0gb2JqW2tleXNbaV1dWyJuYW1lIl07CiAgICB2YXIgdG1wID0gbmV3IE9iamVjdCgpOwogICAgdmFyIHN0cmVhbUtleSA9IGdldE9iaktleXMob2JqW2tleXNbaV1dKTsKCiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN0cmVhbUtleS5sZW5ndGg7IGorKykgewogICAgICB0bXBbc3RyZWFtS2V5W2pdXSA9IG9ialtrZXlzW2ldXVtzdHJlYW1LZXlbal1dOwogICAgfQoKICAgIHN0cmVhbXNPYmpbbmFtZV0gPSB0bXA7CiAgICBzdHJlYW1zTmFtZXMucHVzaChuYW1lKQogIH0KCiAgc3RyZWFtc05hbWVzLnNvcnQoKTsKCiAgLy8gQ3JlYXRlIFRhYmxlIGZvciBhY3RpdmVTdHJlYW1zCiAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZVN0cmVhbXMiKTsKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJlYW1zTmFtZXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICAgIG5ld0VudHJ5WyJfZWxlbWVudCJdID0gIlRSIjsKICAgIHRhYmxlLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKICAgIHZhciBsaW5lID0gdGFibGUubGFzdENoaWxkOwoKICAgIHZhciB0bXAgPSBzdHJlYW1zT2JqW3N0cmVhbXNOYW1lc1tpXV0KICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyh0bXApCgogICAgdmFyIG5ld0tleSA9IG5ldyBPYmplY3QoKQogICAgbmV3S2V5WyJfZWxlbWVudCJdID0gIlREIjsKICAgIC8vbmV3S2V5WyJfdGV4dCJdICAgICA9IHN0cmVhbXNOYW1lc1tpXTsKICAgIG5ld0tleVsiX3RleHQiXSA9ICJDaGFubmVsOiI7CiAgICBuZXdLZXlbImNsYXNzIl0gPSAidGRLZXkiOwogICAgY29uc29sZS5sb2coKTsKCgogICAgdmFyIG5ld1ZhbCA9IG5ldyBPYmplY3QoKQogICAgbmV3VmFsWyJfZWxlbWVudCJdID0gIlREIjsKICAgIG5ld1ZhbFsiX3RleHQiXSA9IHN0cmVhbXNOYW1lc1tpXTsKICAgIG5ld1ZhbFsiY2xhc3MiXSA9ICJ0ZFZhbCI7CiAgICAvL25ld1ZhbFsiX3RleHQiXSAgICAgPSB2YWx1ZTsKCiAgICBsaW5lLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3S2V5KSk7CiAgICBsaW5lLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3VmFsKSk7CgogIH0KCn0KCmZ1bmN0aW9uIHBhcnNlTG9ncyhvYmopIHsKICBsb2cgPSBvYmoKICB2YXIga2V5cyA9IGdldE9iaktleXMob2JqKQoKICB2YXIgbXNnVHlwZTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgIHN3aXRjaCAoa2V5c1tpXSkgewogICAgICBjYXNlICJ3YXJuaW5ncyI6IG1zZ1R5cGUgPSAid2FybmluZ01zZyI7IGJyZWFrOwogICAgICBjYXNlICJlcnJvcnMiOiBtc2dUeXBlID0gImVycm9yTXNnIjsgYnJlYWs7CiAgICB9CgogICAgc3dpdGNoIChvYmpba2V5c1tpXV0pIHsKICAgICAgY2FzZSAwOiBtc2dUeXBlID0gInRkVmFsIjsgYnJlYWs7CiAgICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgfQoKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrZXlzW2ldKSkgewogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrZXlzW2ldKS5jbGFzc05hbWUgPSBtc2dUeXBlOwogICAgfQoKCiAgfQogIHJldHVybgp9CgoKZnVuY3Rpb24gY2FuY2VsRGF0YShlbGVtZW50KSB7CiAgY3JlYXRlTWVudSgpOwp9CgpmdW5jdGlvbiBzYXZlRGF0YShlbGVtZW50KSB7CiAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgdmFyIGRpdiA9IGVsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlOwogIHZhciBpbnB1dHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIik7CgogIHZhciBjb25maWdLZXkgPSBkaXYuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpZ2tleSIpOwogIHZhciBtZW51VHlwZSA9IGRpdi5nZXRBdHRyaWJ1dGUoImRhdGEtbWVudXR5cGUiKTsKICB2YXIgdmFsdWU7CiAgdmFyIHZhbHVlQXJyID0gbmV3IEFycmF5KCk7CgogIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICBpZiAoaW5wdXRzW2ldLnR5cGUgPT0gInRleHQiICYmIGlucHV0c1tpXS52YWx1ZSAhPSB1bmRlZmluZWQgJiYgaW5wdXRzW2ldLnZhbHVlICE9ICIiKSB7CiAgICAgIGNvbnNvbGUubG9nKGlucHV0c1tpXS52YWx1ZSwgbWVudVR5cGUpCiAgICAgIHN3aXRjaCAobWVudVR5cGUpIHsKICAgICAgICBjYXNlICJpbnB1dEFycmF5IjogdmFsdWVBcnIucHVzaChpbnB1dHNbaV0udmFsdWUpOyBicmVhazsKICAgICAgICBjYXNlICJzaW5nbGVJbnB1dCI6IHZhbHVlID0gaW5wdXRzW2ldLnZhbHVlOyBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgc3dpdGNoIChtZW51VHlwZSkgewogICAgY2FzZSAiaW5wdXRBcnJheSI6IGRhdGFbY29uZmlnS2V5XSA9IHZhbHVlQXJyOyBicmVhazsKICAgIGNhc2UgInNpbmdsZUlucHV0IjoKICAgICAgaWYgKGlzTmFOKHZhbHVlKSA9PSBmYWxzZSkgewogICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpOwogICAgICAgIGRhdGFbY29uZmlnS2V5XSA9IHZhbHVlOwogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgZGF0YVsiZGVsZXRlIl0gPSBjb25maWdLZXk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGF0YVtjb25maWdLZXldID0gdmFsdWUKICAgICAgfQoKICAgICAgYnJlYWs7CiAgfQoKICBkYXRhWyJjbWQiXSA9ICJzYXZlQ29uZmlnIjsKICBjb25zb2xlLmxvZyhkYXRhKTsKICBUaHJlYWRmaW4oZGF0YSkKfQoKZnVuY3Rpb24gVGhyZWFkZmluKGRhdGEpIHsKICBpZiAod2ViU29ja2V0cyA9PSBmYWxzZSkgewogICAgYWxlcnQoIllvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFdlYlNvY2tldHMiKTsKICAgIHJldHVybjsKICB9IGVsc2UgewogICAgaWYgKGRhdGFbImNtZCJdICE9ICJnZXRMb2ciKSB7CiAgICAgIHNob3dMb2FkaW5nU2NyZWVuKHRydWUpCiAgICB9CiAgfQogIGRlbGV0ZSB1bmRvWyJlcGdNYXBwaW5nIl07CgogIHZhciBwcm90b2NvbFdTCiAgc3dpdGNoICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wpIHsKICAgIGNhc2UgImh0dHA6IjogcHJvdG9jb2xXUyA9ICJ3czovLyI7IGJyZWFrOwogICAgY2FzZSAiaHR0cHM6IjogcHJvdG9jb2xXUyA9ICJ3c3M6Ly8iOyBicmVhazsKICB9CgoKICB2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHByb3RvY29sV1MgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAiOiIgKyB3aW5kb3cubG9jYXRpb24ucG9ydCArICIvZGF0YS8iICsgIj9Ub2tlbj0iICsgZ2V0Q29va2llKCJUb2tlbiIpKTsKICB3cy5vbm9wZW4gPSBmdW5jdGlvbiAoKSB7CiAgICBjb25zb2xlLmxvZyhkYXRhKQogICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgfQoKICB3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkgewogICAgdmFyIHJlc3BvbnNlID0gSlNPTi5wYXJzZShlLmRhdGEpOwogICAgY29uc29sZS5sb2cocmVzcG9uc2UpOwoKICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgiY2xpZW50SW5mbyIpKSB7CiAgICAgIGNyZWF0ZUNsaW50SW5mbyhyZXNwb25zZVsiY2xpZW50SW5mbyJdKTsKICAgIH0KCiAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoImxvZyIpKSB7CiAgICAgIGNyZWF0ZUNsaW50SW5mbyhyZXNwb25zZVsibG9nIl0pOwogICAgfQoKICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgic3RhdHVzIikpIHsKICAgICAgaWYgKHJlc3BvbnNlWyJzdGF0dXMiXSA9PSBmYWxzZSkgewogICAgICAgIGFsZXJ0KHJlc3BvbnNlWyJlcnIiXSkKICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoInJlbG9hZCIpKSB7CiAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICB9CiAgICAgICAgLy9jaGVja0VycihyZXNwb25zZSkKICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgdXBkYXRlVGhyZWFkZmluU3RhdHVzKHJlc3BvbnNlKTsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2hvd0xvYWRpbmdTY3JlZW4oZmFsc2UpOyB9LCAzMDApOwoKICAgICAgICByZXR1cm4KICAgICAgfQoKICAgICAgdXBkYXRlVGhyZWFkZmluU3RhdHVzKHJlc3BvbnNlKQoKICAgICAgLy9jb25zb2xlLmxvZyhkYXRhWyJjbWQiXSk7CiAgICAgIHN3aXRjaCAoZGF0YVsiY21kIl0pIHsKICAgICAgICBjYXNlICJzYXZlVXNlckRhdGEiOiBjcmVhdGVNZW51KCk7IGJyZWFrOwogICAgICAgIGNhc2UgInNhdmVOZXdVc2VyIjogY3JlYXRlTWVudSgpOyBicmVhazsKICAgICAgICBjYXNlICJzYXZlRmlsZXNYTUxUViI6ICAvL2NyZWF0ZU1lbnUoKTsgYnJlYWs7CiAgICAgICAgY2FzZSAic2F2ZUZpbGVzTTNVIjogICAgLy9jcmVhdGVNZW51KCk7IHJldHVybjsgYnJlYWs7CiAgICAgICAgY2FzZSAic2F2ZUNvbmZpZyI6CiAgICAgICAgICBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgICAgICAgZGF0YVsiY21kIl0gPSAiY2hlY2tUb2tlbiI7CiAgICAgICAgICBUaHJlYWRmaW4oZGF0YSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAiZW1wdHlMb2ciOiB3cml0ZUxvZ0luRGl2KCk7IGJyZWFrOwogICAgICAgIGNhc2UgImdldExvZyI6IHJldHVybjsgYnJlYWs7CiAgICAgIH0KCgogICAgfQoKICAgIGlmIChjb25maWdbImZpbGVzIl0gPT0gdW5kZWZpbmVkIHx8IGNvbmZpZ1siZmlsZXMiXS5sZW5ndGggPT0gMCkgewogICAgICBjcmVhdGVNZW51KCk7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKDEwKS5jbGljaygpCiAgICB9CgogICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHNob3dMb2FkaW5nU2NyZWVuKGZhbHNlKTsgfSwgMCk7CiAgfQoKfQoKZnVuY3Rpb24gdXBkYXRlVGhyZWFkZmluU3RhdHVzKHJlc3BvbnNlKSB7CiAgdmFyIGtleXMgPSBnZXRPYmpLZXlzKHJlc3BvbnNlKTsKICAvL2NvbnNvbGUubG9nKGtleXMpOwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgIHN3aXRjaCAoa2V5c1tpXSkgewogICAgICBjYXNlICJhbGVydCI6IGFsZXJ0KHJlc3BvbnNlW2tleXNbaV1dKTsgYnJlYWs7CiAgICAgIGNhc2UgImNvbmZpZyI6IHNob3dDb25maWcocmVzcG9uc2Vba2V5c1tpXV0pOyBicmVhazsKICAgICAgY2FzZSAibG9nIjogcGFyc2VMb2dzKHJlc3BvbnNlW2tleXNbaV1dKTsgYnJlYWs7CiAgICAgIGNhc2UgIm15U3RyZWFtcyI6IHNob3dNeVN0cmVhbXMocmVzcG9uc2Vba2V5c1tpXV0pOyBicmVhazsKICAgICAgY2FzZSAieEVQRyI6IHhFUEcgPSByZXNwb25zZVtrZXlzW2ldXTsgYnJlYWs7CiAgICAgIGNhc2UgInVzZXJzIjogdXNlcnMgPSByZXNwb25zZVtrZXlzW2ldXTsgYnJlYWs7CiAgICAgIGNhc2UgInRva2VuIjogZG9jdW1lbnQuY29va2llID0gIlRva2VuPSIgKyByZXNwb25zZVtrZXlzW2ldXTsgYnJlYWs7CiAgICAgIGNhc2UgInJlbG9hZCI6IGxvY2F0aW9uLnJlbG9hZCgpOyBicmVhazsKICAgICAgY2FzZSAib3BlbkxpbmsiOiB3aW5kb3cubG9jYXRpb24gPSByZXNwb25zZVsib3BlbkxpbmsiXTsgYnJlYWs7CiAgICAgIC8vY2FzZSAidmVyc2lvbiI6IHZlcnNpb24gPSByZXNwb25zZVtrZXlzW2ldXTsgYnJlYWs7CiAgICB9CiAgfQp9CgpmdW5jdGlvbiBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoeFhtbHR2RmlsZSwgZmlsZVR5cGUsIGtleSkgewoKICB2YXIgZmlsZUlEID0geFhtbHR2RmlsZS5zdWJzdHJpbmcoMCwgeFhtbHR2RmlsZS5sYXN0SW5kZXhPZignLicpKQoKICBpZiAoY29uZmlnWyJmaWxlcyJdW2ZpbGVUeXBlXS5oYXNPd25Qcm9wZXJ0eShmaWxlSUQpID09IHRydWUpIHsKICAgIHZhciBkYXRhID0gY29uZmlnWyJmaWxlcyJdW2ZpbGVUeXBlXVtmaWxlSURdOwogICAgcmV0dXJuIGRhdGFba2V5XQogIH0KCn0KCgoKCg==" - webUI["html/js/users.js"] = "ZnVuY3Rpb24gb3BlblVzZXJzKGVsbSkgewogIGNvbG9tblNvcnQgPSAwOwoKICB2YXIgbmV3RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNldHRpbmdzIik7CgogIHZhciBuZXdFbnRyeSA9IG5ldyBPYmplY3QoKTsKICBuZXdFbnRyeVsiX2VsZW1lbnQiXSA9ICJIUiI7CiAgbmV3RGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKCiAgdmFyIG5ld0VudHJ5ID0gbmV3IE9iamVjdCgpOwogIG5ld0VudHJ5WyJfZWxlbWVudCJdID0gIklOUFVUIjsKICBuZXdFbnRyeVsidHlwZSJdID0gImJ1dHRvbiI7CiAgbmV3RW50cnlbImNsYXNzIl0gPSAiYnV0dG9uIjsKICBuZXdFbnRyeVsidmFsdWUiXSA9ICJOZXciOwogIG5ld0VudHJ5WyJvbmNsaWNrIl0gPSAidXNlckRldGFpbCgwKSI7CiAgbmV3RGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3RW50cnkpKTsKCiAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZXR0aW5ncyIpOwoKICAvLyBCdWlsZCB0YWJsZQogIHZhciBuZXdUYWJsZSA9IG5ldyBPYmplY3QoKTsKICBuZXdUYWJsZVsiX2VsZW1lbnQiXSA9ICJUQUJMRSI7CiAgbmV3VGFibGVbImlkIl0gPSAiaWRfbWFwcGluZyI7CiAgbmV3VGFibGVbImNsYXNzIl0gPSAidGFibGUtbWFwcGluZyI7CiAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3VGFibGUpKTsKCiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICBjcmVhdGVVc2Vyc1RhYmxlKCk7CiAgfSwgMTApOwp9CgpmdW5jdGlvbiBjcmVhdGVVc2Vyc1RhYmxlKCkgewogIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZF9tYXBwaW5nIik7CiAgdGFibGUuaW5uZXJIVE1MID0gIiI7CiAgdmFyIG5ld1RSID0gbmV3IE9iamVjdCgpOwogIG5ld1RSWyJfZWxlbWVudCJdID0gIlRSIjsKICBuZXdUUlsiY2xhc3MiXSA9ICJ0YWJsZS1tYXBwaW5nLWhlYWRlciI7CiAgdGFibGUuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChuZXdUUikpOwoKICB2YXIgdHIgPSB0YWJsZS5sYXN0Q2hpbGQ7CiAgdmFyIHRySGVhZGxpbmVzID0gbmV3IEFycmF5KCJVc2VybmFtZSIsICJQYXNzd29yZCIsICJXRUIiLCAiUE1TIiwgIk0zVSIsICJYTUwiLCAiQVBJIikKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ckhlYWRsaW5lcy5sZW5ndGg7IGkrKykgewogICAgdmFyIG5ld1REID0gbmV3IE9iamVjdCgpOwogICAgbmV3VERbIl9lbGVtZW50Il0gPSAiVEQiOwogICAgbmV3VERbIl90ZXh0Il0gPSB0ckhlYWRsaW5lc1tpXTsKICAgIHRyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3VEQpKTsKICB9CgoKICAvLyBTb3J0IHVzZXJzCiAgdmFyIHVzZXJJZHMgPSBnZXRPYmpLZXlzKHVzZXJzKTsKCiAgdmFyIHVzZXJPYmogPSBuZXcgT2JqZWN0KCk7CgogIGZvciAodmFyIGkgPSAwOyBpIDwgdXNlcklkcy5sZW5ndGg7IGkrKykgewogICAgdmFyIHVzZXJuYW1lID0gdXNlcnNbdXNlcklkc1tpXV1bImRhdGEiXVsidXNlcm5hbWUiXTsKICAgIHVzZXJPYmpbdXNlcm5hbWVdID0gdXNlcklkc1tpXTsKICB9CgogIHZhciBhbGxVc2VycyA9IGdldE9iaktleXModXNlck9iaik7CiAgYWxsVXNlcnMuc29ydCgpOwogIC8vIC0tCgogIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsVXNlcnMubGVuZ3RoOyBpKyspIHsKICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZF9tYXBwaW5nIik7CiAgICB2YXIgdXNlcklEID0gdXNlck9ialthbGxVc2Vyc1tpXV07CiAgICB2YXIgdXNlcm5hbWUgPSBhbGxVc2Vyc1tpXTsKICAgIHZhciBpdGVtID0gdXNlcnNbdXNlcklEXVsiZGF0YSJdOwoKICAgIC8vIENyZWF0ZSBUUgogICAgdmFyIG5ld1RSID0gbmV3IE9iamVjdCgpOwogICAgbmV3VFJbIl9lbGVtZW50Il0gPSAiVFIiOwogICAgbmV3VFJbImNsYXNzIl0gPSAiIjsKICAgIG5ld1RSWyJpZCJdID0gdXNlcklEOwogICAgbmV3VFJbIm9uY2xpY2siXSA9ICdqYXZhc2NyaXB0OiB1c2VyRGV0YWlsKCInICsgdXNlcklEICsgJyIpOyc7CiAgICB0YWJsZS5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KG5ld1RSKSk7CgogICAgdmFyIHRyID0gdGFibGUubGFzdENoaWxkOwoKICAgIC8vIENyZWF0ZSB1c2VybmFtZSBURAogICAgdmFyIG5ld1REID0gbmV3IE9iamVjdCgpOwogICAgbmV3VERbIl9lbGVtZW50Il0gPSAiUCI7CiAgICBuZXdURFsiX3RleHQiXSA9IHVzZXJuYW1lOwogICAgY3JlYXRlTmV3VEQobmV3VEQsIHRyKTsKCiAgICAvLyBDcmVhdGUgcGFzc3dvcmQgVEQKICAgIHZhciBuZXdURCA9IG5ldyBPYmplY3QoKTsKICAgIG5ld1REWyJfZWxlbWVudCJdID0gIlAiOwogICAgbmV3VERbIl90ZXh0Il0gPSAiLi4uLi4iOwogICAgY3JlYXRlTmV3VEQobmV3VEQsIHRyKTsKCiAgICAvLyBDcmVhdGUgd2ViIGFjY2VzcwogICAgdmFyIG5ld1REID0gbmV3IE9iamVjdCgpOwogICAgbmV3VERbIl9lbGVtZW50Il0gPSAiUCI7CiAgICBzd2l0Y2ggKGl0ZW1bImF1dGhlbnRpY2F0aW9uLndlYiJdKSB7CiAgICAgIGNhc2UgdHJ1ZTogbmV3VERbIl90ZXh0Il0gPSAi4pyTIjsgYnJlYWs7CiAgICAgIGRlZmF1bHQ6IG5ld1REWyJfdGV4dCJdID0gIi0iOyBicmVhazsKICAgIH0KICAgIGNyZWF0ZU5ld1REKG5ld1RELCB0cik7CgogICAgLy8gQ3JlYXRlIFBNUyBhY2Nlc3MKICAgIHZhciBuZXdURCA9IG5ldyBPYmplY3QoKTsKICAgIG5ld1REWyJfZWxlbWVudCJdID0gIlAiOwogICAgc3dpdGNoIChpdGVtWyJhdXRoZW50aWNhdGlvbi5wbXMiXSkgewogICAgICBjYXNlIHRydWU6IG5ld1REWyJfdGV4dCJdID0gIuKckyI7IGJyZWFrOwogICAgICBkZWZhdWx0OiBuZXdURFsiX3RleHQiXSA9ICItIjsgYnJlYWs7CiAgICB9CiAgICBjcmVhdGVOZXdURChuZXdURCwgdHIpOwoKICAgIC8vIENyZWF0ZSBNM1UgYWNjZXNzCiAgICB2YXIgbmV3VEQgPSBuZXcgT2JqZWN0KCk7CiAgICBuZXdURFsiX2VsZW1lbnQiXSA9ICJQIjsKICAgIHN3aXRjaCAoaXRlbVsiYXV0aGVudGljYXRpb24ubTN1Il0pIHsKICAgICAgY2FzZSB0cnVlOiBuZXdURFsiX3RleHQiXSA9ICLinJMiOyBicmVhazsKICAgICAgZGVmYXVsdDogbmV3VERbIl90ZXh0Il0gPSAiLSI7IGJyZWFrOwogICAgfQogICAgY3JlYXRlTmV3VEQobmV3VEQsIHRyKTsKCiAgICAvLyBDcmVhdGUgWE1MVFYgYWNjZXNzCiAgICB2YXIgbmV3VEQgPSBuZXcgT2JqZWN0KCk7CiAgICBuZXdURFsiX2VsZW1lbnQiXSA9ICJQIjsKICAgIHN3aXRjaCAoaXRlbVsiYXV0aGVudGljYXRpb24ueG1sIl0pIHsKICAgICAgY2FzZSB0cnVlOiBuZXdURFsiX3RleHQiXSA9ICLinJMiOyBicmVhazsKICAgICAgZGVmYXVsdDogbmV3VERbIl90ZXh0Il0gPSAiLSI7IGJyZWFrOwogICAgfQogICAgY3JlYXRlTmV3VEQobmV3VEQsIHRyKTsKCiAgICAvLyBDcmVhdGUgQVBJIGFjY2VzcwogICAgdmFyIG5ld1REID0gbmV3IE9iamVjdCgpOwogICAgbmV3VERbIl9lbGVtZW50Il0gPSAiUCI7CgogICAgc3dpdGNoIChpdGVtWyJhdXRoZW50aWNhdGlvbi5hcGkiXSkgewogICAgICBjYXNlIHRydWU6IG5ld1REWyJfdGV4dCJdID0gIuKckyI7IGJyZWFrOwogICAgICBkZWZhdWx0OiBuZXdURFsiX3RleHQiXSA9ICItIjsgYnJlYWs7CiAgICB9CiAgICBjcmVhdGVOZXdURChuZXdURCwgdHIpOwoKICB9CgogIC8vIHVzYWdlIEluZm8gIAogIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2V0dGluZ3MiKTsKICBzd2l0Y2ggKG1lbnVbYWN0aXZlTWVudS5pZF0uaGFzT3duUHJvcGVydHkoIl91c2FnZSIpKSB7CiAgICBjYXNlIHRydWU6CiAgICAgIHZhciB1c2FnZUl0ZW0gPSBuZXcgT2JqZWN0KCk7CiAgICAgIHVzYWdlSXRlbVsiX2VsZW1lbnQiXSA9ICJQUkUiCiAgICAgIHVzYWdlSXRlbVsiX3RleHQiXSA9IG1lbnVbYWN0aXZlTWVudS5pZF1bIl91c2FnZSJdOwoKICAgICAgdmFyIG5ld0hSID0gbmV3IE9iamVjdCgpOwogICAgICBuZXdIUlsiX2VsZW1lbnQiXSA9ICJIUiIKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQobmV3SFIpKTsKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQodXNhZ2VJdGVtKSk7CiAgfQoKICBzb3J0VGFibGUoMCk7Cn0KCmZ1bmN0aW9uIHVzZXJEZXRhaWwodXNlcklEKSB7CiAgc2hvd1BvcFVwRWxlbWVudCgndXNlci1kZXRhaWwnKTsKICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgIHNob3dFbGVtZW50KCJwb3B1cCIsIHRydWUpOwogIH0sIDEwKTsKICB2YXIgZGVmYXVsdFVzZXI7CgogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzYXZlVXNlckRldGFpbCIpLnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzYXZlVXNlckRldGFpbCgiJyArIHVzZXJJRCArICciLCBmYWxzZSknKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGVsZXRlVXNlckRldGFpbCIpLnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzYXZlVXNlckRldGFpbCgiJyArIHVzZXJJRCArICciLCB0cnVlKScpOwoKICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKCiAgc3dpdGNoICh1c2VySUQpIHsKICAgIGNhc2UgMDogICAvLyBOZXcgVXNlcgogICAgICBkYXRhWyJ1c2VybmFtZSJdID0gIiI7CiAgICAgIGRhdGFbImF1dGhlbnRpY2F0aW9uLndlYiJdID0gZmFsc2U7CiAgICAgIGRhdGFbImF1dGhlbnRpY2F0aW9uLnBtcyJdID0gdHJ1ZTsKICAgICAgZGF0YVsiYXV0aGVudGljYXRpb24ueG1sIl0gPSB0cnVlOwogICAgICBkYXRhWyJhdXRoZW50aWNhdGlvbi5tM3UiXSA9IGZhbHNlOwogICAgICBkYXRhWyJhdXRoZW50aWNhdGlvbi5hcGkiXSA9IGZhbHNlOwogICAgICBkYXRhWyJkZWZhdWx0VXNlciJdID0gZmFsc2U7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIHNob3dFbGVtZW50KCJkZWxldGVVc2VyRGV0YWlsIiwgZmFsc2UpCiAgICAgIH0sIDEpOwoKICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgZGF0YSA9IHVzZXJzW3VzZXJJRF1bImRhdGEiXTsKICAgICAgc2hvd0VsZW1lbnQoImRlbGV0ZVVzZXJEZXRhaWwiLCB0cnVlKQogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGVsZXRlVXNlckRldGFpbCIpLmNsYXNzTmFtZSA9ICJkZWxldGUiOwoKICAgICAgYnJlYWsKICB9CgoKICB2YXIgdXNlcm5hbWUgPSBkYXRhWyJ1c2VybmFtZSJdOwogIGRhdGFbInBhc3N3b3JkIl0gPSAiIjsKICBkYXRhWyJjb25maXJtIl0gPSAiIjsKCiAgdmFyIGtleXMgPSBnZXRPYmpLZXlzKGRhdGEpOwogIGRlZmF1bHRVc2VyID0gZGF0YVsiZGVmYXVsdFVzZXIiXTsKICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFVzZXIiKSkgewogICAgZGVmYXVsdFVzZXIgPSBKU09OLnBhcnNlKGRhdGFbImRlZmF1bHRVc2VyIl0pOwogIH0KCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CgogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGtleXNbaV0pKSB7CiAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGtleXNbaV0pCiAgICB9IGVsc2UgewogICAgICB2YXIgdGQgPSB1bmRlZmluZWQ7CiAgICB9CgogICAgdmFyIG5ld0l0ZW0gPSBuZXcgT2JqZWN0KCk7CgogICAgbmV3SXRlbVsiX2VsZW1lbnQiXSA9ICJJTlBVVCI7CgogICAgbmV3SXRlbVsidmFsdWUiXSA9IGRhdGFba2V5c1tpXV07CiAgICBuZXdJdGVtWyJuYW1lIl0gPSBrZXlzW2ldOwoKCgoKCiAgICBzd2l0Y2ggKGtleXNbaV0uaW5kZXhPZigiYXV0aGVudGljYXRpb24iKSkgewogICAgICBjYXNlIC0xOgogICAgICAgIGlmIChrZXlzW2ldID09ICJwYXNzd29yZCIgfHwga2V5c1tpXSA9PSAiY29uZmlybSIpIHsKICAgICAgICAgIG5ld0l0ZW1bInR5cGUiXSA9ICJwYXNzd29yZCI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5ld0l0ZW1bInR5cGUiXSA9ICJ0ZXh0IjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CgogICAgICBkZWZhdWx0OgogICAgICAgIG5ld0l0ZW1bInR5cGUiXSA9ICJjaGVja2JveCI7CgogICAgICAgIGlmIChrZXlzW2ldID09ICJhdXRoZW50aWNhdGlvbi53ZWIiICYmIGRlZmF1bHRVc2VyID09IHRydWUpIHsKICAgICAgICAgIG5ld0l0ZW1bIm9uY2xpY2siXSA9ICJyZXR1cm4gZmFsc2UiOwogICAgICAgIH0KCiAgICAgICAgaWYgKGRhdGFba2V5c1tpXV0gPT0gdHJ1ZSkgewogICAgICAgICAgbmV3SXRlbVsiY2hlY2tlZCJdID0gZGF0YVtrZXlzW2ldXTsKICAgICAgICB9CgogICAgICAgIGJyZWFrOwogICAgfQoKICAgIHN3aXRjaCAoa2V5c1tpXSkgewogICAgICBjYXNlICJkZWZhdWx0VXNlciI6CiAgICAgICAgLy9pZiAoZGF0YVtrZXlzW2ldXSA9PSB0cnVlKSB7CiAgICAgICAgbmV3SXRlbVsidHlwZSJdID0gImhpZGRlbiI7CiAgICAgIC8vfQogICAgfQoKCiAgICBpZiAodGQgIT0gdW5kZWZpbmVkKSB7CiAgICAgIHRkLmlubmVySFRNTCA9ICIiOwogICAgICB2YXIgZWxlbWVudCA9IGNyZWF0ZU5ld0VsZW1lbnQobmV3SXRlbSkKICAgICAgLy9jb25zb2xlLmxvZyhlbGVtZW50KTsKICAgICAgdGQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CiAgICB9CgoKICB9CgoKICBpZiAoZGVmYXVsdFVzZXIgPT0gdHJ1ZSkgewogICAgc2hvd0VsZW1lbnQoImRlbGV0ZVVzZXJEZXRhaWwiLCBmYWxzZSkKICB9IGVsc2UgewogICAgc2hvd0VsZW1lbnQoImRlbGV0ZVVzZXJEZXRhaWwiLCB0cnVlKQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlbGV0ZVVzZXJEZXRhaWwiKS5jbGFzc05hbWUgPSAiZGVsZXRlIjsKICB9Cgp9CgpmdW5jdGlvbiBzYXZlVXNlckRldGFpbCh1c2VySUQsIGRlbGV0ZVVzZXIpIHsKCiAgdmFyIGlucHV0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1c2VyLWRldGFpbC10YWJsZSIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJTlBVVCIpOwoKICB2YXIgbmV3VXNlckRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgIHN3aXRjaCAoaW5wdXRzW2ldLnR5cGUpIHsKICAgICAgY2FzZSAiY2hlY2tib3giOiBuZXdVc2VyRGF0YVtpbnB1dHNbaV0ubmFtZV0gPSBpbnB1dHNbaV0uY2hlY2tlZDsgYnJlYWs7CiAgICAgIGRlZmF1bHQ6IG5ld1VzZXJEYXRhW2lucHV0c1tpXS5uYW1lXSA9IGlucHV0c1tpXS52YWx1ZTsgYnJlYWs7CiAgICB9CgogICAgaWYgKGlucHV0c1sidXNlcm5hbWUiXS52YWx1ZS5sZW5ndGggPT0gMCkgewogICAgICBpbnB1dHNbInVzZXJuYW1lIl0uc3R5bGUuYm9yZGVyID0gInNvbGlkIDFweCByZWQiOwogICAgICByZXR1cm47CiAgICB9CgogICAgc3dpdGNoICh1c2VySUQpIHsKICAgICAgY2FzZSAiMCI6CiAgICAgICAgaWYgKGlucHV0c1sicGFzc3dvcmQiXS52YWx1ZS5sZW5ndGggPT0gMCkgewogICAgICAgICAgY29uc29sZS5sb2coaW5wdXRzWyJwYXNzd29yZCJdLnZhbHVlLmxlbmd0aCk7CiAgICAgICAgICBpbnB1dHNbInBhc3N3b3JkIl0uc3R5bGUuYm9yZGVyID0gInNvbGlkIDFweCByZWQiOwogICAgICAgICAgcmV0dXJuCiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgfQoKICAgIGlmIChpbnB1dHNbInBhc3N3b3JkIl0udmFsdWUubGVuZ3RoID4gMCkgewogICAgICBpZiAoaW5wdXRzWyJwYXNzd29yZCJdLnZhbHVlICE9IGlucHV0c1siY29uZmlybSJdLnZhbHVlKSB7CiAgICAgICAgaW5wdXRzWyJwYXNzd29yZCJdLnN0eWxlLmJvcmRlciA9ICJzb2xpZCAxcHggcmVkIjsKICAgICAgICBpbnB1dHNbImNvbmZpcm0iXS5zdHlsZS5ib3JkZXIgPSAic29saWQgMXB4IHJlZCI7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CgogIH0KCiAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CgogIHN3aXRjaCAodXNlcklEKSB7CiAgICBjYXNlICIwIjoKICAgICAgLy9kYXRhID0gbmV3VXNlckRhdGEKICAgICAgZGF0YVsidXNlckRhdGEiXSA9IG5ld1VzZXJEYXRhCiAgICAgIGRhdGFbImNtZCJdID0gInNhdmVOZXdVc2VyIjsgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgdmFyIHRoaXNVc2VyID0gbmV3IE9iamVjdCgpOwoKICAgICAgaWYgKGRlbGV0ZVVzZXIgPT0gdHJ1ZSkgewogICAgICAgIGlmIChjb25maXJtKCdEZWxldGUgdGhlIHNlbGVjdGVkIHVzZXI/JykpIHsKICAgICAgICAgIGRhdGFbImRlbGV0ZVVzZXIiXSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsKICAgICAgICAgIHJldHVybgogICAgICAgIH0KICAgICAgfQoKICAgICAgdGhpc1VzZXJbdXNlcklEXSA9IG5ld1VzZXJEYXRhOwoKICAgICAgZGF0YVsidXNlckRhdGEiXSA9IHRoaXNVc2VyOwogICAgICBkYXRhWyJjbWQiXSA9ICJzYXZlVXNlckRhdGEiOyBicmVhazsKICB9CgogIFRocmVhZGZpbihkYXRhKTsKICAvL2NyZWF0ZVVzZXJzVGFibGUoKQogIHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsKfQoKCg==" - webUI["html/js/authentication.js"] = "ZnVuY3Rpb24gY3JlYXRlRmlyc3RBY2NvdW50KGVsbSkgewogIHZhciBlcnIgPSBmYWxzZTsKICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxtKTsKICBjb25zb2xlLmxvZyhkaXYpOwoKICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoZW50aWNhdGlvbicpOwogIAogIGNvbnN0IHVzZXJuYW1lICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2VybmFtZScpOwogIGNvbnN0IHBhc3N3b3JkICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXNzd29yZCcpOwogIGNvbnN0IGNvbmZpcm0gICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtJyk7CgogIHZhciBpbnB1dHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ0lOUFVUJykKICBjb25zb2xlLmxvZyhjb25maXJtKTsKCiAgc3dpdGNoKGNvbmZpcm0pIHsKICAgIGNhc2UgbnVsbDogYnJlYWs7CiAgICAKICAgIGRlZmF1bHQ6IAogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChpbnB1dHNbaV0udmFsdWUubGVuZ3RoID09IDApIHsKICAgICAgICAgIGlucHV0c1tpXS5zdHlsZS5ib3JkZXJDb2xvciA9ICdyZWQnOwogICAgICAgICAgZXJyID0gdHJ1ZQogICAgICAgIH0KICAgICAgfQoKICAgICAgc3dpdGNoKGVycikgewogICAgICAgIGNhc2UgdHJ1ZTogcmV0dXJuOyBicmVhazsKICAgICAgICBjYXNlIGZhbHNlOiAKICAgICAgICAgIGlmIChwYXNzd29yZC52YWx1ZSAhPSBjb25maXJtLnZhbHVlKSB7CiAgICAgICAgICAgIGNvbmZpcm0uc3R5bGUuYm9yZGVyQ29sb3IgPSAncmVkJzsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICB9CgoKICAKCiAgZm9ybS5zdWJtaXQoKTsKICByZXR1cm47Cn0=" + webUI["html/img/logo_b_880x200.png"] = "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" + webUI["html/img/logo_w_600x200.png"] = "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" + webUI["html/lang/en.json"] = "ewogICJtYWluTWVudSI6IHsKICAgICJpdGVtIjogewogICAgICAicGxheWxpc3QiOiAiUGxheWxpc3QiLAogICAgICAicG1zSUQiOiAiUE1TIElEIiwKICAgICAgImZpbHRlciI6ICJGaWx0ZXIiLAogICAgICAieG1sdHYiOiAiWE1MVFYiLAogICAgICAibWFwcGluZyI6ICJNYXBwaW5nIiwKICAgICAgInVzZXJzIjogIlVzZXJzIiwKICAgICAgInNldHRpbmdzIjogIlNldHRpbmdzIiwKICAgICAgImxvZyI6ICJMb2ciLAogICAgICAibG9nb3V0IjogIkxvZ291dCIKICAgIH0sCiAgICAiaGVhZGxpbmUiOiB7CiAgICAgICJwbGF5bGlzdCI6ICJMb2NhbCBvciByZW1vdGUgcGxheWxpc3RzIiwKICAgICAgImZpbHRlciI6ICJGaWx0ZXIgcGxheWxpc3QiLAogICAgICAieG1sdHYiOiAiTG9jYWwgb3IgcmVtb3RlIFhNTFRWIGZpbGVzIiwKICAgICAgIm1hcHBpbmciOiAiTWFwIHBsYXlsaXN0IGNoYW5uZWxzIHRvIEVQRyBjaGFubmVscyIsCiAgICAgICJ1c2VycyI6ICJVc2VyIG1hbmFnZW1lbnQiLAogICAgICAic2V0dGluZ3MiOiAiU2V0dGluZ3MiLAogICAgICAibG9nIjogIkxvZyIsCiAgICAgICJsb2dvdXQiOiAiTG9nb3V0IgogICAgfQogIH0sCiAgImNvbmZpcm0iOiB7CiAgICAicmVzdG9yZSI6ICJBbGwgZGF0YSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhvc2UgZnJvbSB0aGUgYmFja3VwLiBTaG91bGQgdGhlIGZpbGVzIGJlIHJlc3RvcmVkPyIKICB9LAogICJhbGVydCI6IHsKICAgICJmaWxlTG9hZGluZ0Vycm9yIjogIkZpbGUgY291bGRuJ3QgYmUgbG9hZGVkIiwKICAgICJpbnZhbGlkQ2hhbm5lbE51bWJlciI6ICJJbnZhbGlkIGNoYW5uZWwgbnVtYmVyIiwKICAgICJtaXNzaW5nSW5wdXQiOiAiTWlzc2luZyBpbnB1dCIKICB9LAogICJidXR0b24iOiB7CiAgICAiYmFjayI6ICJCYWNrIiwKICAgICJiYWNrdXAiOiAiQmFja3VwIiwKICAgICJidWxrRWRpdCI6ICJCdWxrIEVkaXQiLAogICAgImNhbmNlbCI6ICJDYW5jZWwiLAogICAgImRlbGV0ZSI6ICJEZWxldGUiLAogICAgImRvbmUiOiAiRG9uZSIsCiAgICAibG9naW4iOiAiTG9naW4iLAogICAgIm5ldyI6ICJOZXciLAogICAgIm5leHQiOiAiTmV4dCIsCiAgICAicmVzdG9yZSI6ICJSZXN0b3JlIiwKICAgICJzYXZlIjogIlNhdmUiLAogICAgInNlYXJjaCI6ICJTZWFyY2giLAogICAgInVwZGF0ZSI6ICJVcGRhdGUiLAogICAgImNyYWV0ZUFjY291bnQiOiAiQ3JlYXRlIEFjY291bnQiLAogICAgInJlc2V0TG9ncyI6ICJSZXNldCBMb2dzIiwKICAgICJ1cGxvYWRMb2dvIjogIlVwbG9hZCBMb2dvIiwKICAgICJwcm9iZUNoYW5uZWwiOiAiUHJvYmUgQ2hhbm5lbCIsCiAgICAic29ydENoYW5uZWxzQWxwaGEiOiAiU29ydCBDaGFubmVscyBBbHBoYWJldGljYWxseSIsCiAgICAic29ydENoYW5uZWxOdW1iZXJzIjogIlNvcnQgQ2hhbm5lbHMiCiAgfSwKICAiZmlsdGVyIjogewogICAgInRhYmxlIjogewogICAgICAibmFtZSI6ICJGaWx0ZXIgTmFtZSIsCiAgICAgICJ0eXBlIjogIkZpbHRlciBUeXBlIiwKICAgICAgImZpbHRlciI6ICJGaWx0ZXIiCiAgICB9LAogICAgImN1c3RvbSI6ICJDdXN0b20iLAogICAgImdyb3VwIjogIkdyb3VwIiwKICAgICJuYW1lIjogewogICAgICAidGl0bGUiOiAiRmlsdGVyIE5hbWUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsdGVyIG5hbWUiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJzdGFydGluZ251bWJlciI6IHsKICAgICAgInRpdGxlIjogIkZpbHRlciBTdGFydGluZyBOdW1iZXIiLAogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsdGVyIFN0YXJ0aW5nIE51bWJlciIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJTdGFydGluZyBDaGFubmVsIE51bWJlciB0byB1c2UgZm9yIHRoaXMgR3JvdXAgRmlsdGVyIChEZWZhdWx0IGlzIDEwMDApIgogICAgfSwKICAgICJjYXRlZ29yeSI6IHsKICAgICAgInRpdGxlIjogIkZpbHRlciBDYXRlZ29yeSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWx0ZXIgQ2F0ZWdvcnkiLAogICAgICAiZGVzY3JpcHRpb24iOiAiRmlsdGVyIENhdGVnb3J5IHNldHMgYWxsIGNoYW5uZWxzIGluIHRoZSBmaWx0ZXIgdG8gYSBzcGVjaWZpYyBjYXRlZ29yeSAobmV3cywgc3BvcnRzLCBldGMpIgogICAgfSwKICAgICJkZXNjcmlwdGlvbiI6IHsKICAgICAgInRpdGxlIjogIkRlc2NyaXB0aW9uIiwKICAgICAgInBsYWNlaG9sZGVyIjogIkRlc2NyaXB0aW9uIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAidHlwZSI6IHsKICAgICAgInRpdGxlIjogIlR5cGUiLAogICAgICAiZ3JvdXBUaXRsZSI6ICJHcm91cCBUaXRsZSIsCiAgICAgICJjdXN0b21GaWx0ZXIiOiAiQ3VzdG9tIEZpbHRlciIKICAgIH0sCiAgICAibGl2ZUV2ZW50IjogewogICAgICAidGl0bGUiOiAiTGl2ZSBFdmVudCBHcm91cCIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJjYXNlU2Vuc2l0aXZlIjogewogICAgICAidGl0bGUiOiAiQ2FzZSBTZW5zaXRpdmUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAiZmlsdGVyUnVsZSI6IHsKICAgICAgInRpdGxlIjogIkZpbHRlciBSdWxlIiwKICAgICAgInBsYWNlaG9sZGVyIjogIlNwb3J0IHtIRH0gIXtFUyxJVH0iLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJmaWx0ZXJHcm91cCI6IHsKICAgICAgInRpdGxlIjogIkdyb3VwIFRpdGxlIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJTZWxlY3QgYSBNM1UgZ3JvdXAuIChDb3VudGVyKTxicj5DaGFuZ2luZyB0aGUgZ3JvdXAgdGl0bGUgaW4gdGhlIE0zVSBpbnZhbGlkYXRlcyB0aGUgZmlsdGVyLiIKICAgIH0sCiAgICAiaW5jbHVkZSI6IHsKICAgICAgInRpdGxlIjogIkluY2x1ZGUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiRkhELFVIRCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJDaGFubmVsIG5hbWUgbXVzdCBpbmNsdWRlLjxicj4oQ29tbWEgc2VwYXJhdGVkKSBDb21tYSBtZWFucyBvciIKICAgIH0sCiAgICAiZXhjbHVkZSI6IHsKICAgICAgInRpdGxlIjogIkV4Y2x1ZGUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiRVMsSVQiLAogICAgICAiZGVzY3JpcHRpb24iOiAiQ2hhbm5lbCBuYW1lIG11c3Qgbm90IGNvbnRhaW4uPGJyPihDb21tYSBzZXBhcmF0ZWQpIENvbW1hIG1lYW5zIG9yIgogICAgfQogIH0sCiAgInBsYXlsaXN0IjogewogICAgInRhYmxlIjogewogICAgICAicGxheWxpc3QiOiAiUGxheWxpc3QiLAogICAgICAiYnVmZmVyIjogIkJ1ZmZlciIsCiAgICAgICJ0dW5lciI6ICJUdW5lciIsCiAgICAgICJsYXN0VXBkYXRlIjogIkxhc3QgVXBkYXRlIiwKICAgICAgImF2YWlsYWJpbGl0eSI6ICJBdmFpbGFiaWxpdHkiLAogICAgICAidHlwZSI6ICJUeXBlIiwKICAgICAgInN0cmVhbXMiOiAiU3RyZWFtcyIsCiAgICAgICJncm91cFRpdGxlIjogImdyb3VwLXRpdGxlIiwKICAgICAgInR2Z0lEIjogInR2Zy1pZCIsCiAgICAgICJ1bmlxdWVJRCI6ICJVbmlxdWUgSUQiCiAgICB9LAogICAgInBsYXlsaXN0VHlwZSI6IHsKICAgICAgInRpdGxlIjogIlBsYXlsaXN0IHR5cGUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAidHlwZSI6IHsKICAgICAgInRpdGxlIjogIlR5cGUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAibmFtZSI6IHsKICAgICAgInRpdGxlIjogIk5hbWUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiUGxheWxpc3QgbmFtZSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImRlc2NyaXB0aW9uIjogewogICAgICAidGl0bGUiOiAiRGVzY3JpcHRpb24iLAogICAgICAicGxhY2Vob2xkZXIiOiAiRGVzY3JpcHRpb24iLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJmaWxlTTNVIjogewogICAgICAidGl0bGUiOiAiTTNVIEZpbGUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsZSBwYXRoIG9yIFVSTCBvZiB0aGUgTTNVIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAiZmlsZUhESFIiOiB7CiAgICAgICJ0aXRsZSI6ICJIREhvbWVSdW4gSVAiLAogICAgICAicGxhY2Vob2xkZXIiOiAiSVAgYWRkcmVzcyBhbmQgcG9ydCAoMTkyLjE2OC4xLjEwOjUwMDQpIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAiYnVmZmVyIjogewogICAgICAidGl0bGUiOiAiQnVmZmVyIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJCdWZmZXIgZm9yIHRoZSBzdHJlYW1zLiA8YnI+T25seSBhdmFpbGFibGUgd2l0aCBhY3RpdmF0ZWQgdHVuZXIuIgogICAgfSwKICAgICJ0dW5lciI6IHsKICAgICAgInRpdGxlIjogIlR1bmVyIC8gU3RyZWFtcyIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIHBhcmFsbGVsIGNvbm5lY3Rpb25zIHRoYXQgY2FuIGJlIGVzdGFibGlzaGVkIHRvIHRoZSBwcm92aWRlci4gPGJyPk9ubHkgYXZhaWxhYmxlIHdpdGggYWN0aXZhdGVkIGJ1ZmZlci48YnI+TmV3IHNldHRpbmdzIHdpbGwgb25seSBiZSBhcHBsaWVkIGFmdGVyIHF1aXR0aW5nIGFsbCBzdHJlYW1zLiIKICAgIH0sCiAgICAiaHR0cF9wcm94eV9pcCI6IHsKICAgICAgInRpdGxlIjogIkhUVFAgUHJveHkgSVAiLAogICAgICAicGxhY2Vob2xkZXIiOiAiMTkyLjE2OC4wLjIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiSVAgYWRkcmVzcyB0byBiZSB1c2VkIGJ5IEhUVFAgUHJveHkiCiAgICB9LAogICAgImh0dHBfcHJveHlfcG9ydCI6IHsKICAgICAgInRpdGxlIjogIkhUVFAgUHJveHkgUG9ydCIsCiAgICAgICJwbGFjZWhvbGRlciI6ICI4ODg4IiwKICAgICAgImRlc2NyaXB0aW9uIjogIlBvcnQgdG8gYmUgdXNlZCBieSBIVFRQIFByb3h5IgogICAgfQogIH0sCiAgInhtbHR2IjogewogICAgInRhYmxlIjogewogICAgICAiZ3VpZGUiOiAiR3VpZGUiLAogICAgICAibGFzdFVwZGF0ZSI6ICJMYXN0IFVwZGF0ZSIsCiAgICAgICJhdmFpbGFiaWxpdHkiOiAiQXZhaWxhYmlsaXR5IiwKICAgICAgImNoYW5uZWxzIjogIkNoYW5uZWxzIiwKICAgICAgInByb2dyYW1zIjogIlByb2dyYW1zIgogICAgfSwKICAgICJuYW1lIjogewogICAgICAidGl0bGUiOiAiTmFtZSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJHdWlkZSBuYW1lIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAiZGVzY3JpcHRpb24iOiB7CiAgICAgICJ0aXRsZSI6ICJEZXNjcmlwdGlvbiIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJEZXNjcmlwdGlvbiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImZpbGVYTUxUViI6IHsKICAgICAgInRpdGxlIjogIlhNTFRWIEZpbGUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsZSBwYXRoIG9yIFVSTCBvZiB0aGUgWE1MVFYiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJodHRwX3Byb3h5X2lwIjogewogICAgICAidGl0bGUiOiAiSFRUUCBQcm94eSBJUCIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIxOTIuMTY4LjAuMiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJJUCBhZGRyZXNzIHRvIGJlIHVzZWQgYnkgSFRUUCBQcm94eSIKICAgIH0sCiAgICAiaHR0cF9wcm94eV9wb3J0IjogewogICAgICAidGl0bGUiOiAiSFRUUCBQcm94eSBQb3J0IiwKICAgICAgInBsYWNlaG9sZGVyIjogIjg4ODgiLAogICAgICAiZGVzY3JpcHRpb24iOiAiUG9ydCB0byBiZSB1c2VkIGJ5IEhUVFAgUHJveHkiCiAgICB9CiAgfSwKICAibWFwcGluZyI6IHsKICAgICJ0YWJsZSI6IHsKICAgICAgImNoTm8iOiAiQ2guIE5vLiIsCiAgICAgICJsb2dvIjogIkxvZ28iLAogICAgICAiY2hhbm5lbE5hbWUiOiAiQ2hhbm5lbCBOYW1lIiwKICAgICAgInBsYXlsaXN0IjogIlBsYXlsaXN0IiwKICAgICAgImdyb3VwVGl0bGUiOiAiR3JvdXAgVGl0bGUiLAogICAgICAieG1sdHZGaWxlIjogIlhNTFRWIEZpbGUiLAogICAgICAieG1sdHZJRCI6ICJYTUxUViBJRCIKICAgIH0sCiAgICAiYWN0aXZlIjogewogICAgICAidGl0bGUiOiAiQWN0aXZlIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImNoYW5uZWxOYW1lIjogewogICAgICAidGl0bGUiOiAiQ2hhbm5lbCBOYW1lIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImNoYW5uZWxHcm91cFN0YXJ0IjogewogICAgICAidGl0bGUiOiAiQ2hhbm5lbCBHcm91cCBTdGFydCIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJzb3J0Q2hhbm5lbHNBbHBoYSI6IHsKICAgICAgInRpdGxlIjogIlNvcnQgQWxwaGFiZXRpY2FsbHkiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAic29ydENoYW5uZWxzIjogewogICAgICAidGl0bGUiOiAiU29ydCBDaGFubmVscyIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJkZXNjcmlwdGlvbiI6IHsKICAgICAgInRpdGxlIjogIkNoYW5uZWwgRGVzY3JpcHRpb24iLAogICAgICAicGxhY2Vob2xkZXIiOiAiVXNlZCBieSB0aGUgRHVtbXkgYXMgYW4gWE1MIGRlc2NyaXB0aW9uIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAidXBkYXRlQ2hhbm5lbE5hbWUiOiB7CiAgICAgICJ0aXRsZSI6ICJVcGRhdGUgQ2hhbm5lbCBOYW1lIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImNoYW5uZWxMb2dvIjogewogICAgICAidGl0bGUiOiAiTG9nbyBVUkwiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAidXBkYXRlQ2hhbm5lbExvZ28iOiB7CiAgICAgICJ0aXRsZSI6ICJVcGRhdGUgQ2hhbm5lbCBMb2dvIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImVwZ0NhdGVnb3J5IjogewogICAgICAidGl0bGUiOiAiRVBHIENhdGVnb3J5IiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgIm0zdUdyb3VwVGl0bGUiOiB7CiAgICAgICJ0aXRsZSI6ICJHcm91cCBUaXRsZSAodGhyZWFkZmluLm0zdSkiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAieG1sdHZGaWxlIjogewogICAgICAidGl0bGUiOiAiWE1MVFYgRmlsZSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJ4bWx0dkNoYW5uZWwiOiB7CiAgICAgICJ0aXRsZSI6ICJYTUxUViBDaGFubmVsIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgInBwdmV4dHJhIjogewogICAgICAidGl0bGUiOiAiUFBWIEV4dHJhIFRpdGxlIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGlzIHdpbGwgYWRkIGN1c3RvbSB0ZXh0IHRvIHRoZSBQcm9ncmFtbWUgZGF0YSIKICAgIH0sCiAgICAiYmFja3VwQ2hhbm5lbDEiOiB7CiAgICAgICJ0aXRsZSI6ICJCYWNrdXAgQ2hhbm5lbCAxIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImJhY2t1cENoYW5uZWwyIjogewogICAgICAidGl0bGUiOiAiQmFja3VwIENoYW5uZWwgMiIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJiYWNrdXBDaGFubmVsMyI6IHsKICAgICAgInRpdGxlIjogIkJhY2t1cCBDaGFubmVsIDMiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAiaGlkZUNoYW5uZWwiOiB7CiAgICAgICJ0aXRsZSI6ICJIaWRlIEJhY2t1cCBDaGFubmVsIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgInByb2JlRGV0YWlscyI6IHsKICAgICAgInRpdGxlIjogIlByb2JlIERldGFpbHMiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0KICB9LAogICJ1c2VycyI6IHsKICAgICJ0YWJsZSI6IHsKICAgICAgInVzZXJuYW1lIjogIlVzZXJuYW1lIiwKICAgICAgInBhc3N3b3JkIjogIlBhc3N3b3JkIiwKICAgICAgIndlYiI6ICJXRUIiLAogICAgICAicG1zIjogIlBNUyIsCiAgICAgICJtM3UiOiAiTTNVIiwKICAgICAgInhtbCI6ICJYTUwiLAogICAgICAiYXBpIjogIkFQSSIKICAgIH0sCiAgICAidXNlcm5hbWUiOiB7CiAgICAgICJ0aXRsZSI6ICJVc2VybmFtZSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJVc2VybmFtZSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgInBhc3N3b3JkIjogewogICAgICAidGl0bGUiOiAiUGFzc3dvcmQiLAogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJjb25maXJtIjogewogICAgICAidGl0bGUiOiAiQ29uZmlybSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJQYXNzd29yZCBjb25maXJtIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAid2ViIjogewogICAgICAidGl0bGUiOiAiV2ViIEFjY2VzcyIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJwbXMiOiB7CiAgICAgICJ0aXRsZSI6ICJQTVMgQWNjZXNzIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgIm0zdSI6IHsKICAgICAgInRpdGxlIjogIk0zVSBBY2Nlc3MiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAieG1sIjogewogICAgICAidGl0bGUiOiAiWE1MIEFjY2VzcyIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJhcGkiOiB7CiAgICAgICJ0aXRsZSI6ICJBUEkgQWNjZXNzIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9CiAgfSwKICAic2V0dGluZ3MiOiB7CiAgICAiY2F0ZWdvcnkiOiB7CiAgICAgICJnZW5lcmFsIjogIkdlbmVyYWwiLAogICAgICAiZmlsZXMiOiAiRmlsZXMiLAogICAgICAic3RyZWFtaW5nIjogIlN0cmVhbWluZyIsCiAgICAgICJiYWNrdXAiOiAiQmFja3VwIiwKICAgICAgImF1dGhlbnRpY2F0aW9uIjogIkF1dGhlbnRpY2F0aW9uIgogICAgfSwKICAgICJ1cGRhdGUiOiB7CiAgICAgICJ0aXRsZSI6ICJTY2hlZHVsZSBmb3IgdXBkYXRpbmcgKFBsYXlsaXN0LCBYTUxUViwgQmFja3VwKSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIwMDAwLDEwMDAsMjAwMCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaW1lIGluIDI0IGhvdXIgZm9ybWF0ICgwODAwID0gODowMCBhbSkuIE1vcmUgdGltZXMgY2FuIGJlIGVudGVyZWQgY29tbWEgc2VwYXJhdGVkLiBMZWF2ZSB0aGlzIGZpZWxkIGVtcHR5IGlmIG5vIHVwZGF0ZXMgYXJlIHRvIGJlIGNhcnJpZWQgb3V0LiIKICAgIH0sCiAgICAiYXBpIjogewogICAgICAidGl0bGUiOiAiQVBJIEludGVyZmFjZSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJWaWEgQVBJIGludGVyZmFjZSBpdCBpcyBwb3NzaWJsZSB0byBzZW5kIGNvbW1hbmRzIHRvIFRocmVhZGZpbi4gQVBJIGRvY3VtZW50YXRpb24gaXMgPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL1RocmVhZGZpbi9UaHJlYWRmaW4tRG9jdW1lbnRhdGlvbi9ibG9iL21hc3Rlci9lbi9jb25maWd1cmF0aW9uLm1kI2FwaSc+aGVyZTwvYT4iCiAgICB9LAogICAgInNzZHAiOiB7CiAgICAgICJ0aXRsZSI6ICJTU0RQIiwKICAgICAgImRlc2NyaXB0aW9uIjogIlNTRFAgaXMgYSBuZXR3b3JrIHByb3RvY29sIGZvciBzZXJ2aWNlIGRpc2NvdmVyeS4gSXQgaXMgdXNlZCBmb3IgdGhlIGF1dG9tYXRpYyBkZXRlY3Rpb24gb2YgVGhyZWFkZmluIGluIHRoZSBuZXR3b3JrLiIKICAgIH0sCiAgICAiZHVtbXkiOiB7CiAgICAgICJ0aXRsZSI6ICJFbmFibGUgRGVmYXVsdCBEdW1teSBEYXRhIiwKICAgICAgImRlc2NyaXB0aW9uIjogIldoZW4gZW5hYmxlZCwgdGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgbWFwIGluYWN0aXZlIGNoYW5uZWxzIHRvIHRoZSBkdW1teSBkYXRhIGNoYW5uZWwgYmVsb3cuIFVzZSB0aGlzIHRvIGtlZXAgTGl2ZSBFdmVudCBjaGFubmVscyBhY3RpdmUuIgogICAgfSwKICAgICJkdW1teUNoYW5uZWwiOiB7CiAgICAgICJ0aXRsZSI6ICJEdW1teSBEYXRhIENoYW5uZWwiLAogICAgICAiZGVzY3JpcHRpb24iOiAiU2VsZWN0IHRoZSBkZWZhdWx0IGNoYW5uZWwgdG8gdXNlIHdoZW4gbWFwcGluZyBpbmFjdGl2ZSBjaGFubmVscyB0byB0aGUgZHVtbXkgZGF0YS4iCiAgICB9LAogICAgImlnbm9yZUZpbHRlcnMiOiB7CiAgICAgICJ0aXRsZSI6ICJJZ25vcmUgRmlsdGVycyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJJZiBjaGVja2VkLCBmaWx0ZXJpbmcgaXMgY29tcGxldGVseSBpZ25vcmVkLiIKICAgIH0sCiAgICAiZXBnU291cmNlIjogewogICAgICAidGl0bGUiOiAiRVBHIFNvdXJjZSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQTVM6PGJyPi0gVXNlIEVQRyBkYXRhIGZyb20gUGxleCwgRW1ieSBvciBKZWxseWZpbiA8YnI+PGJyPlhFUEc6PGJyPi0gVXNlIG9mIG9uZSBvciBtb3JlIFhNTFRWIGZpbGVzPGJyPi0gQ2hhbm5lbCBtYW5hZ2VtZW50PGJyPi0gTTNVIC8gWE1MVFYgZXhwb3J0IChIVFRQIGxpbmsgZm9yIElQVFYgYXBwcykiCiAgICB9LAogICAgInR1bmVyIjogewogICAgICAidGl0bGUiOiAiTnVtYmVyIG9mIFR1bmVycyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgcGFyYWxsZWwgY29ubmVjdGlvbnMgdGhhdCBjYW4gYmUgZXN0YWJsaXNoZWQgdG8gdGhlIHByb3ZpZGVyLjxicj5BdmFpbGFibGUgZm9yOiBQbGV4LCBFbWJ5LCBKZWxseWZpbiwgTTNVICh3aXRoIGFjdGl2ZSBidWZmZXIpLjxicj5BZnRlciBhIGNoYW5nZSwgVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQbGV4IC8gRW1ieSAvIEplbGx5ZmluIERWUiBzZXR0aW5ncyBhbmQgc2V0IHVwIGFnYWluLiIKICAgIH0sCiAgICAiZmlsZXNVcGRhdGUiOiB7CiAgICAgICJ0aXRsZSI6ICJVcGRhdGVzIGFsbCBmaWxlcyBhdCBzdGFydHVwIiwKICAgICAgImRlc2NyaXB0aW9uIjogIlVwZGF0ZXMgYWxsIHBsYXlsaXN0cywgdHVuZXIgYW5kIFhNTFRWIGZpbGVzIGF0IHN0YXJ0dXAuIgogICAgfSwKICAgICJjYWNoZUltYWdlcyI6IHsKICAgICAgInRpdGxlIjogIkltYWdlIENhY2hpbmciLAogICAgICAiZGVzY3JpcHRpb24iOiAiQWxsIGltYWdlcyBmcm9tIHRoZSBYTUxUViBmaWxlIGFyZSBjYWNoZWQsIGFsbG93aW5nIGZhc3RlciByZW5kZXJpbmcgb2YgdGhlIGdyaWQgaW4gdGhlIGNsaWVudC48YnI+RG93bmxvYWRpbmcgdGhlIGltYWdlcyBtYXkgdGFrZSBhIHdoaWxlIGFuZCB3aWxsIGJlIGRvbmUgaW4gdGhlIGJhY2tncm91bmQuIgogICAgfSwKICAgICJyZXBsYWNlRW1wdHlJbWFnZXMiOiB7CiAgICAgICJ0aXRsZSI6ICJSZXBsYWNlIG1pc3NpbmcgcHJvZ3JhbSBpbWFnZXMiLAogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgdGhlIHBvc3RlciBpbiB0aGUgWE1MVFYgcHJvZ3JhbSBpcyBtaXNzaW5nLCB0aGUgY2hhbm5lbCBsb2dvIHdpbGwgYmUgdXNlZC4iCiAgICB9LAogICAgInJlcGxhY2VDaGFubmVsVGl0bGUiOiB7CiAgICAgICJ0aXRsZSI6ICJSZXBsYWNlIFBQViBjaGFubmVscyB0aXRsZS9kZXNjIiwKICAgICAgImRlc2NyaXB0aW9uIjogIlVzZSB0aGlzIGlmIHlvdXIgcHJvdmlkZXIgbWFwcyB0aGUgUFBWIGV2ZW50IG5hbWUgdG8gdGhlIGNoYW5uZWwgbmFtZSIKICAgIH0sCiAgICAiVGhyZWFkZmluQXV0b1VwZGF0ZSI6IHsKICAgICAgInRpdGxlIjogIkF1dG9tYXRpYyB1cGRhdGUgb2YgVGhyZWFkZmluIiwKICAgICAgImRlc2NyaXB0aW9uIjogIklmIGEgbmV3IHZlcnNpb24gb2YgVGhyZWFkZmluIGlzIGF2YWlsYWJsZSwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZC4gVGhlIHVwZGF0ZXMgYXJlIGRvd25sb2FkZWQgZnJvbSBHaXRIdWIuIgogICAgfSwKICAgICJzdHJlYW1CdWZmZXJpbmciOiB7CiAgICAgICJ0aXRsZSI6ICJTdHJlYW0gQnVmZmVyIiwKICAgICAgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9ucyBvZiB0aGUgYnVmZmVyOjxicj4tIFRoZSBzdHJlYW0gaXMgcGFzc2VkIGZyb20gRkZtcGVnIG9yIFZMQyB0byBQbGV4LCBFbWJ5LCBKZWxseWZpbiBvciBNM1UgUGxheWVyPGJyPi0gU21hbGwgamVya2luZyBvZiB0aGUgc3RyZWFtcyBjYW4gYmUgY29tcGVuc2F0ZWQ8YnI+LSBITFMgLyBNM1U4IHN1cHBvcnQ8YnI+LSBSVFAgLyBSVFBTIHN1cHBvcnQ8YnI+LSBSZS1zdHJlYW1pbmc8YnI+LSBTZXBhcmF0ZSB0dW5lciBsaW1pdCBmb3IgZWFjaCBwbGF5bGlzdCIsCiAgICAgICJpbmZvX2ZhbHNlIjogIk5vIEJ1ZmZlciAoQ2xpZW50IGNvbm5lY3RzIGRpcmVjdGx5IHRvIHRoZSBzdHJlYW1pbmcgc2VydmVyKSIsCiAgICAgICJpbmZvX2ZmbXBlZyI6ICJGRm1wZWcgY29ubmVjdHMgdG8gdGhlIHN0cmVhbWluZyBzZXJ2ZXIiLAogICAgICAiaW5mb192bGMiOiAiVkxDIGNvbm5lY3RzIHRvIHRoZSBzdHJlYW1pbmcgc2VydmVyIgogICAgfSwKICAgICJ1ZHB4eSI6IHsKICAgICAgInRpdGxlIjogIlVEUHh5IGFkZHJlc3MiLAogICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGFkZHJlc3Mgb2YgeW91ciBVRFB4eSBzZXJ2ZXIuIElmIHNldCwgYW5kIHRoZSBjaGFubmVsIFVSTHMgaW4gdGhlIG0zdSBpcyBtdWx0aWNhc3QsIFRocmVhZGZpbiB3aWxsIHJld3JpdGUgaXQgc28gdGhhdCBpdCBpcyBhY2Nlc3NlZCB2aWEgdGhlIFVEUHh5IHNlcnZpY2UuIiwKICAgICAgInBsYWNlaG9sZGVyIjogImhvc3Q6cG9ydCIKICAgIH0sCiAgICAiZmZtcGVnUGF0aCI6IHsKICAgICAgInRpdGxlIjogIkZGbXBlZyBCaW5hcnkgUGF0aCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQYXRoIHRvIEZGbXBlZyBiaW5hcnkuIiwKICAgICAgInBsYWNlaG9sZGVyIjogIi9wYXRoL3RvL2ZmbXBlZyIKICAgIH0sCiAgICAiZmZtcGVnT3B0aW9ucyI6IHsKICAgICAgInRpdGxlIjogIkZGbXBlZyBPcHRpb25zIiwKICAgICAgImRlc2NyaXB0aW9uIjogIkZGbXBlZyBvcHRpb25zLjxicj5Pbmx5IGNoYW5nZSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuPGJyPkxlYXZlIGJsYW5rIHRvIHNldCBkZWZhdWx0IHNldHRpbmdzLiIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJMZWF2ZSBibGFuayB0byBzZXQgZGVmYXVsdCBzZXR0aW5ncyIKICAgIH0sCiAgICAiZmZtcGVnRm9yY2VIdHRwIjogewogICAgICAidGl0bGUiOiAiRm9yY2UgSFRUUCBmb3IgRkZNUEVHIiwKICAgICAgImRlc2NyaXB0aW9uIjogIklmIGNoZWNrZWQsIHdpbGwgcmV3cml0ZSB0aGUgbTN1IHRvIHVzZSBodHRwIGluc3RlYWQgb2YgaHR0cHMuIFVzZSB0aGlzIGZvciBodHRwcyBsaW5rcyBpbiBmZm1wZWciCiAgICB9LAogICAgInZsY1BhdGgiOiB7CiAgICAgICJ0aXRsZSI6ICJWTEMgLyBDVkxDIEJpbmFyeSBQYXRoIiwKICAgICAgImRlc2NyaXB0aW9uIjogIlBhdGggdG8gVkxDIC8gQ1ZMQyBiaW5hcnkuIiwKICAgICAgInBsYWNlaG9sZGVyIjogIi9wYXRoL3RvL2N2bGMiCiAgICB9LAogICAgInZsY09wdGlvbnMiOiB7CiAgICAgICJ0aXRsZSI6ICJWTEMgLyBDVkxDIE9wdGlvbnMiLAogICAgICAiZGVzY3JpcHRpb24iOiAiVkxDIC8gQ1ZMQyBvcHRpb25zLjxicj5Pbmx5IGNoYW5nZSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuPGJyPkxlYXZlIGJsYW5rIHRvIHNldCBkZWZhdWx0IHNldHRpbmdzLiIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJMZWF2ZSBibGFuayB0byBzZXQgZGVmYXVsdCBzZXR0aW5ncyIKICAgIH0sCiAgICAiYnVmZmVyU2l6ZSI6IHsKICAgICAgInRpdGxlIjogIkJ1ZmZlciBTaXplIiwKICAgICAgImRlc2NyaXB0aW9uIjogIkJ1ZmZlciBzaXplIGluIE1CLjxicj5NM1U4OiBJZiB0aGUgVFMgc2VnbWVudCBzbWFsbGVyIHRoZW4gdGhlIGJ1ZmZlciBzaXplLCB0aGUgZmlsZSBzaXplIG9mIHRoZSBzZWdtZW50IGlzIHVzZWQuIgogICAgfSwKICAgICJzdG9yZUJ1ZmZlckluUkFNIjoKICAgIHsKICAgICAgInRpdGxlIjogIlN0b3JlIGJ1ZmZlciBpbiBSQU0iLAogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgY2hlY2tlZCwgd3JpdGUgYnVmZmVyIHRvIFJBTSBpbnN0ZWFkIG9mIHdyaXRpbmcgdG8gZGlzayIKICAgIH0sCiAgICAiZm9yY2VIdHRwcyI6CiAgICB7CiAgICAgICJ0aXRsZSI6ICJGb3JjZSBIVFRQUyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXaXRoIGltYWdlIGNhY2hpbmcgZW5hYmxlZCwgaWYgY2hlY2tlZCwgd2lsbCByZXdyaXRlIE0zVSBhbmQgRVBHIHVybHMgdG8gaW5jbHVkZSBodHRwcyBwcm90b2NvbCBhcyB3ZWxsIGFzIGh0dHBzIHBvcnQgKGRlZmF1bHQgaXMgNDQzKSIKICAgIH0sCiAgICAiaHR0cHNQb3J0IjoKICAgIHsKICAgICAgInRpdGxlIjogIkhUVFBTIFBvcnQiLAogICAgICAiZGVzY3JpcHRpb24iOiAiV2l0aCBpbWFnZSBjYWNoaW5nIGVuYWJsZWQsIHBvcnQgdG8gdXNlIGZvciBmb3JjaW5nIGh0dHBzLiBEZWZhdWx0IGlzIDQ0MyIKICAgIH0sCiAgICAiaHR0cHNUaHJlYWRmaW5Eb21haW4iOgogICAgewogICAgICAidGl0bGUiOiAiSFRUUFMgVGhyZWFkZmluIERvbWFpbiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXaXRoIGltYWdlIGNhY2hpbmcgZW5hYmxlZCwgcmV3cml0ZSB0aGUgdGhyZWFkZmluIGlwIGFkZHJlc3MgaW4gdGhlIG0zdSB0byB1c2UgYSBkb21haW4gZm9yIEhUVFBTIG1vZGUuIERvIE5PVCBpbmNsdWRlIGh0dHBzIChleDogc29tZWRvbWFpbi5jb20pIgogICAgfSwKICAgICJiaW5kSXBBZGRyZXNzIjoKICAgIHsKICAgICAgInRpdGxlIjogIkJpbmQgSVAgQWRkcmVzcyBmb3IgV2ViVUkvQVBJIiwKICAgICAgImRlc2NyaXB0aW9uIjogIlRoaXMgd2lsbCBleHBsaWNpdHkgc2V0IHRoZSBiaW5kIGlwIGFkZHJlc3MgaW5zdGVhZCBvZiB0cnlpbmcgdG8gYXNzdW1lIGl0LiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3lzdGVtcyB3aXRoIG11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlcy4iCiAgICB9LAogICAgImh0dHBUaHJlYWRmaW5Eb21haW4iOgogICAgewogICAgICAidGl0bGUiOiAiSFRUUCBUaHJlYWRmaW4gRG9tYWluIiwKICAgICAgImRlc2NyaXB0aW9uIjogIldpdGggaW1hZ2UgY2FjaGluZyBlbmFibGVkLCByZXdyaXRlIHRoZSB0aHJlYWRmaW4gaXAgYWRkcmVzcyBpbiB0aGUgbTN1IHRvIHVzZSBhIGRvbWFpbiBmb3IgSFRUUCBtb2RlLiBEbyBOT1QgaW5jbHVkZSBodHRwIChleDogc29tZWRvbWFpbi5jb20pIgogICAgfSwKICAgICJlbmFibGVOb25Bc2NpaSI6CiAgICB7CiAgICAgICJ0aXRsZSI6ICJFbmFibGUgTm9uLUFTQ0lJIiwKICAgICAgImRlc2NyaXB0aW9uIjogIklmIGNoZWNrZWQsIHdpbGwgYWxsb3cgc3BlY2lhbCBub24gYXNjaWkgY2hhcmFjdGVycyBpbiB0aGUgTTNVIGFuZCBFUEcuIERlZmF1bHQgaXMgZGlzYWJsZWQiCiAgICB9LAogICAgImVwZ0NhdGVnb3JpZXMiOgogICAgewogICAgICAidGl0bGUiOiAiRVBHIENhdGVnb3JpZXMiLAogICAgICAiZGVzY3JpcHRpb24iOiAiQ3VzdG9taXplIHRoZSBFUEcgQ2F0ZWdvcmllcy4gVGhlIGZvcm1hdCBpcyBrZXk6dmFsdWV8a2V5OnZhbHVlLCBzbyBOZXdzOm5ld3N8U3BvcnRzOnNwb3J0c3xNb3ZpZXM6bW92aWVzIgogICAgfSwKICAgICJlcGdDYXRlZ29yaWVzQ29sb3JzIjoKICAgIHsKICAgICAgInRpdGxlIjogIkVQRyBDYXRlZ29yaWVzIENvbG9ycyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJDdXN0b21pemUgdGhlIEVQRyBDYXRlZ29yeSBjb2xvcnMuIFRoZSBmb3JtYXQgaXMgdmFsdWU6Y29sb3J8dmFsdWU6Y29sb3IsIHNvIG5ld3M6dG9tYXRvfHNwb3J0czp5ZWxsb3dncmVlbnxtb3ZpZXM6cm95YWxibHVlIgogICAgfSwKICAgICJidWZmZXJUaW1lb3V0IjogewogICAgICAidGl0bGUiOiAiVGltZW91dCBmb3IgbmV3IGNsaWVudCBjb25uZWN0aW9ucyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgVGhyZWFkZmluIGJ1ZmZlciB3YWl0cyB1bnRpbCBuZXcgY2xpZW50IGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZC4gSGVscGZ1bCBmb3IgZmFzdCBjaGFubmVsIHN3aXRjaGluZy4gVmFsdWUgaW4gbWlsbGlzZWNvbmRzLiIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIxMDAiCiAgICB9LAogICAgInVzZXJBZ2VudCI6IHsKICAgICAgInRpdGxlIjogIlVzZXIgQWdlbnQiLAogICAgICAiZGVzY3JpcHRpb24iOiAiVXNlciBBZ2VudCBmb3IgSFRUUCByZXF1ZXN0cy4gRm9yIGV2ZXJ5IEhUVFAgY29ubmVjdGlvbiwgdGhpcyB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgdXNlciBhZ2VudC4gU2hvdWxkIG9ubHkgYmUgY2hhbmdlZCBpZiBUaHJlYWRmaW4gaXMgYmxvY2tlZC4iLAogICAgICAicGxhY2Vob2xkZXIiOiAiVGhyZWFkZmluIgogICAgfSwKICAgICJiYWNrdXBQYXRoIjogewogICAgICAidGl0bGUiOiAiTG9jYXRpb24gZm9yIGF1dG9tYXRpYyBiYWNrdXBzIiwKICAgICAgInBsYWNlaG9sZGVyIjogIi9tbnQvZGF0YS9iYWNrdXAvdGhyZWFkZmluLyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJCZWZvcmUgYW55IHVwZGF0ZSBvZiB0aGUgcHJvdmlkZXIgZGF0YSBieSB0aGUgc2NoZWR1bGUsIFRocmVhZGZpbiBjcmVhdGVzIGEgYmFja3VwLiBUaGUgcGF0aCBmb3IgdGhlIGF1dG9tYXRpYyBiYWNrdXBzIGNhbiBiZSBjaGFuZ2VkLiBUaHJlYWRmaW4gcmVxdWlyZXMgd3JpdGUgcGVybWlzc2lvbiBmb3IgdGhpcyBmb2xkZXIuIgogICAgfSwKICAgICJ0ZW1wUGF0aCI6IHsKICAgICAgInRpdGxlIjogIkxvY2F0aW9uIGZvciB0aGUgdGVtcG9yYXJ5IGZpbGVzIiwKICAgICAgInBsYWNlaG9sZGVyIjogIi90bXAvdGhyZWFkZmluLyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2NhdGlvbiBmb3IgdGhlIGJ1ZmZlciBmaWxlcy4iCiAgICB9LAogICAgImJhY2t1cEtlZXAiOiB7CiAgICAgICJ0aXRsZSI6ICJOdW1iZXIgb2YgYmFja3VwcyB0byBrZWVwIiwKICAgICAgImRlc2NyaXB0aW9uIjogIk51bWJlciBvZiBiYWNrdXBzIHRvIGtlZXAuIE9sZGVyIGJhY2t1cHMgYXJlIGF1dG9tYXRpY2FsbHkgZGVsZXRlZC4iCiAgICB9LAogICAgImF1dGhlbnRpY2F0aW9uV0VCIjogewogICAgICAidGl0bGUiOiAiV0VCIEF1dGhlbnRpY2F0aW9uIiwKICAgICAgImRlc2NyaXB0aW9uIjogIkFjY2VzcyB0byB0aGUgd2ViIGludGVyZmFjZSBvbmx5IHBvc3NpYmxlIHdpdGggY3JlZGVudGlhbHMuIgogICAgfSwKICAgICJhdXRoZW50aWNhdGlvblBNUyI6IHsKICAgICAgInRpdGxlIjogIlBNUyBBdXRoZW50aWNhdGlvbiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQbGV4IHJlcXVlc3RzIGFyZSBvbmx5IHBvc3NpYmxlIHdpdGggYXV0aGVudGljYXRpb24uIDxicj48Yj5XYXJuaW5nISEhPC9iPiBBZnRlciBhY3RpdmF0aW5nIHRoaXMgZnVuY3Rpb24gVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQTVMgRFZSIHNldHRpbmdzIGFuZCBzZXQgdXAgYWdhaW4uIgogICAgfSwKICAgICJhdXRoZW50aWNhdGlvbk0zVSI6IHsKICAgICAgInRpdGxlIjogIk0zVSBBdXRoZW50aWNhdGlvbiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJEb3dubG9hZGluZyB0aGUgdGhyZWFkZmluLm0zdSBmaWxlIHZpYSBhbiBIVFRQIHJlcXVlc3QgaXMgb25seSBwb3NzaWJsZSB3aXRoIGF1dGhlbnRpY2F0aW9uLiIKICAgIH0sCiAgICAiYXV0aGVudGljYXRpb25YTUwiOiB7CiAgICAgICJ0aXRsZSI6ICJYTUwgQXV0aGVudGljYXRpb24iLAogICAgICAiZGVzY3JpcHRpb24iOiAiRG93bmxvYWRpbmcgdGhlIHRocmVhZGZpbi54bWwgZmlsZSB2aWEgYW4gSFRUUCByZXF1ZXN0IGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbiIKICAgIH0sCiAgICAiYXV0aGVudGljYXRpb25BUEkiOiB7CiAgICAgICJ0aXRsZSI6ICJBUEkgQXV0aGVudGljYXRpb24iLAogICAgICAiZGVzY3JpcHRpb24iOiAiQWNjZXNzIHRvIHRoZSBBUEkgaW50ZXJmYWNlIGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbi4iCiAgICB9CiAgfSwKICAid2l6YXJkIjogewogICAgImVwZ1NvdXJjZSI6IHsKICAgICAgInRpdGxlIjogIkVQRyBTb3VyY2UiLAogICAgICAiZGVzY3JpcHRpb24iOiAiUE1TOjxicj4tIFVzZSBFUEcgZGF0YSBmcm9tIFBsZXgsIEVtYnkgb3IgSmVsbHlmaW4gPGJyPjxicj5YRVBHOjxicj4tIFVzZSBvZiBvbmUgb3IgbW9yZSBYTUxUViBmaWxlczxicj4tIENoYW5uZWwgbWFuYWdlbWVudDxicj4tIE0zVSAvIFhNTFRWIGV4cG9ydCAoSFRUUCBsaW5rIGZvciBJUFRWIGFwcHMpIgogICAgfSwKICAgICJ0dW5lciI6IHsKICAgICAgInRpdGxlIjogIk51bWJlciBvZiB0dW5lcnMiLAogICAgICAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIHBhcmFsbGVsIGNvbm5lY3Rpb25zIHRoYXQgY2FuIGJlIGVzdGFibGlzaGVkIHRvIHRoZSBwcm92aWRlci48YnI+QXZhaWxhYmxlIGZvcjogUGxleCwgRW1ieSwgSmVsbHlmaW4sIE0zVSAod2l0aCBhY3RpdmUgYnVmZmVyKS48YnI+QWZ0ZXIgYSBjaGFuZ2UsIFRocmVhZGZpbiBtdXN0IGJlIGRlbGV0ZSBpbiB0aGUgUGxleCAvIEVtYnkgLyBKZWxseWZpbiBEVlIgc2V0dGluZ3MgYW5kIHNldCB1cCBhZ2Fpbi4iCiAgICB9LAogICAgIm0zdSI6IHsKICAgICAgInRpdGxlIjogIk0zVSBQbGF5bGlzdCIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWxlIHBhdGggb3IgVVJMIG9mIHRoZSBNM1UiLAogICAgICAiZGVzY3JpcHRpb24iOiAiTG9jYWwgb3IgcmVtb3RlIHBsYXlsaXN0cyIKICAgIH0sCiAgICAieG1sdHYiOiB7CiAgICAgICJ0aXRsZSI6ICJYTUxUViBGaWxlIiwKICAgICAgInBsYWNlaG9sZGVyIjogIkZpbGUgcGF0aCBvciBVUkwgb2YgdGhlIFhNTFRWIiwKICAgICAgImRlc2NyaXB0aW9uIjogIkxvY2FsIG9yIHJlbW90ZSBYTUxUViBmaWxlIgogICAgfQogIH0sCiAgImxvZ2luIjogewogICAgImZhaWxlZCI6ICJVc2VyIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCIsCiAgICAiaGVhZGxpbmUiOiAiTG9naW4iLAogICAgInVzZXJuYW1lIjogewogICAgICAidGl0bGUiOiAiVXNlcm5hbWUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiVXNlcm5hbWUiCiAgICB9LAogICAgInBhc3N3b3JkIjogewogICAgICAidGl0bGUiOiAiUGFzc3dvcmQiLAogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQiCiAgICB9CiAgfSwKICAiYWNjb3VudCI6IHsKICAgICJmYWlsZWQiOiAiUGFzc3dvcmQgZG9lcyBub3QgbWF0Y2giLAogICAgImhlYWRsaW5lIjogIkNyZWF0ZSB1c2VyIGFjY291bnQiLAogICAgInVzZXJuYW1lIjogewogICAgICAidGl0bGUiOiAiVXNlcm5hbWUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiVXNlcm5hbWUiCiAgICB9LAogICAgInBhc3N3b3JkIjogewogICAgICAidGl0bGUiOiAiUGFzc3dvcmQiLAogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQiCiAgICB9LAogICAgImNvbmZpcm0iOiB7CiAgICAgICJ0aXRsZSI6ICJDb25maXJtIiwKICAgICAgInBsYWNlaG9sZGVyIjogIkNvbmZpcm0iCiAgICB9CiAgfQp9" } diff --git a/src/webserver.go b/src/webserver.go index a598efea..906892c7 100644 --- a/src/webserver.go +++ b/src/webserver.go @@ -140,11 +140,16 @@ func Stream(w http.ResponseWriter, r *http.Request) { streamInfo.URL = fmt.Sprintf("https://%s:%d%s?%s", u.Host, Settings.HttpsPort, u.Path, u.RawQuery) } } + var playListBuffer string systemMutex.Lock() playListInterface := Settings.Files.M3U[streamInfo.PlaylistID] if playListMap, ok := playListInterface.(map[string]interface{}); ok { - playListBuffer = playListMap["buffer"].(string) + if bufferValue, exists := playListMap["buffer"]; exists && bufferValue != nil { + if buffer, ok := bufferValue.(string); ok { + playListBuffer = buffer + } + } } systemMutex.Unlock() diff --git a/threadfin.go b/threadfin.go index a79bd581..ea44fa27 100644 --- a/threadfin.go +++ b/threadfin.go @@ -42,13 +42,13 @@ var GitHub = GitHubStruct{Branch: "Main", User: "Threadfin", Repo: "Threadfin", const Name = "Threadfin" // Version : Version, die Build Nummer wird in der main func geparst. -const Version = "1.2.12" +const Version = "1.2.13" // DBVersion : Datanbank Version const DBVersion = "0.5.0" // APIVersion : API Version -const APIVersion = "1.2.12" +const APIVersion = "1.2.13" var homeDirectory = fmt.Sprintf("%s%s.%s%s", src.GetUserHomeDirectory(), string(os.PathSeparator), strings.ToLower(Name), string(os.PathSeparator)) var samplePath = fmt.Sprintf("%spath%sto%sthreadfin%s", string(os.PathSeparator), string(os.PathSeparator), string(os.PathSeparator), string(os.PathSeparator))